对齐不同DesignGridLayout的标签列

时间:2014-03-06 08:59:55

标签: java swing layout-manager

使用DesignGridLayout考虑​​两个JPanel个实例,如下所示:

JFrame demoApplicationFrame = new JFrame();
JPanel singleDesignGridLayout1 = new JPanel();
DesignGridLayout layout1 = new DesignGridLayout(singleDesignGridLayout1);
layout1.row().grid(new JLabel("Short lbl1")).add(new JTextField(""));
layout1.row().grid(new JLabel("Short lbl2")).add(new JTextField(""));

JPanel singleDesignGridLayout2 = new JPanel();
DesignGridLayout layout2 = new DesignGridLayout(singleDesignGridLayout2);
layout2.row().grid(new JLabel("A bit longer label"))
    .add(new JTextField(""));
layout2.row().grid(new JLabel("Another long label here"))
    .add(new JTextField(""));

demoApplicationFrame.getContentPane().add(singleDesignGridLayout1,
     BorderLayout.NORTH);
demoApplicationFrame.getContentPane().add(singleDesignGridLayout2,
    BorderLayout.SOUTH);

执行该代码,将创建此窗口:

Window screenshot

是否可以将列对齐两个面板的标签?

1 个答案:

答案 0 :(得分:3)

  

是否可以将列对齐两个面板的标签?

不,不是因为DesignGridLayout使用 中的网格相同的容器。因此,如果您的组件放置在不同的面板中,则DesignGridLayout无法确保跨面板组件的对齐。

在此上下文中,您只能查找变通方法(如果有)。请注意这一点:Should I avoid the use of set(Preferred|Maximum|Minimum)Size methods in Java Swing?是的,我们应该。因此,设置固定标签尺寸也不是一种选择。


一些想法

我在考虑这个问题并且它不是DesignGridLayout 限制,但这是关于布局管理器的工作方式。如果您查看How Layout Managers work课程的Laying Out Components Within a Container部分,请说明:

  
      
  1. 布局管理员基本上做了两件事:

         
        
    • 计算容器的最小/首选/最大尺寸。
    •   
    • 布置容器的孩子。
    •   
  2.         

    布局管理器根据提供的约束执行此操作   容器的属性(例如insets)和孩子们的属性   最小/首选/最大尺寸。如果孩子本身就是一个容器   它自己的布局管理器用于获得其最小/首选/最大值   尺寸和布局。

这意味着如果一个子本身就是一个容器,那么它可能有自己的布局管理器来布置自己的子组件。此属性使此容器独立于其祖先(关于布局组件)。如果你有一个“全局”(只是为了某种方式命名)布局管理器,它将组件 两个独立的容器中对齐,那么它将打破上述合同,因为子容器不会不要独立于他们的祖先。

我对这个布局经理的相对较新,但我不知道任何布局管理器可以让你做你需要的(或者你觉得你需要),因为他们实际上并不需要。恕我直言,你应该重新考虑是否真的需要所有这些面板,或者你可以在一个容器中管理所有组件。也许在这个列表中有一个更适合您需要的布局管理器: