如何使用JMenuItem失去焦点或关闭JPopupMenu

时间:2018-08-10 16:41:08

标签: java focus jpopupmenu

以下示例生成一个弹出菜单。

弹出菜单包含2个项目。

一个是JLabel,另一个是JTextField。

单击任一项目时,将打印一个简单的语句。

单击JLabel菜单项后,弹出菜单将消失。 单击JButton菜单项后,弹出菜单仍然存在。

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenuItem;
import javax.swing.JPopupMenu;
import javax.swing.JToggleButton;



public class JPopupExample1 {
  public static void main(String[] argv) throws Exception 
  {
    final JPopupMenu menu = new JPopupMenu();
    JFrame frame = new JFrame("PopupSample Example");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    JMenuItem item = new JMenuItem("Item Label");
    item.addActionListener(new ActionListener()
    {public void actionPerformed(ActionEvent e)
        { System.out.println("Label Pressed"); }});

    menu.add(item);

    JToggleButton jTbutton = new JToggleButton("Click Me");
    jTbutton.setToolTipText("Test Buttons");
    jTbutton.addActionListener(new ActionListener()
        {public void actionPerformed(ActionEvent e)
            {System.out.println("Button Pressed");}     });

    menu.add(jTbutton);

    frame.setLayout(null);
    JLabel label = new JLabel("Right Click here for popup menu");
    label.setLocation(10, 10);
    label.setSize(250, 50);
    frame.add(label);
    label.setComponentPopupMenu(menu);
    frame.setSize(350, 250);
    frame.setVisible(true);
  }
}

是否有一种简单的方法可以在单击JButton之后失去焦点(不将其发送到另一个组件),从而使弹出菜单消失?

1 个答案:

答案 0 :(得分:1)

您可以在动作监听器中的menu.setVisible(false);之后调用System.out.println("Button Pressed");。例如:

JToggleButton jTbutton = new JToggleButton("Click Me");
jTbutton.setToolTipText("Test Buttons");
jTbutton.addActionListener(new ActionListener() {
  public void actionPerformed(ActionEvent e) {
    System.out.println("Button Pressed");
    menu.setVisible(false);
  }
});