spr*_*orn 7 java swing mouse-listeners jmenubar
在首次单击JMenuBar之前,JMenuBar不会开始将JMenuItem显示为已选中或显示JMenu弹出窗口.单击JMenuBar中的某个位置后,所有这些项都会响应鼠标悬停.
我想绕过所需的初始点击,并在鼠标悬停时自动激活它.有没有办法做到这一点?
该方法是添加MouseListener上JMenu,听上的事件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)