Wenn Sie versuchen, auf ein Element in einem Untermenü zu klicken, ist es natürlich, Ihre Maus schnell über die Menüelemente darunter zu ziehen. Sowohl Windows als auch Mac behandeln dies nativ, indem sie eine kleine Verzögerung vor dem Öffnen eines Menüs setzen. Swing JMenus geht damit nicht klar, und das Menü, über das die Maus kurz schwebt, würde geöffnet werden, bevor die Maus den gewünschten Menüpunkt erreicht.Java Swing - Bei der Auswahl von Elementen in Untermenüs nachgiebiger machen
Zum Beispiel, in dem Bild unten, wenn ich versuchte, Item 3
auszuwählen, aber in dem Prozess meine Maus rutschte kurz über Menu 2
, das Menu 1
Untermenü würde verschwinden, bevor ich dazu kam.
Hat jemand irgendwelche Tipps oder Vorschläge, um dies zu umgehen? Meine Idee war, ein benutzerdefiniertes MenuUI zu definieren, das seinem Maushandler einen Timer hinzufügte.
Hier sind einige einfache Beispiel-Code, der mein Problem veranschaulicht:
public class Thing extends JFrame {
public Thing()
{
super();
this.setSize(new Dimension(500, 500));
final JPopupMenu pMenu = new JPopupMenu();
for (int i = 0; i < 5; i++)
{
JMenu menu = new JMenu("Menu " + i);
pMenu.add(menu);
for (int j = 0; j < 10; j++)
{
menu.add(new JMenuItem("Item " + j));
}
}
this.addMouseListener(new MouseAdapter() {
@Override
public void mouseReleased(MouseEvent e) {
pMenu.show(Thing.this, e.getX(), e.getY());
}
});
}
public static void main(String[] args)
{
Thing t = new Thing();
t.setVisible(true);
}
}
[Dieser Beitrag] (http://bjk5.com/post/44698559168/breaking-down-amazons-mega-dropdown) einen Algorithmus verwendet ist, dass die durch die Prüfung dieses Problem löst, Pfad, den die Maus des Benutzers nimmt, wenn sie sich von dem Objekt wegbewegt, gegen ein Dreieck, aber ich bin mir nicht sicher, wie portierbar das jQuery-Skript, das am Ende dieses Beitrags verlinkt ist, mit dem Swing-Framework wäre. – akbiggs