Podczas próby kliknięcia elementu w podmenu, naturalnym jest szybkie przesuwanie myszy po elementach menu znajdujących się pod nim. Zarówno system Windows, jak i Mac radzą sobie z tym bez problemu, wprowadzając niewielkie opóźnienie przed otwarciem menu. Huśtawka JMenus nie radzi sobie z tym, a menu, na które na chwilę zostanie zawieszona mysz, zostanie otwarte, zanim mysz osiągnie zamierzony element menu.Java Swing - dodawaj oblężenie przy wybieraniu pozycji w podmenu
Na przykład na poniższym obrazku, jeśli próbowałem wybrać Item 3
, ale w trakcie mojej myszy krótko przesuwane na Menu 2
, podmenu Menu 1
zniknie, zanim do niego dotarłem.
Czy ktoś ma jakieś wskazówki lub sugestie dotyczące obejścia tego? Mój pomysł polegał na zdefiniowaniu niestandardowego MenuUI, które dodało zegar do myszy.
Oto prosty przykład kodu, który ilustruje mój problem:
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);
}
}
[To stanowisko] (http://bjk5.com/post/44698559168/breaking-down-amazons-mega-dropdown) jest związane z algorytmem, który rozwiązuje ten problem poprzez badanie ścieżka, którą odbiera mysz użytkownika, gdy odsuwa się od elementu względem trójkąta, ale nie jestem pewna, jak przenośny skrypt jQuery połączony na dole tego posta byłby ze strukturą Swing. – akbiggs