Java GridBaglyout fill不会调整容器内组件的大小

Java GridBaglyout fill不会调整容器内组件的大小,java,swing,layout-manager,gridbaglayout,Java,Swing,Layout Manager,Gridbaglayout,我有一个包含两个面板的JFrame 第一个面板(jpanel1)有一条欢迎消息 第二个面板(jpanel2)有一个JTable,包含在JScrollPane中 每当调整JFrame的大小时,我希望JTable使用额外的空间 我使用了GridBagLayout来实现这一点 c.gridx=0,c.gridy=0对于jpanel1 jpanel2的c.gridx=0,c.gridy=1,c.fill=2 我看到当帧大小增加时,jpanel2会增加 每当jpanel2大小增加时,需要做些什么来增加滚动

我有一个包含两个面板的
JFrame

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

第二个面板(
jpanel2
)有一个
JTable
,包含在
JScrollPane

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

我使用了
GridBagLayout
来实现这一点

c.gridx=0
c.gridy=0
对于
jpanel1

jpanel2的
c.gridx=0
c.gridy=1
c.fill=2

我看到当帧大小增加时,
jpanel2
会增加


每当
jpanel2
大小增加时,需要做些什么来增加滚动窗格和表的大小。

您的
布局管理器出现问题

  • 按照MadProgrammer的建议,对
    jpanel2
    使用
    BorderLayout
    ,以调整
    JScrollPane
    内部
    jpanel2
    的大小

  • 使用
    c.fill=BOTH
    时,需要使用
    c.weightx=1;c、 权重=1
    指定组件需要占用多少额外空间。阅读

  • 下面是一个例子:

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

    考虑提供一个说明你的问题的方法。这将减少混乱和更好的响应将
    jpanel2的布局管理器更改为使用
    BorderLayout
    。。。