Problem mit GridBagLayout in Java Swing
-
24-09-2019 - |
Frage
Ich habe ein einfaches Problem mit meinem 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;
}
}
Dann bekomme ich folgende Fehlermeldung:
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
Lösung
Sie haben das b1 Feld initialisiert. Sie können nicht null auf einen Behälter hinzuzufügen.
Andere Tipps
Sie müssen Subkomponenten initialisieren, bevor sie zu ihrem Container hinzufügen. Der Inhaltsbereich sind Sie b1 Indienststellung hat keine Ahnung, wie die Schaltfläche zu handhaben, weil es tatsächlich existiert noch nicht.
Sie erklärt, dass 'b1' ist ein JButton, aber Sie instanziiert nie.
Irgendwo vor gbl.setConstraints(b1,gc)
, müssen Sie b1=new JButton();
sagen
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow