JMenuBar 不会开始显示 JMenuItem 被选中或显示 JMenu 弹出窗口,直到第一次点击它。单击 JMenuBar 中的某个位置后,所有这些项目都会响应鼠标悬停。

我想绕过所需的初始点击,并在鼠标悬停时自动激活它。有没有办法做到这一点?

最佳答案

方法是在 MouseListener 上添加一个 JMenu 并监听事件 mouseEntered 。在事件处理程序中,您只需要使用 doClick 单击它。例如,

jMenuFile.addMouseListener(new MouseListener(){
    public void mouseEntered(MouseEvent e) {
       jMenuFile.doClick();
    }
  ...
});

一旦以编程方式单击鼠标输入,它会自动打开弹出菜单。要激活整个 JMenuBar ,您必须在每个 JMenu 上添加一个监听器。为此,最好单独创建一个监听器对象。

我在栏上有两个菜单项,所以我做了:
MouseListener ml = new MouseListener(){
    public void mouseClicked(MouseEvent e) {}
    public void mousePressed(MouseEvent e) {}
    public void mouseReleased(MouseEvent e) {}
    public void mouseExited(MouseEvent e) {}
    public void mouseEntered(MouseEvent e) {
        ((JMenu)e.getSource()).doClick();
    }
  };
  jMenuFile.addMouseListener(ml);
  jMenuHelp.addMouseListener(ml);

如果栏上有这么多菜单项,您可以对其进行迭代:
for (Component c: jMenuBar1.getComponents()) {
    if (c instanceof JMenu){
        c.addMouseListener(ml);
    }
}

10-07 18:57