Java-与GridBagLayout的两个代码比较-IllegalArgumentException

Java-与GridBagLayout的两个代码比较-IllegalArgumentException,java,swing,layout,gridbaglayout,illegalargumentexception,Java,Swing,Layout,Gridbaglayout,Illegalargumentexception,我刚刚为GridBagLayout测试了这段代码,我想知道为什么这段代码有错误,而另一段代码没有。此代码获得异常IllegalArgumentException:无法添加到布局:约束必须是字符串(或null): 但这一准则起了作用: import java.awt.*; import javax.swing.*; import java.awt.event.*; class gridbag extends JPanel { private JLabel label=new JLabel

我刚刚为GridBagLayout测试了这段代码,我想知道为什么这段代码有错误,而另一段代码没有。此代码获得异常
IllegalArgumentException:无法添加到布局:约束必须是字符串(或null)

但这一准则起了作用:

import java.awt.*;
import javax.swing.*;
import java.awt.event.*;

class gridbag extends JPanel
{
    private JLabel label=new JLabel("Test");

    public gridbag()
    {
        setLayout(new GridBagLayout());

        GridBagConstraints gbc=new GridBagConstraints();            
        Container container=this;
        addC(label, container, gbc, 0, 0, 1, 4, 0, 0);          
    }

    private void addC(Component c, Container container, GridBagConstraints gbc, int C, int R, int nC, int nR, double wX, double wY )
    {
        gbc.gridx=C;
        gbc.gridy=R;
        gbc.gridwidth=nC;
        gbc.gridheight=nR;
        gbc.weightx=wX;
        gbc.weighty=wY;

        container.add(c, gbc);
    }

    public static void main(String[]args)
    {
        gridbag g=new gridbag();
        JFrame frm=new JFrame();
        frm.setSize(500, 500);
        frm.add(g, BorderLayout.CENTER);
        frm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frm.setLocationRelativeTo(null);
        frm.setVisible(true);
    }
}

其中一个不同之处是为
JFrame
提供了一个新的
Layout
类,第二个代码直接使用
JFrame

问题就在这里,这是两个版本之间的另一个不同之处

Container container=getContentPane();
试一试

Container container=getContentPane();
Container container=this;