亲爱的朋友,我有一个包含Menu
的主应用程序,并且在每个Menu
中都有一个JMenuItem
。我希望当我单击JMenuItem
之一时,我应该能够打开将执行特定任务的new JFrame
。该JFrame
应该在实现ActionListener
的不同类中,而不是在包含Main Method的同一类中,我在互联网上看到的许多示例在http://stackoverflow.com中都没有在两个不同的类中给出解决方案。当我在相同的类中尝试相同的方法时,或者作为实现ActionListener
的内部类尝试相同的方法时,它都可以工作,但不像我说的2个不同的类。我之所以需要它,是因为在JMenuItems
中有很多Menu
,每个JMenuItem
处理很多过程。如果我要将所有内容都放在一个文件中,那么它将不再是面向对象编程,它将是一个非常长的文件。一个例子如下所示。但是下面的例子对我没有用。有人可以指出我在做什么错。预先感谢。
实现main方法的Main类。
public class SwendaEye{
public static void main(String[]args){
FrameandComp frame = new FrameandComp();
JFrame win;
win = frame.mainFrame();
JMenuBar bar;
bar = new JMenuBar();
win.setJMenuBar(bar);
JMenu swenda = new JMenu("SWENDAEYE");// adding Swenda menu to the bar.
bar.add(swenda);
JMenuItem open = new JMenuItem("Open");
swenda.add(open);
JMenuItem exit = new JMenuItem("Exit");
swenda.add(exit);
JMenu tools = new JMenu("Tools");// adding Tools menu to the bar.
bar.add(tools);
JMenuItem convertIP = new JMenuItem("Convert IP Address");
tools.add(convertIP);
JMenuItem convertDomain = new JMenuItem("Convert Domain Name");
tools.add(convertDomain);
convertDomain.addActionListener(new Domain());
win.setVisible(true);
}
}
这是与上面的类分开的动作侦听器类
public class Domain implements ActionListener{
public void actionPerformed(ActionEvent e)
{
if("Convert Domain Name".equals(e.getActionCommand())){
JFrame awindow = new JFrame();
awindow.setSize(200,400);
awindow.getContentPane().setBackground(Color.DARK_GRAY);
awindow.setTitle("Convert");
awindow.setDefaultCloseOperation(1);
}
}
}
在此示例中,我仅演示转换域名
JMenuItem
。在回答之前,请不要告诉我
JOptionPane
,因为我基本上需要在此窗口中执行很多操作,例如表格,图像等等。再次感谢。 最佳答案
您需要将aWindow
设置为可见。
关于java - 单击JMenuItem时如何打开新的JFrame窗口,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15556893/