亲爱的朋友,我有一个包含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/

10-10 17:46