2010-01-29 131 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();