Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java GUI工具栏_Java_User Interface_Swing_Awt - Fatal编程技术网

Java GUI工具栏

Java GUI工具栏,java,user-interface,swing,awt,Java,User Interface,Swing,Awt,我正在开发一个Java桌面应用程序。在这一点上,我希望在JFrame的顶部有一些工具栏(与通常的GUI应用程序一样) 我想允许用户通过单击一些按钮来动态添加/删除工具栏。如何实现这一点(通过任何布局或其他方式),以便当用户添加/删除工具栏时,工具栏下方的剩余空间会相应调整。如果使用正确的LayoutManager并添加/删除组件,则应自动计算布局 JPanel p = new JPanel(new BorderLayout()); p.add(someComponent, BorderLay

我正在开发一个Java桌面应用程序。在这一点上,我希望在JFrame的顶部有一些工具栏(与通常的GUI应用程序一样)


我想允许用户通过单击一些按钮来动态添加/删除工具栏。如何实现这一点(通过任何布局或其他方式),以便当用户添加/删除工具栏时,工具栏下方的剩余空间会相应调整。

如果使用正确的LayoutManager并添加/删除组件,则应自动计算布局

JPanel p = new JPanel(new BorderLayout()); p.add(someComponent, BorderLayout.CENTER); JPanel p=newjpanel(newborderlayout()); p、 添加(someComponent,BorderLayout.CENTER); 现在,如果您稍后执行以下操作

SwingUtilities.invokeLater(new Runnable() { public void run() { p.add(newComponent, BorderLayout.NORTH); } }); SwingUtilities.invokeLater(新的Runnable(){ 公开募捐{ p、 添加(新组件,BorderLayout.NORTH); } });
我认为(但尚未测试)面板将自动重新显示以匹配新配置。

我建议您在程序中使用BorderLayout,并保留工具栏的北部区域。在此(北)区域添加另一个容器(具有BoxLayout或FlowLayout),具体取决于您希望工具栏的添加方式/放置位置


看看Java Layout Manager教程。

我为所有工具栏制作了一个JPanel(为该JPanel设置“框”布局),将我的JToolBar工具栏放在JPanel上,并将我的按钮放在它们各自的JToolBar上以对它们进行分组,从而使我的工具栏最终能够工作。我使用的是生成代码的NetBeans,因此我无法有效地将代码放在这里


通过这种设置,我可以使用setVisible()方法来显示和隐藏各个按钮和JToolBar。文档说明应该使用validate()方法来重新定位按钮,但在没有它的情况下,至少在Windows7下,它对我是有效的。当我在Ubuntu10下试用时,工具栏的布局是错误的,所以现在我的答案部分是正确的。

这几乎是半小时前我回答的另一个问题的翻版:如果你对按钮点击做出反应,您甚至不必经历使用
invokeLater
的麻烦,因为您已经在EDT上。对于工具栏,我将使用BorderLayout.PAGE\u START而不是NORTH