2

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

我正在尝试使用该dispose();方法,但它给了我错误“方法 dispose() 未定义新 ActionListener() 类型”

这是代码

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 个小时试图弄清楚它,但我无法让它工作。

在这一点上,我已经用尽了所有的选择,所以我来到了这里。任何帮助都将不胜感激。

4

3 回答 3

5

如果ClassName.this.dispose()您的类扩展JFrameJDialog不是简单地调用dispose(),或者frame.dispose()如果您有frame这种类型的变量,请使用。在您的情况下,这是第二种选择:frame.dispose();

这样,您告诉编译器您正在调用dispose()Window类型的 ,而不是 an 的匿名实现,反正ActionListener它没有 a 。dispose()

于 2013-01-25T16:51:08.180 回答
4

dispose()应该在JFrameor上调用JDialog,而不是在ActionListener.

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

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

于 2013-01-25T16:53:25.090 回答
2

正如我所看到的,你已经定义了

frame = new JFrame();

您的课程没有扩展JFrame。所以当你调用dispose它时会抛出错误,因为ActionListener类没有这样的方法。

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

Example: frame.dispose();
于 2013-01-25T16:54:43.653 回答