java - 阻止 MigLayout 为组件分配空间

标签 java swing miglayout

我有一个 JFrame,它由一组可能任意大的“标题”组成,单击这些“标题”即可公开面板,每个标题一个(概念上类似于垂直排列的工具栏,标题是公开各种面板的选项卡)工具面板)。我希望标题分配有固定数量的垂直空间,但水平增长以填充框架的宽度。我希望标题暴露的面板占用框架中所有多余的垂直空间 - 但前提是它们可见;当不可见时,它们应该占据零空间。

不幸的是,无论我如何尝试调整布局,我都无法阻止它为标题和不可见面板分配额外的空间。在演示应用程序中,只需将窗口放大即可。理想的行为是蓝色的“Hello 0”面板应该变高,而所有其他组件保持“紧凑”;在实践中,我看到两个“紧凑标签”标签周围以及两个较低的“Click me”标题下方有空白区域。

感谢您的宝贵时间!

public class Demo {
   public static void main(String[] args) {
      final JFrame frame = new JFrame("Inspector");
      frame.setLayout(new MigLayout("debug, fill, flowy, insets 0, gap 0"));
      frame.add(new JLabel("Compact label 1"));
      frame.add(new JLabel("Compact label 2"));
      for (int i = 0; i < 3; ++i) {
         JPanel wrapper = new JPanel(
               new MigLayout("debug, fill, flowy, insets 0, gap 0",
                  "", "0[]0[grow]0"));
         // Fixed-height header should grow horizontally only
         JPanel header = new JPanel(
               new MigLayout("flowx, fillx, insets 0, gap 0"));
         header.add(new JLabel("Click me!"), "growx, height 40!");
         header.setBackground(Color.RED);
         // Variably-sized body should fill any extra space.
         final JPanel body = new JPanel(new MigLayout("fill"));
         body.add(new JLabel("Hello, " + i), "grow");
         body.setBackground(Color.BLUE);
         body.setVisible(i == 0);
         wrapper.add(header, "growx");
         wrapper.add(body, "growy, hidemode 2");
         header.addMouseListener(new MouseAdapter() {
            @Override
            public void mouseClicked(MouseEvent e) {
               boolean shouldShow = !body.isVisible();
               body.setVisible(shouldShow);
               frame.pack();
            }
         });
         frame.add(wrapper, "grow");
      }
      frame.pack();
      frame.setVisible(true);
   }
}

最佳答案

最好使用 JTabbedPane得到你想要的。

否则,您可以对组件设置百分比宽度和高度限制。 因此,对于标题,您可以告诉他们使用 100% 的宽度:

wrapper.add(header, "growx , w 100%");

对于主体,您可以输入“h 100%”(您可以使用 h 或 height)

wrapper.add(body, "growy, hidemode 2, h 100%");

它并不完美,但希望这会有所帮助。

关于java - 阻止 MigLayout 为组件分配空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35439648/

相关文章:

java - 使用 Canvas 和计时器绘图

java - JMenu 作为带有子菜单的 JRadioButtonMenuItem

java - 在 miglayou 中调整表格大小

Java 将 2D 图形作为参数传递

java - MigLayout 列约束

java - MigLayout:推送不符合我的预期

java - SQL/Hibernate 标准 - 按故障分组

java - 适合存储java项目信息的数据结构

java - vbscript 上的 aes/rijndael 自定义 key

java - java中如何计算12周前的日期?