【问题标题】:Performing an action when an JMenuItem is clicked?单击 JMenuItem 时执行操作?
【发布时间】:2009-11-12 23:23:00
【问题描述】:

所以我制作了一个简单的程序,在框架顶部有一个基本菜单,现在我只需要将操作放在每个 JMenuItem 后面。不过,我正在努力编写代码,这是我认为可行的:

JMenu file_Menu = new JMenu("File");
JMenuItem fileExit = new JMenuItem("Exit Program"); 
file_Menu.add(fileExit);
fileExit.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent ae) {
        JFrame hello = new JFrame("POPUP");
        hello.setSize(100,75);
        hello.setDefaultCloseOperation(hello.EXIT_ON_CLOSE);
        hello.setVisible(true);
    }
});
main_Menu.add(file_Menu);

这似乎不起作用,我认为此代码会在单击菜单项时创建一个小弹出窗口。

任何人都可以发现错误,因为我似乎无法发现。

【问题讨论】:

  • 如果将 System.out.println("hello!") 添加到 actionPerformed() 方法的开头,它会打印任何内容吗?

标签: java swing actionlistener


【解决方案1】:

建议:不要单独添加ActionListener,而是使用AbstractAction

JMenuItem fileExit = new JMenuItem(new AbstractAction("Exit Program") {
    public void actionPerformed(ActionEvent ae) {
        JFrame hello = new JFrame("POPUP");
        hello.setSize(100,75);
        hello.setDefaultCloseOperation(hello.EXIT_ON_CLOSE);
        hello.setVisible(true);
    }
});

我还建议,不要在弹出菜单上设置EXIT_ON_CLOSE,而是在应用程序的主框架上设置它,并让操作简单地调用theMainFrame.dispose()

【讨论】:

    【解决方案2】:

    你得到了它的工作,但你有另一个问题。

    不要这样做:

    hello.setDefaultCloseOperation(hello.EXIT_ON_CLOSE);
    

    当您关闭弹出框时,您的整个 JVM 都会终止。请参阅 JFrame.setDefaultCloseOperation javadocs 以获得更合适的值。

    【讨论】:

    • 该死,你的权利。幸运的是,在我进一步研究开发之前提到过。谢谢。
    【解决方案3】:

    给JMenuItem一个Action实例(从AbstractAction扩展)

    【讨论】:

      【解决方案4】:

      根据您发布的代码,它看起来应该可以工作,但我们无法看到菜单项如何使用的整个上下文。

      您是否调试过您的代码(使用 System.out.println)以查看是否正在调用 ActionListener?

      如果您需要更多帮助,请发布您的 SSCCE 来证明问题。

      【讨论】:

      • 这似乎是评论,而不是答案。
      【解决方案5】:

      修复它。

      忘记添加actionPerformed方法。

      【讨论】:

      • 您可以通过在前面加上@Override 来确保正确提供超类的覆盖actionPerformed 函数。
      猜你喜欢
      • 2016-03-26
      • 1970-01-01
      • 2018-08-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多