通过自定义类

时间:2017-07-16 18:58:43

标签: java events javafx event-handling

我的控制器类中有非常大的事件处理方法。我把他们每个人放在一个单独的课堂上,但现在他们不再被召唤了。

这是它目前的实施方式:

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);

2 个答案:

答案 0 :(得分:1)

我试用了这段代码,发现它适用于我。

试图找出可能出错的地方,你可以查看你输入的是什么,并确保它是javafx而不是摆动或敲击。

以下是我的尝试:

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<div id="menu">
  <ul>
    <li>item1</li>
    <li>item2</li>
    <li>item3</li>
    <li>item4</li>
    <li>item5</li>
    <li>item6</li>
    <li>item7</li>
    <li>item7</li>
  </ul>
  <div id="nav">
    <div id="prev">Prev</div>
    <div id="next">Next</div>
  </div>
</div>

和另一个班级:

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 :)");
}
}

答案 1 :(得分:1)

Node启用,以便该活动有效。

我尝试了这段代码,拖动矩形时它起作用了:

public class Main extends Application
{

    public static void main(String[] args)
    {
        launch(args);
    }

    @Override
    public void start(Stage stage) throws Exception
    {
        DragHandler dh = new DragHandler();
        StackPane pane = new StackPane();
        Rectangle rect = new Rectangle(200 , 200 , 200 ,200);
        rect.setOnDragDetected(dh);
        pane.getChildren().add(rect);
        Scene scene = new Scene(pane , 600 , 600);
        stage.setScene(scene);
        stage.show();
    }

    private class DragHandler implements EventHandler<MouseEvent>
    {
        @Override
        public void handle(MouseEvent event)
        {
            System.out.println("OK");
        }
    }
}