从JMenuItem java打开一个弹出窗口

从JMenuItem java打开一个弹出窗口,java,swing,jframe,jmenuitem,Java,Swing,Jframe,Jmenuitem,我有一个JMenu和一个JMenuItem,当我点击它时,我需要打开一个JFrame或窗口,换句话说,一个组件内部有JButton,JTextField 我该怎么做 您可以按照创建初始JFrame的相同方式创建JFrame,然后调用 setVisible(true); 在JMenuItem的ActionListener中,使其在单击菜单时可见 如果您希望它是模态的(除非新窗口关闭,否则无法访问原始帧),可以使用JDialog,在构造函数中将modal设置为true,或者调用setModal(

我有一个
JMenu
和一个
JMenuItem
,当我点击它时,我需要打开一个
JFrame
或窗口,换句话说,一个组件内部有
JButton
JTextField


我该怎么做

您可以按照创建初始
JFrame
的相同方式创建
JFrame
,然后调用

setVisible(true);
JMenuItem
ActionListener
中,使其在单击菜单时可见



如果您希望它是模态的(除非新窗口关闭,否则无法访问原始帧),可以使用
JDialog
,在构造函数中将
modal
设置为true,或者调用
setModal(true)

I write-in-answer以获得良好的代码视图:


如果使用JFrame,则会出现以下错误: “java.lang.IllegalArgumentException:向容器添加窗口”

这是我在actionPerformed方法中的代码:

PopupFactory factory = PopupFactory.getSharedInstance();
JFrame frame = new JFrame();
frame.setLayout(null);
frame.setBounds(428, 99, 185, 155);

final JButton button = new JButton();
button.setText("Button");
button.setBounds(10, 93, 111, 25);
frame.getContentPane().add(button);

final Popup popup = factory.getPopup(null, frame, 200, 200);
popup.show();
您混淆了“弹出窗口”和“窗口”

右键单击某个对象时,通常会显示弹出窗口。弹出窗口将显示可对该对象执行的操作列表。例如,文本字段可能有“剪切”、“复制”和“粘贴”。有关详细信息,请阅读Swing教程中关于“”的部分

窗口用于在JFrame或JDialog中显示其他Swing组件

鉴于您正在从菜单项调用此操作,我认为您可能希望创建并显示一个模态JDialog,而不是JFrame或popup


另外,在阅读教程时,请阅读“使用布局管理器”一节。使用空布局不是创建对话框的最佳方式。

如果使用JFrame,我会出现以下错误:“java.lang.IllegalArgumentException:将窗口添加到容器”。这是我在actionPerformed方法中的代码:PopupFactory=PopupFactory.getSharedInstance();JFrame=新JFrame();frame.setLayout(空);帧立根(428、99、185、155);最终JButton按钮=新JButton();按钮.setText(“按钮”);按钮.立根(10,93,111,25);frame.getContentPane().add(按钮);最终弹出窗口=factory.getPopup(空,帧,200200);popup.show()@enfix:您也可以使用
PopupFactory
,但在这种情况下,不要创建
JFrame
,而是创建
JPanel
,并在那里添加组件。