Wenn Sie die Maus auf eines der MenuItems halten und dann die Maus wegziehen, bleibt die Schaltfläche ausgewählt. Auch wenn Sie die Maus auf New
oder Save
ziehen, bleibt die Schaltfläche Open
ausgewählt. Wenn Sie die Maus irgendwo außerhalb von Open
freigeben, wird der Befehl weiterhin ausgeführt . In der Reihenfolge der Wörter, in dem Moment, in dem Sie die Maustaste gedrückt haben, steht unmittelbar bevor, dass Open
's onAction()
aufgerufen wird.
Dies unterscheidet sich von dem normalen Verhalten in Mac OSX und, ich denke, Windows nativen Anwendungen. Auch wenn Sie den Mausklick auf ein MenuItem gedrückt halten, wird der Button nicht ausgelöst, wenn Sie die Maus wegbewegen. Aber es passiert mit JavaFX.
Was kann ich tun, um das Problem zu beheben? JavaFX 8.
HAFTUNGSAUSSCHLUSS: Dies ist keine richtige Lösung, es ist hässlich, nicht gut getestet und hat viele Einschränkungen (siehe unten). Auch wird es wahrscheinlich mit der nächsten Java-Veröffentlichung brechen, ABER es löste das Problem in meinem hübschen Standard-Plain-Vanilla-Fall, also entschloss ich mich, es für den Fall zu teilen, dass jemand es nützlich finden könnte. Benutze es auf eigene Gefahr! :)
Ich habe auch eine winzige Hoffnung, dass jemand mit einer besseren Kenntnis der JavaFX-Skinning-API es verbessern könnte, ich würde mich freuen!
Die Einschränkungen:
ContextMenu
, nicht für das Hauptmenü (das war mein Anwendungsfall) CustomMenuItem
s funktioniert, oder mit MenuItem
s mit einem Graphic
, aber vielleicht! ContextMenuContent
als Skin für ContextMenu
. Wenn Sie Ihre eigene Haut haben, dann wird es nicht funktionieren. Hier ist die Hilfsklasse:
%Vor%}
Die Verwendung ist sehr einfach:
%Vor% P.S. Eine sauberere Lösung wäre, Ihre eigene Hautklasse zu schreiben (d. H., Um ContextMenuContent
zu ersetzen), aber ich wollte diesen Weg wegen der Wartungskosten bewusst nicht gehen.