尝试点击子菜单中的项目时,很自然地可以在您的鼠标下面的菜单项中快速绘制鼠标。 Windows和Mac本身通过在菜单打开之前放置一个小延迟来处理这个问题。 Swing JMenus不处理这个问题,并且在鼠标到达想要的菜单项之前,鼠标暂时盘旋的菜单将被打开。例如,在下图中,如果我尝试选择Item 3
,但在此过程中,我的鼠标短暂滑过Menu 2
,则Menu 1
子菜单会在我到达之前消失。Java Swing - 在子菜单中选择项目时添加宽大
有没有人有任何提示或建议来解决这个问题?我的想法是定义一个自定义的MenuUI,为其鼠标处理程序添加一个计时器。
下面是一些简单的示例代码,说明我的问题:你的menu
变量,其中delay
参数是毫秒等待菜单显示量
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