Ich habe auf meiner Swing JToolBar ein Dropdown-Menü erstellt. Aber es schafft sich nicht so, wie ich es möchte. Ich ziele darauf ab, dass es wie die "Smart Bookmarks" -Schaltfläche von Firefox funktioniert.
Er verschwindet, wenn der Benutzer einen Menüpunkt auswählt: RICHTIG!
Er verschwindet, wenn der Benutzer ESC drückt: CORRECT!
Er verschwindet, wenn der Benutzer irgendwo außerhalb des Menüs in den Hauptrahmen klickt: CORRECT!
Aber es verschwindet nicht, wenn der Benutzer ein zweites Mal auf die Schaltfläche klickt, die das Dropdown-Menü anzeigt: FALSCH ...: - (
Meine Frage ist, wie kann ich dieses Verhalten hinzufügen, dass es verschwindet, wenn Sie auf die Schaltfläche klicken, die das Menü ein zweites Mal zeigt.
Hier ist mein aktueller Code von Java 6 auf dem Mac:
%Vor%Nun, hier ist eine mögliche Lösung, die nicht ohne Nachteile ist. Nur Sie können entscheiden, ob dies für Ihre Anwendung akzeptabel ist. Das Problem besteht darin, dass das Popup-Schließen vor dem Auslösen anderer Mausverarbeitungsereignisse auftritt. Wenn Sie erneut auf die Schaltfläche Mehr ... klicken, wird das Popup ausgeblendet, und der Status der Schaltflächen wird aufgehoben, BEVOR die Schaltfläche auch gedrückt wird.
Die einfache Problemumgehung besteht darin, den folgenden Aufruf innerhalb Ihres Hauptprogramms hinzuzufügen:
%Vor%Dies führt dazu, dass immer dann, wenn ein Popup-Menü aufgrund eines durch die Maus gedrückten Ereignisses geschlossen wird, dieses Mausereignis zum Zeitpunkt des Schließens des Menüs verbraucht wird und nicht an andere Komponenten unter der Maus weitergegeben wird . Wenn Sie mit Einschränkungen leben können, ist dies eine einfache Lösung.
Wenn Sie aus dem Menü klicken, wird das Popup-Menü ausgeblendet. Sie deaktivieren die Schaltfläche, aber das nächste unmittelbare Ereignis ist das Klicken auf die Schaltfläche. Nun ist die Auswahl aufgehoben, sodass das Menü erneut angezeigt wird.
>Ich habe noch nicht die genaue Lösung, aber gib mir ein bisschen ...
Nun, der Listener auf der Schaltfläche reagiert nur, wenn er gedrückt wird, weil Sie nur auf ItemEvent.SELECTED
-Ereignisse warten. Wie wäre es, eine weitere if-Klausel hinzuzufügen, um hier auf ItemEvent.DESELECTED
-Ereignisse zu warten:
Sie könnten entweder einen Verweis auf die menu
irgendwo speichern, oder Sie könnten das Menü selbst dazu bringen, der Schaltfläche einen weiteren Listener hinzuzufügen. Die letztere Lösung könnte einfacher sein, da Sie anscheinend bereits einen Button-Verweis auf das Menü senden.
Tags und Links java swing jtoolbar drop-down-menu menu