Wie kann ich ein "Drop-Down" -Menü in einer Java Swing-Symbolleiste erstellen?

8

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%     
Steve McLeod 14.12.2009, 11:13
quelle

4 Antworten

4

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.

    
BryanD 17.12.2009, 17:05
quelle
1

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 ...

    
Reverend Gonzo 17.12.2009 17:18
quelle
0

Ich benutze Firefox nicht, also weiß ich nicht, wie die Smart Bookmarks-Schaltfläche aussieht, aber vielleicht verwende ich ein JMenu als "Schaltfläche". Sie könnten versuchen, den Rand eines JButton zu verwenden, damit er eher wie eine Schaltfläche aussieht.

    
camickr 14.12.2009 16:05
quelle
-1

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:

%Vor%

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.

    
Joonas Pulakka 14.12.2009 11:21
quelle