Java Swing中的GridBagLayout问题

时间:2010-01-29 19:24:52

标签: java swing gridbaglayout

我的JPanel / Gridbaglayout有一个简单的问题:

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



public class gridfenster extends JFrame {

    private static final long serialVersionUID = 1L;
    private JPanel jContentPane = null;

    private JButton b1=null;
    private GridBagLayout gbl = null; // i tried it without this line!

    /**
     * @param args
     */
    public  void main() {
        // TODO Auto-generated method stub

        SwingUtilities.invokeLater(new Runnable()
                {
        public void run(){
            gridfenster thisClass = new gridfenster();
            thisClass.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE );
            thisClass.setVisible(true);
        }
    });

    }

    /**
     * @param owner
     */
    public  gridfenster() {
        super();
        initialize();
    }

    /**
     * This method initializes this
     * 
     * @return void
     */
    private void initialize() {
        this.setSize(300, 200);
        this.setContentPane(getJContentPane());
        this.setTitle("testgridbag");
    }

    /**
     * This method initializes jContentPane
     * 
     * @return javax.swing.JPanel
     */
    private JPanel getJContentPane() {
        if (jContentPane == null) {
            jContentPane = new JPanel();
            GridBagLayout gbl = new GridBagLayout();
            jContentPane.setLayout(gbl);
            GridBagConstraints gc = new GridBagConstraints();



            //konkrete Elemente:
            gc.fill =GridBagConstraints.HORIZONTAL ;
            gc.gridx =0; gc.gridy=0;
            gbl.setConstraints(b1,gc);
            jContentPane.add(b1);

        }
        return jContentPane;
    }

}

然后我收到以下错误:

IWAV0052E Invocation Target Exception creating gridfenster
java.lang.reflect.InvocationTargetException
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
    at java.lang.reflect.Constructor.newInstance(Unknown Source)
    at org.eclipse.ve.internal.java.vce.launcher.remotevm.JFCLauncher$1.run(JFCLauncher.java:59)
    at java.awt.event.InvocationEvent.dispatch(Unknown Source)
    at java.awt.EventQueue.dispatchEvent(Unknown Source)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
    at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.run(Unknown Source)
Caused by: java.lang.NullPointerException
    at java.awt.Container.addImpl(Unknown Source)
    at java.awt.Container.add(Unknown Source)
    at gridfenster.getJContentPane(gridfenster.java:71)
    at gridfenster.initialize(gridfenster.java:49)
    at gridfenster.<init>(gridfenster.java:39)
    ... 13 more

3 个答案:

答案 0 :(得分:4)

您尚未初始化b1字段。您不能将null添加到容器中。

答案 1 :(得分:1)

在将子组件添加到其容器之前,需要初始化子组件。您放入b1的内容窗格不知道如何处理该按钮,因为它实际上还不存在。

答案 2 :(得分:1)

你宣称'b1'是一个JButton,但你从未实例化它。

gbl.setConstraints(b1,gc)之前的某个地方,您需要说b1=new JButton();