ERLEDIGT
NEIN
NEIN
ANTWORTEN
6
6
ZUGRIFFE
359
359
EMPFEHLEN
-
Hallo zusammen,
Ich bastle gerade an meinem JMenu.
Ich habe jetzt ein Problem beim Undo/Redo. Und zwar möchte ich das Undo oder Redo deaktiviert ist wenn diese Aktion nicht möglich ist.
Ich prüfe das indem ich von meinen CommandStack einfach einer der zwei Methoden aufrufe. canUndo() oder canRedo().
Das funktioniert wie folgt ganz gut
Code java:1 2 3 4 5 6 7 8 9 10 11 12 13
edit.addMenuListener(new MenuListener(){ @Override public void menuSelected(MenuEvent e) { updateEditMenu(); } @Override public void menuCanceled(MenuEvent arg0) {} @Override public void menuDeselected(MenuEvent arg0) {} });
Die Methode updateEditMenu() prüft dann wie oben beschrieben, ob undo/redo möglich und enabled oder disabled dann das entsprechende JMenuItem.
Soweit so gut.
Aber jetzt möchte ich auch noch shortcuts an den Items anbringen. das geht auch erst ganz gut. Das Problem ist nur wenn ich den shortcut drücke aber das Item nach der letzen Aktion disabled war, reagiert der listener nicht.
War das verständlich? Ansonsten kann ich nochmal weiter ausholen.
Wie handhabt ihr das immer?
Liebe Grüße
MeckieGeändert von meckiebro (15.08.11 um 13:42 Uhr)
-
15.08.11 12:12 #2SE Tutorials.de Gastzugang
Das Problem ist das dein MenuListener eben nur auf interaktion mit dem Menu reagiert, also vorzugsweise mit der Maus oder auch Tastatur z.B. über ALT das Menu aktivieren und dann mit Pfeiltasten navigieren so wie mit ENTER auslösen.
Dabei wird am Ende immer ein ActionEvent ausgelöst was schlussendlich den Aufruf der Methode durchführt.
Der MenuListener sitz aber nicht direkt an dem ActionEvent sondern lediglich am MenuEvent was eintritt wenn das Menu aktiviert wird.
Verwendest du jetzt Hotkeys so wird über ein KeyEvent das ActionEvent dierekt angestoßen ohne den MenuListener zu kontaktieren wesshalb dieser nichts davon mitbekommt.
Du musst also eine zentrale Stelle haben an der geprüft wird die Aktion zulässig ist und dann MenuItem soweit überschreiben das diese ausgewertet wird. Auch muss auf die selbe Methode innerhalb der Methoden zugegriffen werden um bei einem Hotkey zu prüfen ob die Aktion auch zulässig ist.
-
Das es darin liegt war mir bewusst. Dachte es gibt da eine elegante Lösung für. Da müsste es einen anderen Listener für geben der vor der Aktion,sei es Maus oder Tastatur, reagiert.
Ich gucke mal in die Klassen rein was die da so machen.
Danke aber schonmal für die schnelle Antwort
-
15.08.11 17:06 #4
- Registriert seit
- Jun 2009
- Beiträge
- 870
Schau dir doch mal http://openbook.galileocomputing.de/...sel_19_008.htm und http://openbook.galileocomputing.de/...sel_19_015.htm an.
Code bitte so einfügen: [java]System.out.println("Hallo");[/java] (Analog für andere Programmiersprachen)
hilfreich zu Java: Really Big Index, Java ist auch eine Insel Band 1 und Band 2.Code java:1
System.out.println("Hallo");
___________
Ubuntu Bug #1: Microsoft has a majority market share
Casecon: Projekt leiser Käse
-
Hmm entwender habe ich das noch nicht richtig verstanden aber mit der Klasse Action/AbstractAction kann ich mir das alles zwar basteln um keine Redundanz bei JMenu und JToolbar zu haben. Das gleiche Problem tritt aber auch hier auf. Action reagiert auch nicht bei dem shortcut wenn das Object disabled ist.
Es wird zwar im Text irgendwas von disabled gesprochen aber wie steht da natürlich nicht. Oder ich habe es übersehen
Ich habe es jetzt bisher wie folgt gemacht: Da mein CommandStack Observable ist habe ich jetzt meiner JMenuBarView zu einen Observer gemacht und update die menuitems nach einem notify vom CommandStack. Gefällt mir immer noch nicht. Besser wäre nur das anpassen der menuitems wenn der Benutzer auch wirklich eine Aktion ausführen will.
Meiner Meinung nach ist das ein Fehler, aber vielleicht habe ich auch noch nicht die passende Lösung gefunden.
Grüße
MeckieGeändert von meckiebro (15.08.11 um 22:56 Uhr)
-
15.08.11 23:28 #6SE Tutorials.de Gastzugang
Das ist kein Fehler in Java oder irgendwelchen Klassen !
Du verlangst da nur etwas was du halt selbst programmieren musst weil es das so in Java selbst nicht existiert.
-
Ja gut Fehler war vielleicht ein zu hartes Wort.
Ich hab nochmal in die Klassen geschaut. Glaube ich habe die Stelle dir mir das Problem verursacht
Code java:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
protected boolean processKeyBinding(KeyStroke ks, KeyEvent e, int condition, boolean pressed) { InputMap map = getInputMap(condition, false); ActionMap am = getActionMap(false); if(map != null && am != null && isEnabled()) { Object binding = map.get(ks); Action action = (binding == null) ? null : am.get(binding); if (action != null) { return SwingUtilities.notifyAction(action, ks, e, this, e.getModifiers()); } } return false; }
das ist auch JComponent. Ich weiß noch nicht ob das mit dem überlagen klappen wird.
edit: Hmm ist nicht das richtige.....
edit2: Ich lass das jetzt mit dem Observer... gefällt mir nicht aber das hält mich zu lange auf.Geändert von meckiebro (15.08.11 um 23:57 Uhr)
Ähnliche Themen
-
MouseEntered Event bei einem JMenuItem
Von Darth_Legomaster im Forum Swing, Java2D/3D, SWT, JFaceAntworten: 1Letzter Beitrag: 13.06.11, 23:20 -
Action für JMenuItem/JButton UND windowClosingEvent
Von mas666 im Forum Swing, Java2D/3D, SWT, JFaceAntworten: 3Letzter Beitrag: 11.02.09, 09:35 -
JMenuItem
Von der Prof im Forum JavaAntworten: 3Letzter Beitrag: 29.10.07, 13:46 -
JRadioButton versteckt sich in JMenuItem
Von RealHAZZARD im Forum JavaAntworten: 2Letzter Beitrag: 15.11.05, 08:18 -
JMenuItem
Von Serethos im Forum JavaAntworten: 2Letzter Beitrag: 19.04.05, 14:13





Zitieren
Login





