2013-06-05 36 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(); 
    } 
}); 

在实践中很少这样做不过。

相关问题