【问题标题】:How to make the vertical gap in a BoxLayout smaller?如何使 BoxLayout 中的垂直间隙更小?
【发布时间】:2013-01-17 03:16:52
【问题描述】:

我有以下表格,它使用垂直 BoxLayout 和 FlowLayout JPanels 来表示行:

如何缩小每行之间的巨大差距?这是我的代码:

【问题讨论】:

  • 如需尽快获得更好的帮助,请附上SSCCE
  • 忠告,不要使用 setPreferredSize()。这只是与 Swing 作斗争,而不是与它一起工作。

标签: java swing user-interface layout-manager boxlayout


【解决方案1】:

问题在于 BoxLayout 尊重组件的最大尺寸。由于面板没有最大尺寸,因此每个面板都会增加高度以占用可用空间。

另一种解决方案是在将组件添加到面板后确定每个面板的最大尺寸:

pnlName.setMaximumSize( pnlName.getPreferredSize() );
pnlSurname.setMaximumSize( pnlSurname.getPreferredSize() );
pnlAge.setMaximumSize( pnlAge.getPreferredSize() );

【讨论】:

    【解决方案2】:

    您可以使用胶水(不可见的组件)来填充可用空间。看到这个doc

    除了盒子布局,您还可以使用 VerticalLayout。不幸的是,swing api 中不存在这种布局,但有很多免费的此类布局可用实现。

    例如:http://www.java2s.com/Code/Java/Swing-JFC/AverticallayoutmanagersimilartojavaawtFlowLayout.htm

    【讨论】:

      【解决方案3】:

      你需要的是贪婪的胶水。除非胶水是贪婪的,否则它和它的兄弟姐妹都会收到任何额外空间的一部分。胶水是一个 Box.Filler 对象,并且有一个方法 changeShape 来重置其大小约束。要使其变得贪婪,请将首选大小设置为 Integer.MAX_VALUE:

          Box.Filler glue = Box.createVerticalGlue();
          glue.changeShape(glue.getMinimumSize(), 
                          new Dimension(0, Short.MAX_VALUE), // make glue greedy
                          glue.getMaximumSize());
      

      将此粘合元素添加为外盒中的最后一项。

      【讨论】:

      • 我必须在第一行转换为Box.FillerBox.Filler glue = (Box.Filler) Box.createVerticalGlue();
      猜你喜欢
      • 2012-06-18
      • 2011-08-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-31
      • 1970-01-01
      • 2011-02-27
      • 2014-08-25
      相关资源
      最近更新 更多