4

在此处输入图像描述

如图所示,首先有两个面板:topPanel 和 btmPanel。topPanel 由另外两个面板组成,一个填充黑色,一个填充灰色,这不是问题。

在 btmPanel 中有三个面板都在 GridbagLayouts 中,每个面板都有不同数量的 JButtons 问题是第三个面板有更多的 JButtons 所以我想要的是从顶部开始对齐它们。那可能吗?

谢谢。

4

2 回答 2

2

在设置这 3 个面板的约束时,请确保

  1. 将 GridBagConstraint 属性设置为weighty大于 0 的值,例如 1.0,
  2. 并将属性设置anchorNORTHorNORTHEASTNORTHWEST

当然,该fill属性只能设置为NONEor HORIZONTAL,否则所有面板都会垂直拉伸,我猜你不希望这样。

这是我描述的一个例子。我通过用 3 个按钮(其中一个比另一个高)替换 3 个大面板来简化您的案例:

结果(查看 3 个按钮如何在顶部对齐):

在此处输入图像描述

import java.awt.Dimension;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;

public class TestLayout {

    protected void initUI() {
        final JFrame frame = new JFrame(TestLayout.class.getSimpleName());
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        JPanel btmPanel = new JPanel(new GridBagLayout());
        GridBagConstraints gbc = new GridBagConstraints();
        gbc.weighty = 1.0;
        gbc.weightx = 1.0;
        gbc.fill = GridBagConstraints.HORIZONTAL;
        gbc.insets = new Insets(5, 5, 5, 5);
        gbc.anchor = GridBagConstraints.NORTH;
        JButton comp = new JButton("Panel-1");
        btmPanel.add(comp, gbc);
        JButton comp2 = new JButton("Panel-2");
        btmPanel.add(comp2, gbc);
        JButton comp3 = new JButton("Panel-3");
        comp3.setPreferredSize(new Dimension(comp.getPreferredSize().width, comp.getPreferredSize().height + 10));
        btmPanel.add(comp3, gbc);
        frame.add(btmPanel);
        frame.pack();
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {

            @Override
            public void run() {
                new TestLayout().initUI();
            }
        });
    }
}
于 2012-10-10T14:31:35.913 回答
1

只需将 Layout 设置为btmPanelGridLayout (1, 3, 5, 5); ,这将使它们与顶部对齐。由于目前的默认布局btmPanel是 FlowLayout,因此您遇到了这个问题。最重要的是,btmPanel你有这三个JPanels GridBagLayout

于 2012-10-10T16:15:52.257 回答