EventHandler实现为匿名内部类

时间:2014-11-06 18:16:31

标签: java javafx javafx-8

我不想使用关键字this来引用EventHandler块中的主要类,比如说:

public class Extra {

    private SuperObject object;

    public Extra() {

        Button.setOnAction(new EventHandler<ActionEvent>() {
            @Override
            public void handle(ActionEvent ae) {

                object = new SuperObject(this);
            }
        });
    }
}

// where...

public class SuperObject {

    public SuperObject(Extra e) {

        // something
    }
}

但是在这种情况下,我已经收到警告,我没有声明SuperObject类的构造函数,其中包含ActionEvent参数。在这种情况下我该怎么办?

3 个答案:

答案 0 :(得分:4)

由于您使用的是Java 8,除了发布的其他解决方案之外,您还可以使用lambda替换内部类,其中this具有直观含义(对周围的引用)对象):

button.setOnAction(ae -> {
    object = new SuperObject(this);
});

答案 1 :(得分:3)

this是您的匿名内部EventHandler课程。

要访问外部this,请使用Extra.this

答案 2 :(得分:2)

你必须这样做

object = new SuperObject(Extra.this);