JavaFX MenuItem kann nicht durch Bewegen der Maus abgebrochen werden

8

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.

    
Voldemort 26.03.2015, 16:06
quelle

2 Antworten

0

Ich weiß nicht, ob das, was ich sagen werde, dumm ist. Sie sollten jedoch versuchen, ein Mausereignis anstelle eines Aktionsereignisses zu verwenden. Sag es einfach.

    
Davelis4 02.04.2015 17:30
quelle
0

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:

  • Funktioniert nur für ContextMenu , nicht für das Hauptmenü (das war mein Anwendungsfall)
  • Funktioniert nur für einstufige Menüs (es wurde nicht herausgefunden, wie man für Untermenüs erweitert werden kann)
  • Nicht sicher, ob es mit CustomMenuItem s funktioniert, oder mit MenuItem s mit einem Graphic , aber vielleicht!
  • Es basiert auf dem Standard 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.

    
Denis 20.05.2016 16:18
quelle

Tags und Links