Problème avec GridBagLayout en Java Swing
-
24-09-2019 - |
Question
J'ai un simple problème avec mon 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;
}
}
Je reçois l'erreur suivante:
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
La solution
Vous n'avez pas initialisé le champ b1. Vous ne pouvez pas ajouter null à un conteneur.
Autres conseils
Vous devez initialiser avant de les ajouter sous-composants à leur conteneur. Le volet de contenu que vous mettez en b1 n'a aucune idée de comment gérer le bouton parce qu'il n'existe pas encore fait.
Vous avez déclaré que 'b1' est un JButton, mais vous n'instancié.
Quelque part avant gbl.setConstraints(b1,gc)
, vous devez dire b1=new JButton();
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow