以下示例生成一个弹出菜单。
弹出菜单包含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之后失去焦点(不将其发送到另一个组件),从而使弹出菜单消失?
答案 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);
}
});