我的 Controller 类中有非常大的事件处理方法。我将他们每个人放在一个单独的类(class)中,但现在他们不再被调用。
这是目前的实现方式:
private DragDetectedHandler dragDetectedHandler = new DragDetectedHandler(stacks, nextCards, gameTable);;
node.setOnDragDetected(dragDetectedHandler);
如果我这样调用它,它就会起作用:
node.setOnDragDetected(System.out::println);
(只是为了测试代码是否达到)
以及处理程序类:
public class DragDetectedHandler implements EventHandler<MouseEvent> {
private Stacks stacks;
private NextCards nextCards;
private Table gameTable;
public DragDetectedHandler(Stacks stacks, NextCards nextCards, Table gameTable) {
this.stacks = stacks;
this.nextCards = nextCards;
this.gameTable = gameTable;
}
@Override
public void handle(MouseEvent mouseEvent) {
System.out.println("Handle stuff here :)");
}
}
我可能忽略了一些东西,但类似的问题并没有帮助我得到答案。
所以问题是:我应该如何调用事件处理程序?或者为什么下面的代码没有调用事件处理程序?
node.setOnDragDetected(dragDetectedHandler);
最佳答案
我尝试了这段代码,发现它对我有用。
要尝试找出可能出现的问题,您可以检查正在导入的内容,并确保它是 javafx 而不是 swing 或 awt。
这是我尝试过的:
package test;
import javafx.event.EventHandler;
import javafx.scene.input.MouseEvent;
public class DragDetectedHandler implements EventHandler<MouseEvent> {
private String test;
public DragDetectedHandler(String test) {
this.test = test;
}
@Override
public void handle(MouseEvent mouseEvent) {
System.out.println("Handle stuff here :)");
}
}
和另一个类:
package test;
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.stage.Stage;
public class Test2 extends Application{
public static void main(String[] args) {
Test2.launch(args);
}
@Override
public void start(Stage stage) throws Exception {
DragDetectedHandler dragDetectedHandler = new
DragDetectedHandler("Test");
Button button = new Button();
button.setOnDragDetected(dragDetectedHandler);
Scene scene = new Scene(button);
stage.setScene(scene);
stage.show();
}
}
关于java - 通过自定义类在javafx中添加事件处理程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45132294/