Java GridBagLayout中重量最轻的间隔元件
在GridBagLayout中,哪个组件最适合在面板中提供空白空间?理想情况下,我希望使用具有以下功能的组件:Java GridBagLayout中重量最轻的间隔元件,java,user-interface,swing,layout,Java,User Interface,Swing,Layout,在GridBagLayout中,哪个组件最适合在面板中提供空白空间?理想情况下,我希望使用具有以下功能的组件: 低开销 无需空白空间(即无最小尺寸)时无副作用 一个平凡的构造函数(没有参数) JPanel违反了上述第2条。长方体需要构造函数参数(#3),在这种简单的情况下确实不需要。JLabel工作得很好,但我担心它可能会有一些开销,尽管承认它可能相当低 匿名类似乎也能很好地工作(即“newjcomponent(){}”),但每次使用它时都会添加一个额外的.class文件。我想它的开销并不比任何
仅供参考,GridBagLayout是我所在团队的一个约束条件,因此其他布局不是选项。您提到了Box,但它可以以“轻量级”的方式与以下四种只返回组件的静态方法一起使用。我一直在用这些。就绘画而言,它们是看不见的。在你的情况下,看起来胶水是最好的选择。一个简单的构造函数(就像那是一件坏事!),低开销。当不需要空间时的副作用完全取决于你如何布置你的网格包
panel.add( Box.createHorizontalGlue() );
panel.add( Box.createVerticalGlue() );
panel.add( Box.createHorizontalStrut( int width ) );
panel.add( Box.createVerticalStrut( int width ) );
JavaDoc here:我还尝试了一个从Component(而不是JComponent)派生的匿名类,这似乎也很有效。我有点担心将AWT组件放在Swing GUI中可能会出现一些兼容性问题(例如缺少双缓冲),但这显然是一个非常轻量级的解决方案。组件应该很好。Canvas不会,因为它将创建一个重量级对等体,尽管我相信最近在这方面有一些改进工作。我非常喜欢这个解决方案。“createGlue()”方法也适用于我的目的。我唯一感到不安的是,它是为盒子布局设计的,但我会努力克服它,不要那么挑剔。:)谢谢你的回答!无需担心——来自JavaDoc:“Box提供了几个类方法,这些方法对于使用BoxLayout的容器非常有用——甚至对于非Box容器也是如此。”注意,链接文档建议不要使用struts,而应该使用刚性区域来固定大小。(除了刚性区域外,使用胶水制作可扩展垫片,使用自定义框。填充物控制最大/最小/首选尺寸。)在JPanel/GridLayout中使用垂直胶水为我打破了某些组件的尺寸(标题边框不再水平扩展)。