Problem with GridBagLayout in Java Swing
I have a simple problem with my 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 init开发者_Python百科ializes 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;
}
}
Then I get the following error:
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
You haven't initialized the b1 field. You cannot add null to a container.
You need to initialize subcomponents before adding them to their container. The content pane you're putting b1 into has no idea how to handle the button because it doesn't actually exist yet.
You declared that 'b1' is a JButton, but you never instantiated it.
Somewhere before gbl.setConstraints(b1,gc)
, you need to say b1=new JButton();
精彩评论