1

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

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

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

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

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

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

实现这一目标的最佳方法是什么,应该使用什么 LayoutManager?

4

1 回答 1

3

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

如果您不想使用它,我建议您制作一个带有 BorderLayout 的 JPanel 并将滚动窗格放在边框布局的中心。然后,使用 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);
于 2012-07-16T18:25:43.387 回答