在悬停时激活JMenuBar

spr*_*orn 7 java swing mouse-listeners jmenubar

在首次单击JMenuBar之前,JMenuBar不会开始将JMenuItem显示为已选中或显示JMenu弹出窗口.单击JMenuBar中的某个位置后,所有这些项都会响应鼠标悬停.

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

Rom*_*n C 9

该方法是添加MouseListenerJMenu,听上的事件mouseEntered.在事件处理程序中,您只需要使用它来单击它doClick.例如,

jMenuFile.addMouseListener(new MouseListener(){
    public void mouseEntered(MouseEvent e) {
       jMenuFile.doClick();
    }
  ...
});
Run Code Online (Sandbox Code Playgroud)

一旦以编程方式单击鼠标,它将自动打开弹出菜单.要激活整个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);
Run Code Online (Sandbox Code Playgroud)

如果栏上有这么多菜单项,你可以迭代它:

for (Component c: jMenuBar1.getComponents()) {
    if (c instanceof JMenu){
        c.addMouseListener(ml);
    }
}
Run Code Online (Sandbox Code Playgroud)