2017-11-25 170 views
0

一個快速而簡單的問題我似乎無法找到答案。 是否可以繪製一個形狀(矩形,橢圓形等)並添加到JPanel中,然後將此JPanel添加到JFrame中?我在網上找到的圖形繪製示例直接將形狀添加到JFrame中。例如:將圖形添加到JPanel

public class DShape extends JPanel 
    { 

    public void paintComponent(Graphics g) 
    { 
     super.paintComponent(g); 
     g.setColor(Color.GREEN); 
     g.drawRect(10,10,100,30); 
    } 

     public class Test { 

     public static void main(String[] args) 
    { 
     JFrame frame = new JFrame(); 
     DShape shape = new DShape(); 
     JPanel panel = new JPanel(); 
     panel.add(shape); 
     frame.add(panel); 
     frame.setSize(200,200); 
     frame.setVisible(true); 
     } 
    } 

此代碼將只顯示一個空白的JFrame。如果將DShape類對象直接添加到JFrame,則會顯示綠色的矩形。是否可以首先將形狀添加到JPanel,然後將JPanel添加到JFrame中?謝謝。

+0

您忘記了默認情況下JFrame的contentPane使用BorderLayout,並且您需要閱讀Swing佈局管理器,因爲這是解決您的問題的關鍵。現在如果你想在另一個JPanel之上顯示一個JPanel,那麼這是一個不同的問題,並且需要一個不同的解決方案,包括只使用一個JPanel來繪圖,並且保存子組件而不是兩個JPanel。 –

+0

這是原始封閉的副本:https://stackoverflow.com/questions/13057836/using-two-jpanels-in-one-jframe。但是,這不是添加多個面板的問題。我相信這是一個繪畫問題,所以我重新提出了這個問題。 – camickr

回答

0

我在網上找到的圖形繪製示例直接將形狀添加到JFrame中。

當將面板添加到該幀直接內容窗格的默認佈局是BorderLayout的,所以組件被調整到幀的大小。

是否可以繪製一個形狀(矩形,橢圓形等)並添加到JPanel中,然後將此JPanel添加到JFrame中?

JFrame frame = new JFrame(); 
    DShape shape = new DShape(); 
    JPanel panel = new JPanel(); 
    panel.add(shape); 
    frame.add(panel); 

的默認佈局管理的JPanelFlowLayout。 A FlowLayout尊重添加到它的組件的首選大小。您的組件沒有首選大小,因此大小爲(0,0),因此沒有任何可繪製的內容。

您需要覆蓋DShape面板的getPreferredSize()方法以返回適當的大小。

閱讀有關Custom Painting的Swing教程的部分以獲取更多信息和工作示例。

+0

這解決了它。謝謝! –