java - 通过自定义类在javafx中添加事件处理程序

标签 java events javafx event-handling

我的 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/

相关文章:

wpf - 如何处理父控件中的子事件

javascript - 有没有一种有效的方法来获得 HTML DOM 元素属性更改的通知?

java - 添加新数据时无法刷新 TableView 单元格

java - JavaFX 元素中的 CSS 错误

java - 确定点的象限

java - 如何在迭代时从 HashMap 中删除一个键?

javascript - jquery on() 不能处理点击事件?

JavaFx 散点图自定义图例

java - 更新 GUI 面板,Java

java - 安卓。如何在按钮正上方显示弹出窗口