2013-03-31 153 views
1

我目前正在嘗試在JPanel上繪製形狀,它位於另一個JPanel之內,在JFrame之內。如何在另一個JPanel內的JPanel上繪製形狀?

我搜索了Google和Youtube,發現如何在JFrame內繪製具有一個面板的形狀,但沒有找到任何可以幫助我完成所做工作的內容。 (也許我沒有看到什麼)。

代碼中,我迄今所看到的:

public class GameScreen 
{ 
    public void paintComponent(Graphics g) 
    { 
     super.paintComponent(g); 
     g.setColor(Color.red); 
     g.drawRect(100, 10, 30, 40); 
    } 

    public static void main(String[] args) 
    { 
     GameScreen gs = new GameScreen(); 
     JFrame f = new JFrame(); 
     f.setTitle(""); 
     f.setSize(400,400); 
     f.setVisible(true); 
     f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     f.add(gs); 
} 

這一切都很好,當我處理的只是一個面板,但我想一個小組是第1'面板內的顯示形狀我創建了。

+0

Could'nt讓你question..If要繪製很多形狀在一個面板,然後通過繼承'JPanel'創建自己的面板和覆蓋其'paintComponent'方法,繪製不亞於形狀你想在那個面板上畫畫 –

回答

2

以與現在一樣的方式向JFrame添加JPanel,但是使用您自己的JPanel子類來完成。

class MyPanel extends JPanel { 
    @Override 
    public void paintComponent(Graphics g) { 
     super.paintComponent(g); 
     g.setColor(Color.red); 
     g.drawRect(100, 10, 30, 40); 
    } 

    @Override 
    public Dimension getPreferredSize() { 
     return new Dimension(400,400); // As suggested by camickr 
    } 
} 

您可以添加這一個JPanel,它位於

public static void main(String[] args) 
{ 
    MyPanel mp = new MyPanel(); 
    JPanel jp = new JPanel(); 
    jp.add(mp); 

    JFrame f = new JFrame(); 
    f.setTitle(""); 
    f.setSize(400,400); 
    f.setVisible(true); 
    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    f.add(jp); 
} 

這JFrame中

內可以爲組件的組件內工作,如果你將其添加爲子組件。關鍵是擴展組件並覆蓋你想改變的方法。

2

這一切都很好,當我處理的只是一個面板,

的代碼你貼優秀作品,因爲機架採用BorderLayout的。因此,當您將面板添加到框架時,尺寸會增加,並且會看到您的自定義繪畫。

我想在我創建的第一個面板內的面板上顯示形狀。

當您創建面板時,它默認使用FlowLayout。當您將自定義繪畫面板添加到該面板時,它將以其首選大小顯示,因爲您沒有指定首選大小,所以它將爲(0,0)。

在執行自定義繪製的面板上,還需要實現getPreferredSize()方法,以便佈局管理器知道如何排列面板。例如:

public Dimension getPreferredSize() 
{ 
    return new Dimension(200, 200); 
}