2013-06-05 68 views
2

我有一個頂部帶有JMenuBar的JFrame。如何在NetBeans GUI編輯器中爲JPanel分配JFrame?

我在中間的JFrame上放了一個JPanel,並把它叫做Panel1

接下來我創建了另一個類,名爲Panel2擴展了JPanel,我在其上放了一些項目。

現在在我的JFrame當用戶選擇對應的JMenuItem我要分配Panel1的到我創建是Panel2類之一。因此,我可以以某種方式看到我的JFrame中的其他面板!

我該怎麼做?

在課堂上的JFrame我已經寫:

JPanel Panel2 = new JPanel(); 
Panel1 = Panel2; 

它不工作,什麼建議嗎?

回答

2
  • JPanel具有FlowLayout默認LayoutManager,在API實現

  • JPanel返回零PreferredSize

  • 你不能Panel1 = Panel2;添加一個JPanel到另一個,然後第二JPanel不添加到1。 JPanel,需要myPanel1.add(myPanel2)

  • carrefully回饋Java的話和方法名Paneljava.awt.Panel

  • 所有重要的信息是Oracle教程A Visual Guide to Layout ManagersHow to Use PanelsJPanel API

+0

以前面的問題,使用CardLayout,隱形和準備JPanels與勝負鋪設JComponents不能導致內存消耗的情況下,JComponents模型是空的,值,項目,模型要素被刪除所有不可見JPanels – mKorbel

+0

謝謝我最終使用CardLayout,它工作正常。 – Bernard

1

幾件事情。

第一句話。使用最初的小寫字母更好地命名字段,方法和變量。非常廣泛的約定。

在面板2的GUI編輯器中選擇「自定義創建代碼」,然後在那裏輸入new Panel2()

要動態地將JPanel panel1與Panel2 panel2進行交換,覆蓋這些變量將不起作用; panel1的對象被添加到JFrame的一些swing容器中。

不要在菜單項的動作處理:

EventQueue.invokeLater(new Runnable() { 
    @Override 
    public void run() { 
     remove(panel1); 
     panel1 = new Panel2(); 
     add(panel1); 
     invalidate(); 
    } 
}); 

在實踐中很少這樣做不過。

相關問題