使用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);
执行该代码,将创建此窗口:
是否可以将列对齐两个面板的标签?
答案 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部分,请说明:
- 醇>
布局管理员基本上做了两件事:
- 计算容器的最小/首选/最大尺寸。
- 布置容器的孩子。
布局管理器根据提供的约束执行此操作 容器的属性(例如insets)和孩子们的属性 最小/首选/最大尺寸。如果孩子本身就是一个容器 它自己的布局管理器用于获得其最小/首选/最大值 尺寸和布局。
这意味着如果一个子本身就是一个容器,那么它可能有自己的布局管理器来布置自己的子组件。此属性使此容器独立于其祖先(关于布局组件)。如果你有一个“全局”(只是为了某种方式命名)布局管理器,它将组件 在 两个独立的容器中对齐,那么它将打破上述合同,因为子容器不会不要独立于他们的祖先。
我对这个布局经理的相对较新,但我不知道任何布局管理器可以让你做你需要的(或者你觉得你需要),因为他们实际上并不需要。恕我直言,你应该重新考虑是否真的需要所有这些面板,或者你可以在一个容器中管理所有组件。也许在这个列表中有一个更适合您需要的布局管理器: