2009-10-09 101 views
2

我有在JPanel上顯示圖形的問題。我創建了三個相互關聯的類,如下所示。我想知道爲什麼這個代碼,不顯示我的繪圖。JPanel不顯示圖紙

c.add(pDraw); 
pDraw.add(draw); 

1)主

public class mainPage { 
    public static void main(String[]args){ 
     JFrame appFrame = new Frame(); 
     appFrame.setVisible(true); 
     appFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    } 
} 

2)的JFrame

public class Frame extends JFrame implements ActionListener{ 

    private drawingBoard draw; 

    public Frame(){ 
     draw = new drawingBoard(); //generate pattern 
     GridBagLayout m = new GridBagLayout(); 
     Container c = (Container)getContentPane(); 
     c.setLayout (m); 
     GridBagConstraints con; 
     ....... 

     JPanel pDraw = new JPanel();  
     pDraw.setPreferredSize(new Dimension(500,500)); 
      ..... 
     c.add(pDraw); 
     pDraw.add(draw); // Call other class for drawing 

     ..... 
     setResizable(false); 
     pack(); 
     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     setVisible(true); 
    } 
} 

3)的JPanel

public class drawingBoard extends JPanel { 
     ..... 
     public void paint(Graphics g) { 
     ...... 
     } 
    } 
+2

沒有佈局約束或'油漆(圖形)'代碼,這是一種很難調試。我的頭頂,由於佈局錯誤,'drawingBoard'的大小是0x0;或者你的油漆代碼不通。或者,您是否調試過您的代碼以確認「paint(Graphics)」被調用? – 2009-10-09 02:50:32

+0

謝謝凱文,你說得對,我忘了設置drawingBoard的大小:-)。 paint()方法工作正常。再次感謝。 – Jessy 2009-10-09 03:27:24

+0

應該已經發布作爲答案我猜。 :/ – 2009-10-09 03:59:35

回答

0

雖然這是一個有點艱難的調試代碼,而不會看到的GridBagConstraints或者paint()方法,I將會提供給你,通常認爲覆蓋paintComponent()方法而不是paint()方法會更好。在drawingBoard中,試試這個而不是重寫paint():

public void paintComponent(Graphics g) { 
    super.paintComponent(g); //optional 
    ... 
} 

這可能會有所作爲。欲瞭解更多信息,check out this article from Java。另外,作爲免費贈品,您可能不需要在main()方法和Frame的構造函數中執行setVisible()和setDefaultCloseOperation()。

1

它對您的代碼進行一行更改。

所有你需要做的就是閱讀Swing tutorial on "Custom Painting"找出你做錯了什麼。

這是連續第三個問題,如果您不耐煩地閱讀教程,可能會在幾分鐘內解決。

而你還沒有學會如何發佈SSCCE,所以我不打算向你提供答案。

0

我同意Ben Torell在他的文章中提出的所有觀點 - 在這裏加上一些額外的故障排除建議。

試試這個 -

public class DrawingBoardTest extends JFrame { 
    public DrawingBoardTest() { 
     getContentPane().add(new drawingBoard(), BorderLayout.CENTER); 
    } 
    public static void main(String[] args) { 
     JFrame f = new DrawingBoardTest(); 
     f.setSize(500, 500); 
     f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     f.setVisible(true); 
    } 
} 

如果drawingPanel顯示出來,那麼它與你的GridBagLayout的問題或有上drawingPanel設置首選的大小不是足夠大,以顯示繪圖,或添加畫板到pDraw(其中,就我從代碼中可以看到的來說,並不是真的需要......)。

JFrame內容窗格的默認佈局是BorderLayout,它將爲中心組件提供所有空間,這是我將drawingBoard放置在我發佈的代碼中的位置。

JPanel的默認佈局是FlowLayout,它只會爲組件提供首選大小。我看到您在pDraw上設置了首選尺寸,但不是在drawingBoard上,在原始代碼中 - drawingBoard的首選尺寸設置可能太小而無法顯示圖形。

如果drawingPanel不顯示 - 那麼這是您的drawingPanel paint()方法的問題。

3

下面是答案,我忘了設定的畫板JPanel的大小:-)

public class drawingBoard extends JPanel { 
     public drawingBoard(){ 
     setPreferredSize(new Dimension (500,500)); 

     } 
    }