当尝试单击子菜单中的某个项目时,很自然地会在其下方的菜单项上快速绘制鼠标。Windows 和 Mac 都通过在打开菜单之前放置一个小的延迟来处理这个问题。Swing JMenus 不处理此问题,并且鼠标短暂悬停的菜单将在鼠标到达预期的菜单项之前打开。
例如,在下图中,如果我尝试选择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);
}
}