При попытке щелкнуть по элементу в подменю, естественно быстро нарисовать указатель мыши над пунктами меню под ним. Как Windows, так и Mac изначально обрабатывают это, помещая небольшую задержку перед открытием меню. Swing JMenus не справляется с этим, и меню, которое на короткое время наводит курсор мыши, будет открыто до того, как мышь достигнет намеченного пункта меню.Java Swing - добавление снисхождения при выборе элементов в подменю
Например, на изображении ниже, если бы я попытался выбрать Item 3
, но в процессе моей мыши кратко скользил по Menu 2
, то Menu 1
подменю исчезнет, прежде чем я добрался до него.
У кого-нибудь есть какие-либо советы или предложения по обойти это? Моя идея состояла в том, чтобы определить пользовательский MenuUI, который добавил таймер к обработчику мыши.
Вот несколько простых примеров кода, который иллюстрирует мою проблему:
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);
}
}
[Это сообщение] (http://bjk5.com/post/44698559168/breaking-down-amazons-mega-dropdown) связана с алгоритмом, который решает эту проблему путем изучения путь, по которому движется пользовательская мышь, когда он уходит от элемента к треугольнику, но я не уверен, насколько переносимый сценарий jQuery, связанный в нижней части этого сообщения, будет в рамках Swing. – akbiggs