【问题标题】:Pass Object as a Parameter to ActionListener [duplicate]将对象作为参数传递给 ActionListener [重复]
【发布时间】:2016-06-26 20:16:49
【问题描述】:

如何传递附加参数?

这里有一些示例代码可以尝试清楚地说明我想要做什么:

public class A {

    public static void create(String txt, ActionListener evt){
        MenuItem item = new MenuItem(txt);
        SomeClass sample_class = new SomeClass();

        // Would like to do this...
        // item.addActionListener(evt, sample_class);

        item.addActionListener(evt);
    }

}

public class B {

    public static void init(){
        A.create("Test", evt -> {
            System.out.println("hi");
        });
    }

}

我想做的是传递“sample_class”,以便动作侦听器可以使用它。

所以最终结果会是这样,所以我可以在监听器中使用我的类...

A.create("Test", (evt, something) -> {
    something.do_something();
});

已经阅读了很多类似的问题,但我无法绕过它。

【问题讨论】:

  • 您不需要添加额外的参数,只需创建一个实现 ActionListener 的类并在其中设置您喜欢的任何成员变量。
  • 啊,好的。说得通。我想我现在不能使用 Lambda,可以吗?
  • “如果你唯一的工具是一把锤子,我想这很诱人,把所有东西都当作钉子一样对待”——亚伯拉罕·马斯洛
  • 如果出于某种原因需要在代码中包含 lambda,请在问题中包含该要求
  • 没有理由,只是问问。仍在学习,所以想确定我是否可以或不能将它们与您的上述解决方案一起使用。我已经实现了您的解决方案并设置了成员变量,这似乎工作正常。谢谢。编辑:不确定如何在上述评论中接受您的答案,但这就是我使用的,并且正在工作。

标签: java actionlistener


【解决方案1】:

您可以在 SomeClass 中实现 ActionListener 并将您的事件封装在其中。

public class A {
    public static void create(String txt, ActionListener evt){
        MenuItem item = new MenuItem(txt);
        SomeClass sample_class = new SomeClass(evt);

        item.addActionListener(sample_class);
    }    
}

public class SomeClass implements ActionListener {
    ActionListener evt;

    public SomeClass(ActionListener evt) {
        this.evt = evt;
    }

    @Override
    public void actionPerformed(ActionEvent ae) {
        this.evt.actionPerformed(ae);
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-04-13
    • 2018-08-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多