我在自动隐藏JMenu
时遇到问题。我不知道它的名字,但截图应该解释一切。
当光标在JMenu
移动时,它会展开,我可以选择任何JMenuItem
,当光标移到另一个JMenu
时,前一个关闭,新的打开。但是我不知道我应该使用哪个事件来检测光标何时离开JMenuItem
而不是其他任何事件。
这是我的代码:
public class MainWindow extends JFrame implements ActionListener {
private JMenuBar menuBar=new JMenuBar();
private JMenu Menu1=new JMenu("Menu1"); //empty
private JMenu Menu2=new JMenu("Menu2");
private JMenu Menu3=new JMenu("Menu3");
private JMenu Menu4=new JMenu("Menu4"); //empty
private JMenu Menu5=new JMenu("Menu5"); //empty
private JMenuItem Menu2Item1=new JMenuItem("MenuItem1");
private JMenuItem Menu2Item2=new JMenuItem("MenuItem2");
private JMenuItem Menu2Item3=new JMenuItem("MenuItem3");
private JMenuItem Menu2Item4=new JMenuItem("MenuItem4");
private JMenuItem Menu3Item1=new JMenuItem("MenuItem1");
private JMenuItem Menu3Item2=new JMenuItem("MenuItem2");
private JMenuItem Menu3Item3=new JMenuItem("MenuItem3");
private JMenuItem Menu3Item4=new JMenuItem("MenuItem4");
private JMenuItem Menu3Item5=new JMenuItem("MenuItem5");
private JMenuItem Menu3Item6=new JMenuItem("MenuItem6");
private JMenuItem Menu3Item7=new JMenuItem("MenuItem7");
private MouseAdapter menuAutoFocusAdapter=new MouseAdapter() {
public void mouseEntered(MouseEvent menuEnter) {
((JMenu) menuEnter.getSource()).doClick();
}
public void mouseExited(MouseEvent menuExit) {
if (((JMenu) menuExit.getSource()).getItemCount()==0) {
MenuSelectionManager.defaultManager().clearSelectedPath();
}
}
public void mousePressed(MouseEvent menuClick) {
((JMenu) menuClick.getSource()).doClick();
}
};
public MainWindow() {
super("AutoHide Menu");
setDefaultCloseOperation(EXIT_ON_CLOSE);
setSize(800, 600);
setVisible(true);
setJMenuBar(menuBar);
menuBar.add(Menu1);
menuBar.add(Menu2);
menuBar.add(Menu3);
menuBar.add(Menu4);
menuBar.add(Menu5);
Menu2.add(MenuItem1);
Menu2.add(MenuItem2);
Menu2.add(MenuItem3);
Menu2.add(MenuItem4);
Menu3.add(MenuItem1);
Menu3.add(MenuItem2);
Menu3.add(MenuItem3);
Menu3.add(MenuItem4);
Menu3.add(MenuItem5);
Menu3.add(MenuItem6);
Menu3.add(MenuItem7);
Menu1.addMouseListener(menuAutoFocusAdapter);
Menu2.addMouseListener(menuAutoFocusAdapter);
Menu3.addMouseListener(menuAutoFocusAdapter);
Menu4.addMouseListener(menuAutoFocusAdapter);
Menu5.addMouseListener(menuAutoFocusAdapter);
}
}
如果JMenu
没有任何JMenuItem
一切正常,但如果JMenu
不为空,我就无法使用mouseExited(MouseEvent menuExit)
中的MouseAdapter
和此功能MenuSelectionManager.defaultManager().clearSelectedPath()
,因为它每次关闭JMenu
。
有什么想法吗?
答案 0 :(得分:0)
好吧,我想,我找到了解决方案。这是一个额外的Adapter
,可以捕获MouseMotion
特定控件。
private MouseMotionAdapter menuLostFocusAdapter=new MouseMotionAdapter() {
public void mouseMoved(MouseEvent mouseMoveOutside) {
if (weaponsTypes.getSelectionModel().isSelected()) {
MenuSelectionManager.defaultManager().clearSelectedPath();
weaponsTypes.getSelectionModel().clearSelection();
}
}
};
我对addMouseMotionListener(menuLostFocusAdapter)
下的所有控件使用了JMenu
。我知道这不是快速和美丽,但它很安静。