【问题标题】:Java - Two Codes Comparison with GridBagLayout - IllegalArgumentExceptionJava - 与 GridBagLayout 的两个代码比较 - IllegalArgumentException
【发布时间】:2014-04-06 18:48:39
【问题描述】:

我刚刚为 GridBagLayout 测试了这段代码,我想知道为什么这段代码有错误,但其他代码没有。此代码出现异常IllegalArgumentException: cannot add to layout: constraint must be a string (or null):

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

public class Layout extends JFrame
{
    gridbag g=new gridbag();

    public Layout()
    {
        add(g, BorderLayout.CENTER);
    }

    public static void main(String[]args)
    {
        Layout lay=new Layout();
        lay.setSize(500, 500);
        lay.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        lay.setLocationRelativeTo(null);
        lay.setVisible(true);
    }

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

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

            GridBagConstraints gbc=new GridBagConstraints();            
            Container container=getContentPane();           
            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);
        }
    }
}

但是这段代码有效:

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

【问题讨论】:

    标签: java swing layout gridbaglayout illegalargumentexception


    【解决方案1】:

    问题就在这里,这是您的两个版本之间的另一个区别。

    Container container=getContentPane();
    

    试试

    Container container=this;      
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-05-06
      • 2021-07-08
      • 1970-01-01
      • 2011-09-18
      • 1970-01-01
      • 2013-10-19
      • 1970-01-01
      相关资源
      最近更新 更多