Java Swing - 在选择子菜单中的项目时添加宽大处理

2024-01-09

当尝试单击子菜单中的某个项目时,很自然地会快速将鼠标滑过其下方的菜单项。 Windows 和 Mac 本身都通过在打开菜单之前放置​​一小段延迟来处理此问题。 Swing JMenus 不处理此问题,并且在鼠标到达预期的菜单项之前,鼠标短暂悬停的菜单将打开。

例如,在下图中,如果我尝试选择Item 3,但在这个过程中我的鼠标短暂地滑过Menu 2, the Menu 1在我到达之前子菜单就会消失。

有人对解决这个问题有任何提示或建议吗?我的想法是定义一个自定义菜单 UI,为其鼠标处理程序添加一个计时器。

这是一些简单的示例代码来说明我的问题:

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);
    }
}

Call setDelay(delay)在你的menu变量,其中delay参数是等待菜单显示的毫秒数,为 int。

以下代码行将延迟设置为 1 秒,因此用户必须将鼠标悬停在菜单项“Menu n”上 1 秒,然后才会显示子菜单:menu.setDelay(1000);

这是编辑后的代码片段:

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));
    }
    menu.setDelay(1000);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java Swing - 在选择子菜单中的项目时添加宽大处理 的相关文章

随机推荐