我的控制器类中有非常大的事件处理方法。我把他们每个人放在一个单独的课堂上,但现在他们不再被召唤了。
这是它目前的实施方式:
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);
答案 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");
}
}
}