GridBaglyout填充不会调整容器内的组件大小

时间:2014-10-28 06:24:22

标签: java swing layout-manager gridbaglayout

JFrame包含两个面板。

第一个面板(jpanel1)有一条欢迎信息。

第二个小组(jpanel2)的JTable中包含JScrollPane

每当JFrame调整大小时,我希望JTable使用额外的空格。

我曾使用GridBagLayout来实现此目标

c.gridx=0c.gridy=0 <{1}}。jpanel1

c.gridx=0

c.gridy=1c.fill=BOTHjpanel2

我看到jpanel2在帧大小增加时会增长。

jpanel2尺寸增加时,需要采取哪些措施来增加滚动窗格和表格大小。

1 个答案:

答案 0 :(得分:2)

LayoutManager的问题。

  1. 根据MadProgrammer的建议,BorderLayout使用jpanel2来调整JScrollPanejpanel2的大小。

  2. 使用c.fill=BOTH,您需要使用c.weightx = 1;c.weighty = 1;来指定组件需要多少额外空间。阅读more

  3. 以下是示例:

    import java.awt.BorderLayout;
    import java.awt.GridBagConstraints;
    import java.awt.GridBagLayout;
    
    import javax.swing.BorderFactory;
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.JPanel;
    import javax.swing.JScrollPane;
    import javax.swing.JTable;
    
    public class TestFrame extends JFrame {
    
        public TestFrame() {
            init();
            setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            pack();
            setLocationRelativeTo(null);
            setVisible(true);
        }
    
        private void init() {
            JPanel p1 = new JPanel();
            p1.setBorder(BorderFactory.createTitledBorder("P1"));
            p1.add(new JLabel("test"));
    
            JPanel p2 = new JPanel(new BorderLayout());
            p2.setBorder(BorderFactory.createTitledBorder("P2"));
    
            p2.add(new JScrollPane(new JTable(2,2)));
    
            setLayout(new GridBagLayout());
    
            GridBagConstraints c = new GridBagConstraints();
    
            c.gridx=0;
            c.gridy=0;
            add(p1,c);
    
            c.fill = GridBagConstraints.BOTH;
            c.weightx = 1;
            c.weighty = 1;
            c.gridx=0;
            c.gridy=1;
            add(p2,c);
        }
    
        public static void main(String args[]) {
            new TestFrame();
        }
    
    }