2010-01-29 88 views
1

我有一个简单的问题,我的JPanel/GridBagLayout的:问题与GridBagLayout的中的Java Swing

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 

回答

4

您还没有初始化B1场。您不能将null添加到容器。

+0

啊,这是正确的。我指出的问题是一个单独的问题,甚至可能根本不是问题。 – 2010-01-29 19:43:11

+0

现在感谢它的工作 – Tyzak 2010-01-29 19:57:11

1

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

1

你声明'b1'是一个JButton,但你从来没有实例化它。

某处gbl.setConstraints(b1,gc)之前,你需要说b1=new JButton();