java - Swing 布局管理器 : Maintaining uniform buttonSize while filling the whole horizontal space

标签 java swing layout

我正在尝试构建以下可调整大小的 JPanel:

+-----------------------+
|                       |
|                       |
|                       |
|                       |
|                       |
|     JScrollPane       |
|     (containing a     |
|        JTable)        |
|                       |
|                       |
|                       |
|                       |
|                       |
+-----------+-----------+
|  button1  |    b2     |
+-----------+-----------+

我希望 button1 和 b2 始终具有相同的宽度,这意味着当整个组件水平调整大小时,两个按钮应该获得或失去相同的宽度。按钮本身之间以及按钮与面板边框之间不应有空格。也就是说,按钮应该总是占据所有可用的水平空间。请注意,按钮上的文本长度不同。

当垂直调整组件大小时,我希望 JScrollPane 获得新的高度,而带有按钮的行应始终保持相同的高度(本质上是 button1.getPreferedSize().getHeight() ).

我尝试了一大堆不同的布局管理器。我最接近的是将这两个按钮放在一个新的 JPanel 中,并将该面板的 LayoutManger 设置为 new GridLayout(0,2)。这至少为两个按钮保持了统一的宽度并填充了所有水平空间。但是,当垂直调整面板大小时,它们的高度仍然会发生变化。

对于 GroupLayout 等其他 LayoutManager,我能够通过链接按钮 (groupLayout.linkSize(button1, b2)) 来保持相同的宽度,但无法让它们填满整个水平空间.

实现此目的的最佳方法是什么以及应该使用什么 LayoutManager?

最佳答案

我强烈建议查看 MigLayout .这是一个非常灵活且易于使用的布局管理器。

如果您不想使用它,我建议制作一个带有 BorderLayout 的 JPanel,并将滚动 Pane 放在 borderlayout 的中心。然后,制作另一个具有 1 行 2 列的 GridLayout 的 JPanel,并将两个按钮添加到其中。然后,将该面板添加到具有边框布局的 JPanel 的南部区域。

代码看起来像这样:

    JPanel mainPanel = new JPanel();
    mainPanel.setLayout(new BorderLayout());

    JPanel tablePanel = new JPanel();
    JScrollPane jsp = new JScrollPane(new JTable());
    tablePanel.add(jsp);
    mainPanel.add(jsp, BorderLayout.CENTER);

    JPanel buttonPanel = new JPanel();
    buttonPanel.setLayout(new GridLayout(1, 2));
    JButton button1 = new JButton("Button 1");
    JButton button2 = new JButton("Button 2");
    buttonPanel.add(button1);
    buttonPanel.add(button2);
    mainPanel.add(buttonPanel, BorderLayout.SOUTH);

    this.add(mainPanel);

关于java - Swing 布局管理器 : Maintaining uniform buttonSize while filling the whole horizontal space,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11510167/

相关文章:

javax.swing.tree.TreePath 选择 XPath 查询字符串

java - 如何在 hibernate 5.2 标准中使用 AND?

java - 更改 JTextArea 中的位置标记颜色

layout - 如何全屏显示网页 View (自动调整)

css - 布局时使用 em 或 rem

java - MigLayout 元素对齐

Java数据结构选择

java - 从异步 rest 模板 spring 返回值

java - 在处理事物时创建模态 JDialog

java - 从 JTextarea 获取文本到 OutputStream 或将文本打印到控制台