如图所示,首先有两个面板:topPanel 和 btmPanel。topPanel 由另外两个面板组成,一个填充黑色,一个填充灰色,这不是问题。
在 btmPanel 中有三个面板都在 GridbagLayouts 中,每个面板都有不同数量的 JButtons 问题是第三个面板有更多的 JButtons 所以我想要的是从顶部开始对齐它们。那可能吗?
谢谢。
如图所示,首先有两个面板:topPanel 和 btmPanel。topPanel 由另外两个面板组成,一个填充黑色,一个填充灰色,这不是问题。
在 btmPanel 中有三个面板都在 GridbagLayouts 中,每个面板都有不同数量的 JButtons 问题是第三个面板有更多的 JButtons 所以我想要的是从顶部开始对齐它们。那可能吗?
谢谢。
在设置这 3 个面板的约束时,请确保
weighty
大于 0 的值,例如 1.0,anchor
为NORTH
orNORTHEAST
或NORTHWEST
。当然,该fill
属性只能设置为NONE
or 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();
}
});
}
}
只需将 Layout 设置为btmPanel
GridLayout (1, 3, 5, 5); ,这将使它们与顶部对齐。由于目前的默认布局btmPanel
是 FlowLayout,因此您遇到了这个问题。最重要的是,btmPanel
你有这三个JPanel
s GridBagLayout
。