多个JPanel GridBagConstraints对齐

时间:2012-10-10 14:03:46

标签: java swing gridbaglayout

enter image description here

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

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

感谢。

2 个答案:

答案 0 :(得分:2)

设置这3个面板的约束时,请务必

  1. 将GridBagConstraint属性weighty设置为大于0的值,例如1.0,
  2. 并将属性anchor设置为NORTHNORTHEASTNORTHWEST
  3. 当然,fill属性只能设置为NONEHORIZONTAL,否则所有面板都会垂直拉伸,我猜你不需要。

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

    结果(查看3个按钮在顶部对齐的方式):

    enter image description here

    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();
                }
            });
        }
    }
    

答案 1 :(得分:1)

只需将btmPanel的布局设置为 GridLayout(1,3,5,5); ,即可将它们与顶部对齐。由于目前btmPanel的默认布局是FlowLayout,因此您遇到此问题。在此btmPanel之上,您有JPanel这三个GridBagLayout