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/

相关文章:

java - 显示子菜单时的 JPopupMenu 错误/故障(?)

java - 如何打印 i 和 b 之间的数字而不包括 i

java - 如果在 Tomcat 7 中禁用了 TRACE、OPTIONS http 方法,如何进行测试

java - (Java) 我可以使用KeyListener输入文本吗? (事件调度线程内部)

c++ - Qt - 在窗口上安装布局管理器

Java网络编程

java - 如何自定义格式化程序 JFormattedTextField 以显示 IP 地址?

java - 在 fxml 文件之间切换

java - 约束布局是否应该包裹所有其他 View ?

Android:设置对话框的尺寸( "fill_parent"是什么意思?)