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 GridBagLayout中重量最轻的间隔元件_Java_User Interface_Swing_Layout - Fatal编程技术网

Java GridBagLayout中重量最轻的间隔元件

Java GridBagLayout中重量最轻的间隔元件,java,user-interface,swing,layout,Java,User Interface,Swing,Layout,在GridBagLayout中,哪个组件最适合在面板中提供空白空间?理想情况下,我希望使用具有以下功能的组件: 低开销 无需空白空间(即无最小尺寸)时无副作用 一个平凡的构造函数(没有参数) JPanel违反了上述第2条。长方体需要构造函数参数(#3),在这种简单的情况下确实不需要。JLabel工作得很好,但我担心它可能会有一些开销,尽管承认它可能相当低 匿名类似乎也能很好地工作(即“newjcomponent(){}”),但每次使用它时都会添加一个额外的.class文件。我想它的开销并不比任何

在GridBagLayout中,哪个组件最适合在面板中提供空白空间?理想情况下,我希望使用具有以下功能的组件:

  • 低开销
  • 无需空白空间(即无最小尺寸)时无副作用
  • 一个平凡的构造函数(没有参数)
  • JPanel违反了上述第2条。长方体需要构造函数参数(#3),在这种简单的情况下确实不需要。JLabel工作得很好,但我担心它可能会有一些开销,尽管承认它可能相当低

    匿名类似乎也能很好地工作(即“newjcomponent(){}”),但每次使用它时都会添加一个额外的.class文件。我想它的开销并不比任何给定的事件处理程序多。是否值得为此创建一个从JComponent派生的自定义零实现组件?是否有我缺少的现有组件


    仅供参考,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中使用垂直胶水为我打破了某些组件的尺寸(标题边框不再水平扩展)。