如何在JMenuItem上调用dispose()?

时间:2013-01-25 16:49:34

标签: java swing dispose actionlistener jmenuitem

我正在尝试编写代码,以便当用户单击“文件”选项卡并选择“退出”时,它会退出我构建的整个窗口。

我正在尝试使用dispose();方法,但它给了我错误 “对于类型new ActionListener()”

,方法dispose()未定义

继承代码

public static void addLayouts(){

        frame = new JFrame();
        frame.setSize(600, 600);
        frame.setTitle("IPFinder");
        GroupLayout groupLayout = new GroupLayout(frame.getContentPane());
        groupLayout.setHorizontalGroup(
            groupLayout.createParallelGroup(Alignment.LEADING)
                .addGap(0, 384, Short.MAX_VALUE)
        );
        groupLayout.setVerticalGroup(
            groupLayout.createParallelGroup(Alignment.LEADING)
                .addGap(0, 362, Short.MAX_VALUE)
        );
        frame.getContentPane().setLayout(groupLayout);

        JMenuBar menuBar = new JMenuBar();
        frame.setJMenuBar(menuBar);

        JMenu mnFile = new JMenu("File");
        menuBar.add(mnFile);



        JMenu mnEdit = new JMenu("Edit");
        menuBar.add(mnEdit);

        JMenuItem mntmCopyResults = new JMenuItem("Copy Results");
        mnEdit.add(mntmCopyResults);

        JMenu mnAbout = new JMenu("About");
        menuBar.add(mnAbout);

        JMenuItem mntmAboutIpfinder = new JMenuItem("About IPFinder");
        mnAbout.add(mntmAboutIpfinder);
        frame.setVisible(true);



        JMenuItem mntmExit = new JMenuItem("Exit");
        mntmExit.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                dispose();
            }
        });
        mnFile.add(mntmExit);


    }

我花了大约2个小时在谷歌试图找到它,但我无法让它工作。

此时我已经筋疲力尽了,所以我来到了这里。 任何帮助都是相关的。

3 个答案:

答案 0 :(得分:5)

如果您的课程延长ClassName.this.dispose()JFrame,请使用JDialog而不是简单地调用dispose()frame.dispose(),如果您的frame变量为这种类型。在您的情况下,这是第二个选项:frame.dispose();

这样,您告诉编译器您正在调用dispose()子类型的Window而不是ActionListener的匿名实现,而dispose()没有{{1}} 1}}无论如何。

答案 1 :(得分:4)

dispose()应在JFrameJDialog上调用,而不是在ActionListener上调用。

  

但它给了我错误“方法dispose()未定义类型new ActionListener()”

完全。 ActionListener只有一种方法actionPerformed()http://docs.oracle.com/javase/6/docs/api/java/awt/event/ActionListener.html

答案 2 :(得分:2)

正如我所见,你已经定义了

frame = new JFrame();

您的课程不会延长JFrame。所以当你调用dispose时它会引发错误,因为ActionListener类没有这样的方法。

因此请使用您要处理的组件。

Example: frame.dispose();