我的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
答案 0 :(得分:4)
您尚未初始化b1字段。您不能将null添加到容器中。
答案 1 :(得分:1)
在将子组件添加到其容器之前,需要初始化子组件。您放入b1的内容窗格不知道如何处理该按钮,因为它实际上还不存在。
答案 2 :(得分:1)
你宣称'b1'是一个JButton,但你从未实例化它。
在gbl.setConstraints(b1,gc)
之前的某个地方,您需要说b1=new JButton();