java - 对齐不同DesignGridLayout的标签列

标签 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

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

最佳答案

Is it possible to align the column for labels of the two panels?

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

在这种情况下,您只能寻找解决方法(如果有的话)。请注意:Should I avoid the use of set(Preferred|Maximum|Minimum)Size methods in Java Swing?是的,我们应该。因此,设置固定的标签大小也不是一种选择。


一些想法

我在考虑这个问题,它不是 DesignGridLayout 限制 但这是关于布局管理器如何工作的。如果你看一下 How Layout Managers workLaying Out Components Within a Container教训,它是这样说的:

  1. Layout managers basically do two things:

    • Calculate the minimum/preferred/maximum sizes for a container.
    • Lay out the container's children.

Layout managers do this based on the provided constraints, the container's properties (such as insets) and on the children's minimum/preferred/maximum sizes. If a child is itself a container then its own layout manger is used to get its minimum/preferred/maximum sizes and to lay it out.

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

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

关于java - 对齐不同DesignGridLayout的标签列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22219544/

相关文章:

java - Statement.executeQuery() 为 SELECT 语句返回什么

Java调整图像的中心

java - 为什么我的按钮没有显示?

java - GridBagLayout - 一行的高度导致下一行的宽度发生变化

java - JTextArea 的大小

java - 连接 ArrayList 中的字符串和 double

java - 微调器中的 SimpleAdapter、文本和图像

java - 正则表达式:从字符串中提取字符串

java - 如何获取JLabel[ ] [ ]中鼠标点击的标签索引?

java - 如何在Java中设置GridBagLayout的列宽