【问题标题】:Passing to listener传递给听众
【发布时间】:2012-06-02 01:39:55
【问题描述】:

是否可以将String 传递给ActionListener?我正在创建一个猜数游戏,我需要将选择的难度传递给ActionListener,因为它是从打开的第一个 GUI 传递的。当它直接传递给Game() 构造函数时,我该怎么做?

【问题讨论】:

  • 为什么有 2 个 GUI 而没有一个?无论如何,它们应该共享一个通用的 GameModel,而不是传递字符串。
  • @Nathan Kreider 你真的需要什么,也许还有其他选择,

标签: java string swing awt actionlistener


【解决方案1】:

让您的 ActionListener 访问包含猜测结果的变量。

我会这样做:

    final JTextArea textArea = new JTextArea();
    JButton button =new JButton("press");
    button.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent arg0) {
            String text = textArea.getText();
            if (text.equals("something")) {
                doSomething();
            } else {
                doSomethingElse();
            }
        }
    });

【讨论】:

    【解决方案2】:

    字符串从何而来?您可以在构造时将该组件传递给ActionListener。例如,您的字符串来自 JLabel 对象。那么

    class GuessNumberActionListener implements ActionListener {
        private JLabel difficulty;
    
        public GuessNumberActionListener(JLabel difficulty) {
            this.difficulty = difficulty;
        }
    
        // implement other methods
    }
    

    然后在你的动作监听器中,你可以访问/更新你想要的。

    【讨论】:

      【解决方案3】:

      ActionListener 是一个接口。尝试使用继承扩展接口的功能。这样就可以了

      【讨论】:

        【解决方案4】:

        当然可以。有很多方法,但其中之一是将其传递给ActionListener 的构造函数:

        public class MyClass implements ActionListener { 
        
            private int difficultyLevel;
        
            public MyClass(int difficultyLevel) {
              this.difficultyLevel = difficultyLevel;
            }
        
            public void actionPerformed(ActionEvent e) { 
                ...//code that reacts to action and does something based on difficultyLevel
            }
        
        }
        

        更新:

        看起来设计模式警察今天全力以赴。你可能想在被击中之前用 MVC 快速重写你的应用程序 :)

        http://java.sun.com/products/jfc/tsc/articles/architecture/

        【讨论】:

        • 告诉别人如何实施一个坏主意并没有多大帮助。如果用户问你如何射自己的脚,你会给出指示吗?
        • 将状态传递给动作监听器有什么问题?除非您对我所理解的 OP 正在寻找的问题进行更多阅读。
        • 如果他们只想在他们的脚上制造一个大洞,你会怎么做?
        • 听起来你在这方面比我更了解。
        • 我对这个答案中的解决方案的关注与脚上的洞无关。我不确定构建具有固定难度级别的动作侦听器是否适用于 OP 的问题。我不喜欢继承 ActionListener,但如果我这样做了,我想确保在调用 actionPerformed 方法时,难度级别始终是最新的。
        猜你喜欢
        • 2017-02-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-09-28
        • 2014-08-23
        • 2015-12-07
        • 2019-03-29
        • 1970-01-01
        相关资源
        最近更新 更多