JCheckBoxMenuItem und JCheckBox synchronisieren

Status
Nicht offen für weitere Antworten.

Joergel

Mitglied
Moin Forum!

Ich habe das Problem, dass ich in einem kleinen Programm ein JCheckBoxMenuItem und eine JCheckBox synchron aktivieren (bzw. deaktivieren) möchte, also: die Checkbox des JCheckBoxMenuItem soll auch gechecked werden wenn ich auf die JCheckBox klicke und umgekehrt.
Checked bzw. unchecked aktiviert bzw. deaktviert anschließend eine Methode über die Variable machHTML. Ich finde in meinen Büchern und im Netz einfach nichts Passendes. Ohne wechselseitige Aktivierung funzt alles prima, mit erhalte ich zur Laufzeit 'ne NullPointerException.
Weiß jemand wie's geht oder ein nicht zu aufgeblasenes Tut?

Code:
public class T2EPanel {
...
private JCheckBoxMenuItem miHTML;
private JCheckBox htmlCheck;
private boolean machHTML;
...

// innere Klasse

	class htmlCheckListener implements ItemListener {

		public void itemStateChanged(ItemEvent event) {
				if (event.getStateChange() == ItemEvent.SELECTED) {
					htmlCheck.setSelected(true);
					miHTML.setSelected(true);
                                        machHTML = true;
				} else if (event.getStateChange() == ItemEvent.DESELECTED) {
					htmlCheck.setSelected(false);
					miHTML.setSelected(false);
                                        machHTML = false;
				}
		}
	};

Danke und Gruß

Joergel
 
Hier die ersten Zeilen:

java.lang.NullPointerException
at T2EPanel$1.itemStateChanged(T2EPanel.java:501)
at javax.swing.AbstractButton.fireItemStateChanged(AbstractButton.java:1814)
at javax.swing.AbstractButton$ForwardItemEvents.itemStateChanged(AbstractButton.java:1850)
at javax.swing.DefaultButtonModel.fireItemStateChanged(DefaultButtonModel.java:477)
at javax.swing.JToggleButton$ToggleButtonModel.setSelected(JToggleButton.java:237)
at javax.swing.JToggleButton$ToggleButtonModel.setPressed(JToggleButton.java:254)

bezieht sich eben auf die gepostete Methode.

Gruß Joergel
 
naja, nullpointer exception heißt das, das zu dem zeitpunkt als du setselected machst, der button noch null ist!

bist du sicher das er schon mit new erzeugt worden ist und das er auf der gui schon sichtbar/klickbar ist?
 
aber ja, einzeln funzen ja beide einwandfrei, nur das Zusammenspiel klappt nicht.
 
poste mal die gesamte exception, da eigentlich nirgends die zeile von deinem file steht!

die fehlermeldungen verlinken nur auf die java klassen!

und zeig die zeile an in der das passiert!
 
So, hab's nach all meinem Gefummel nochmal in den ursprünglichen Zustand versetzt. Die Gesamt-Exception:

java.lang.NullPointerException
at T2EPanel$3.itemStateChanged(T2EPanel.java:542)
at javax.swing.AbstractButton.fireItemStateChanged(AbstractButton.java:1814)
at javax.swing.AbstractButton$ForwardItemEvents.itemStateChanged(AbstractButton.java:1850)
at javax.swing.DefaultButtonModel.fireItemStateChanged(DefaultButtonModel.java:477)
at javax.swing.JToggleButton$ToggleButtonModel.setSelected(JToggleButton.java:237)
at javax.swing.AbstractButton.setSelected(AbstractButton.java:261)
at javax.swing.JCheckBoxMenuItem.setState(JCheckBoxMenuItem.java:177)
at T2EPanel.setMenuCheckbox(T2EPanel.java:467)
at T2EPanel$1.itemStateChanged(T2EPanel.java:499)
at javax.swing.AbstractButton.fireItemStateChanged(AbstractButton.java:1814)
at javax.swing.AbstractButton$ForwardItemEvents.itemStateChanged(AbstractButton.java:1850)
at javax.swing.DefaultButtonModel.fireItemStateChanged(DefaultButtonModel.java:477)
at javax.swing.JToggleButton$ToggleButtonModel.setSelected(JToggleButton.java:237)
at javax.swing.JToggleButton$ToggleButtonModel.setPressed(JToggleButton.java:254)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:245)
at java.awt.Component.processMouseEvent(Component.java:5100)
at java.awt.Component.processEvent(Component.java:4897)
at java.awt.Container.processEvent(Container.java:1569)
at java.awt.Component.dispatchEventImpl(Component.java:3615)
at java.awt.Container.dispatchEventImpl(Container.java:1627)
at java.awt.Component.dispatchEvent(Component.java:3477)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:3483)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3198)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3128)
at java.awt.Container.dispatchEventImpl(Container.java:1613)
at java.awt.Window.dispatchEventImpl(Window.java:1606)
at java.awt.Component.dispatchEvent(Component.java:3477)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:456)
at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.java:201)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:151)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:145)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:137)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:100)

Sie tritt auf, wenn ich die JCheckBox aktiviere. Die erste Zeile verweist hierbei auf die Zeile

htmlCheck.setSelected(true);

des ItemListeners der MENU-Checkbox, der versucht die soeben aktivierte Checkbox nochmals zu aktivieren. Das Ganze ist wohl ein Konflikt der Event-Handler, der dadurch entsteht, dass durch das Aktivieren einer der beiden Checkboxen eine Art Kettenreaktion ausgelöst wird, in der die ItemListener versuchen Elemente zu aktivieren, die bereits aktiviert sind.
Möglicherweise ließe sich das durch eine AbstractAction lösen, aber WIE?
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben