Frage

Jetzt habe ich ein JMenu und einige JMenuItems darin.Ich möchte, dass mein Programm eine Aktion ausführt, wenn der Status von JMenu und JMenuItem in „ausgewählt“ geändert wird.Ich verwende MouseOver von MouseLitener nicht, weil ich möchte, dass der Benutzer auch über Tastaturen im Menü navigieren kann.Nun habe ich diesen Hörer geschrieben:

class MenuItemListener implements ChangeListener {
    @Override
    public void stateChanged(ChangeEvent arg0) {
        JMenuItem item = (JMenuItem) arg0.getSource();
        if(item.isSelected())
            System.out.println(item.getText()+" pressed!");
    }
}

Wenn ich diesen Listener zu JMenu hinzufüge, funktioniert er ordnungsgemäß, aber wenn ich ihn zu JMenuItem hinzufüge, passiert nichts ...Wenn ich die if-Anweisung lösche, damit der Listener sowohl beim Auswählen als auch beim Abwählen des Menüs reagiert, funktioniert das sowohl für JMenu als auch für JMenuItem einwandfrei.Wie ich sehe, kann JMenuItem den isSelected()-Test nicht „bestehen“ ...Aber was kann ein Problem sein?:S

War es hilfreich?

Lösung

Keine Beleidigung in irgendeiner Richtung, dies ist nur eine dieser Fragen mit einer Geschichte

  • Erstanforderung: Machen Sie etwas, wenn eine Maus über Jmenuitem ist
  • Initial Jeder ist Liebling: MouseListener
  • anfänglicher abweichender Vorschlag (Kudos to @mkorbel!): Änderungspflichter auf dem Knopfmodel, Überprüfen der Überrolleigenschaft

  • raffinierte Anforderung: Dosomething, wenn Jmenuitem nur von Tastatur und Maus hergestellt wurde.

  • raffinierter Liebling: Änderungsinisten auf dem Knopfmodel, Eigenschaft nicht angegeben
  • raffinierte Abweichung: ActionListener

  • Aktuelle Anforderung: Dosomething, wenn JMENU oder JMENUITEM "ausgewählte" Eigenschaft ausgewählt wurde.

  • aktueller Liebling: Kann nicht mit einem Zuhörer fertig werden, überschreiben ...
  • Aktuelle Abweichungen: Action, Menulistener ...

    das richtige und vollständig (im Nachhinein, da die Tastatur noch nicht erwähnt wurde) Die Antwort war in der ersten Runde bereits verfügbar: ein semantischer Zuhörer, der "niedrig genug ist", um staatliche Änderungen aufzunehmen (Kandidaten sind Rollover , bewaffnet, ausgewählt, auf dem Knopfmodel-Level gedrückt), wodurch die Menuageems ihren markierten 0

    und der Gewinner ist: - Verwenden Sie einen Änderungspeicher, und prüfen Sie, ob die Quelle entweder ausgewählt oder bewaffnet ist. generasacodicetagpre.

    funktioniert sowohl für Tastatur als auch für die Maus, sowohl JMENU als auch Jmenuitem generasacodicetagpre.

Andere Tipps

Dies ist das erwartete polymorphe Verhalten.Der isSelected() Methode von JMenuItem wird geerbt von AbstractButton, während die gleiche Methode in Jmenu wird überschrieben, sodass „true zurückgegeben wird, wenn das Menü aktuell ausgewählt (hervorgehoben) ist.“

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top