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