Hallo,
Ich möchte das Layout eines Panels neu zeichnen lassen über die Auswahl von RadioButtons. Alles ist ausprogrammiert und die Radiobuttons funktionieren perfekt, aber ich bekomme eine Exception wenn ich diese dann drücke, also das Layout änder möchte....
Hier der Code:
Und hier die Exception:
Ich möchte das Layout eines Panels neu zeichnen lassen über die Auswahl von RadioButtons. Alles ist ausprogrammiert und die Radiobuttons funktionieren perfekt, aber ich bekomme eine Exception wenn ich diese dann drücke, also das Layout änder möchte....
Hier der Code:
Java:
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import javax.swing.ButtonGroup;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
import javax.swing.border.TitledBorder;
public class LayoutWechselGUI extends JFrame {
private static final long serialVersionUID = 3145868897272762077L;
private JRadioButton layout1, layout2, layout3; //Die Variablen für die Optionsfelder um die Layouts zu wechseln
private ButtonGroup gruppe; //Die Variable für die Gruppe in der die Optionsfelder zusammengefasst sind
private JLabel label1, label2, label3; //Die Variablen für die Labels, welche von der Layout-Änderung betroffen werden
private JPanel layoutaenderung; //Variable für das Panel des veränderbaren Layouts
private JPanel MakeLabel2(){
JPanel tempPanel = new JPanel(); //Ein vorübergehendes Panel erzeugen, das am Ende übergeben wird
gruppe = new ButtonGroup(); //Die Gruppe erzeugen in der die RadioButtons zusammengefasst werden
layout1 = new JRadioButton("Erstes Layout");
layout2 = new JRadioButton("Zweites Layout"); //Die RadioButtons erstellen
layout3 = new JRadioButton("Drittes Layout");
gruppe.add(layout1);
gruppe.add(layout2); //Die RadioButtons in die Gruppe einfügen
gruppe.add(layout3);
layout1.setSelected(true); //Das erste Layout als Standart nach dem Programmstart setzen
tempPanel.add(layout1);
tempPanel.add(layout2); //Die RadioButtons in das Panel hinzufügen
tempPanel.add(layout3);
tempPanel.setLayout(new GridLayout(0,1,10,10)); //Dem Panel ein GridLayout mit einer Spalte geben
tempPanel.setBorder(new TitledBorder("Ein Layout wählen:"));//Einen Rahmen zeichnen
return tempPanel;
}
private JPanel MakeLabel3(){
JPanel tempPanel = new JPanel(); //Ein vorübergehendes Panel erzeugen, das am Ende übergeben wird
setLayout(new FlowLayout()); //Standart-Layout setzen
label1 = new JLabel("Hallo");
label2 = new JLabel("Sie"); //3 Labels erstellen
label3 = new JLabel("da");
tempPanel.add(label1);
tempPanel.add(label2);
tempPanel.add(label3);
tempPanel.setBorder(new TitledBorder("Ihr gewähltes Layout:"));//Rahmen zeichnen
return tempPanel;
}
class DerListener implements ItemListener{ //Der Listener als innere Klasse, welcher das Eventmanagement für die RadioButtons übernimmt
@Override
public void itemStateChanged(ItemEvent e) {
if(e.getSource() instanceof JRadioButton){ //Prüfen ob das Event von einem der RadioButtons ausgelöst wurde
//Weiter wird geprüft, welcher der Buttons gewählt ist und das Layout wird gesetzt
if(layout1.isSelected() == true){
layoutaenderung.setLayout(new FlowLayout());
layoutaenderung.revalidate();
}
if(layout2.isSelected() == true){
layoutaenderung.setLayout(new GridLayout(3,0));
layoutaenderung.revalidate();
}
if(layout3.isSelected() == true){
layoutaenderung.setLayout(new GridLayout(2,0));
layoutaenderung.revalidate();
}
}
}
}
public LayoutWechselGUI(String titel){ //Den Konstruktor anlegen
super(titel);
JPanel auswahlbereich, layoutaenderung; //2 Panels vereinbaren
auswahlbereich = MakeLabel2(); //Die Panels mit den Methoden erzeugen lassen
layoutaenderung = MakeLabel3();
setLayout(new GridLayout(2,0)); //Für das Hauptfenster ein Grid-Layout mit 2 Zeilen erstellen
add(auswahlbereich); //Die Panels ins Hauptfenster hinzufügen
add(layoutaenderung);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //Die Anwendung schließen lassen beim schließen des Fensters
DerListener listener = new DerListener(); //Eine Instanz des Listeners erzeugen und die RadioButtons damit verbinden
layout1.addItemListener(listener);
layout2.addItemListener(listener);
layout3.addItemListener(listener);
setSize(400, 500); //Die Fenstergröße auf 400x500 setzen
setVisible(true); //Das Fenster auch anzeigen
setResizable(false); //Größenveränderungen vom User verhindern
}
}
Und hier die Exception:
Java:
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at LayoutWechselGUI$DerListener.itemStateChanged(LayoutWechselGUI.java:92)
at javax.swing.AbstractButton.fireItemStateChanged(AbstractButton.java:2046)
at javax.swing.AbstractButton$Handler.itemStateChanged(AbstractButton.java:2348)
at javax.swing.DefaultButtonModel.fireItemStateChanged(DefaultButtonModel.java:455)
at javax.swing.JToggleButton$ToggleButtonModel.setSelected(JToggleButton.java:272)
at javax.swing.ButtonGroup.setSelected(ButtonGroup.java:164)
at javax.swing.JToggleButton$ToggleButtonModel.setSelected(JToggleButton.java:254)
at javax.swing.JToggleButton$ToggleButtonModel.setPressed(JToggleButton.java:289)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)
at java.awt.Component.processMouseEvent(Component.java:6505)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3311)
at java.awt.Component.processEvent(Component.java:6270)
at java.awt.Container.processEvent(Container.java:2229)
at java.awt.Component.dispatchEventImpl(Component.java:4861)
at java.awt.Container.dispatchEventImpl(Container.java:2287)
at java.awt.Component.dispatchEvent(Component.java:4687)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4832)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4492)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4422)
at java.awt.Container.dispatchEventImpl(Container.java:2273)
at java.awt.Window.dispatchEventImpl(Window.java:2719)
at java.awt.Component.dispatchEvent(Component.java:4687)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:735)
at java.awt.EventQueue.access$200(EventQueue.java:103)
at java.awt.EventQueue$3.run(EventQueue.java:694)
at java.awt.EventQueue$3.run(EventQueue.java:692)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87)
at java.awt.EventQueue$4.run(EventQueue.java:708)
at java.awt.EventQueue$4.run(EventQueue.java:706)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:705)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:91)