处理JPopupMenu关闭

时间:2012-07-19 14:11:30

标签: java swing jpopupmenu jmenuitem jpopup

我想在屏幕上突出显示一些元素,当选择PopupMenu中的一个JMenuItem时(鼠标悬停)。所以我在我的JMenuItem上使用MouseListener

        @Override
        public void mouseEntered(MouseEvent e) {
            highlightOn();
        }

        @Override
        public void mouseExited(MouseEvent e) {
            highlightOff();
        }

它工作正常,但是如果我按下Esc,弹出菜单将被关闭,而不会清除highligt。我如何拦截JPopupMenu的关闭来处理这个问题?

2 个答案:

答案 0 :(得分:6)

这样的事情可以解决问题:

myPopupMenu.addPopupMenuListener(new PopupMenuListener {
  public void popupMenuCanceled(PopupMenuEvent popupMenuEvent) {
    highlightOff();
  }
  public void popupMenuWillBecomeInvisible(PopupMenuEvent popupMenuEvent) {
    highlightOff();
  }
  public void popupMenuWillBecomeVisible(PopupMenuEvent popupMenuEvent) {}
}

请记住在使侦听器可见之前或在其构造函数内部添加侦听器。

答案 1 :(得分:5)

你看看

  1. PopupMenuListener
  2. 更好的可能是

    1. JMenuItem(s)可以返回ButtonModel

    2. ButtonModel返回isRollover()isArmend()isPressed() e.i。

    3. JButtons JComponents(JButton,JCheckBox,JRadioButton和JMenuXxx)中的每一个都实现了ButtonModel

    4. 的不同方法