【问题标题】:Swing LayoutManager: Maintaining uniform buttonSize while filling the whole horizontal spaceSwing LayoutManager:在填充整个水平空间的同时保持统一的buttonSize
【发布时间】:2012-07-16 18:19:19
【问题描述】:

我正在尝试构建以下可调整大小的 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?

【问题讨论】:

    标签: java swing layout


    【解决方案1】:

    我强烈建议查看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);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-18
      • 1970-01-01
      • 2012-03-26
      • 1970-01-01
      • 2020-06-10
      • 1970-01-01
      相关资源
      最近更新 更多