Quando si tenta di fare clic su un elemento in un sottomenu, è naturale trascinare rapidamente il mouse sulle voci di menu sottostanti. Sia Windows che Mac gestiscono in modo nativo mettendo un piccolo ritardo prima che un menu venga aperto. Swing JMenus non gestisce questo, e il menu con il mouse si posiziona per qualche istante prima che il mouse raggiunga la voce di menu desiderata.Java Swing - Aggiungi clemenza quando si selezionano elementi nei sottomenu
Per esempio, nell'immagine qui sotto, se ho cercato di selezionare Item 3
, ma nel processo mia brevemente topo scivolò Menu 2
, il sottomenu Menu 1
scomparirebbe prima ho ottenuto ad esso.
Qualcuno ha qualche consiglio o suggerimento per aggirare questo? La mia idea era quella di definire un MenuUI personalizzato che aggiungesse un timer al gestore del mouse.
Ecco qualche semplice codice di esempio che illustra il mio problema:
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);
}
}
[Questo post] (http://bjk5.com/post/44698559168/breaking-down-amazons-mega-dropdown) è relativo a un algoritmo che risolve questo problema esaminando la percorso che il mouse dell'utente prende mentre si allontana dall'oggetto contro un triangolo, ma non sono sicuro di quanto lo script jQuery collegato in fondo a quel post sia portatile al framework Swing. – akbiggs