tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
6
ZUGRIFFE
359
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    meckiebro meckiebro ist offline Mitglied Silber
    Registriert seit
    Dec 2009
    Beiträge
    53
    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
    Meckie
    Geändert von meckiebro (15.08.11 um 13:42 Uhr)
     

  2. #2
    SE 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.
     

  3. #3
    meckiebro meckiebro ist offline Mitglied Silber
    Registriert seit
    Dec 2009
    Beiträge
    53
    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
     

  4. #4
    genodeftest genodeftest ist offline Mitglied Brillant
    Registriert seit
    Jun 2009
    Beiträge
    870
     
    Code bitte so einfügen: [java]System.out.println("Hallo");[/java] (Analog für andere Programmiersprachen)
    Code java:
    1
    
    System.out.println("Hallo");
    hilfreich zu Java: Really Big Index, Java ist auch eine Insel Band 1 und Band 2.
    ___________
    Ubuntu Bug #1: Microsoft has a majority market share
    Casecon: Projekt leiser Käse

  5. #5
    meckiebro meckiebro ist offline Mitglied Silber
    Registriert seit
    Dec 2009
    Beiträge
    53
    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
    Meckie
    Geändert von meckiebro (15.08.11 um 22:56 Uhr)
     

  6. #6
    SE 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.
     

  7. #7
    meckiebro meckiebro ist offline Mitglied Silber
    Registriert seit
    Dec 2009
    Beiträge
    53
    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

  1. MouseEntered Event bei einem JMenuItem
    Von Darth_Legomaster im Forum Swing, Java2D/3D, SWT, JFace
    Antworten: 1
    Letzter Beitrag: 13.06.11, 23:20
  2. Action für JMenuItem/JButton UND windowClosingEvent
    Von mas666 im Forum Swing, Java2D/3D, SWT, JFace
    Antworten: 3
    Letzter Beitrag: 11.02.09, 09:35
  3. JMenuItem
    Von der Prof im Forum Java
    Antworten: 3
    Letzter Beitrag: 29.10.07, 13:46
  4. JRadioButton versteckt sich in JMenuItem
    Von RealHAZZARD im Forum Java
    Antworten: 2
    Letzter Beitrag: 15.11.05, 08:18
  5. JMenuItem
    Von Serethos im Forum Java
    Antworten: 2
    Letzter Beitrag: 19.04.05, 14:13

Stichworte