通过自定义类在javafx中添加eventhandler
我的控制器类中有非常大的事件处理方法。我把他们每个人都安排在一个单独的班里,但现在他们不再被叫来了 这就是它目前的实施方式:通过自定义类在javafx中添加eventhandler,java,events,javafx,event-handling,Java,Events,Javafx,Event Handling,我的控制器类中有非常大的事件处理方法。我把他们每个人都安排在一个单独的班里,但现在他们不再被叫来了 这就是它目前的实施方式: private DragDetectedHandler dragDetectedHandler = new DragDetectedHandler(stacks, nextCards, gameTable);; node.setOnDragDetected(dragDetectedHandler); 如果我称之为,它是有效的: node.setOnDragDetecte
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 :)");
}
}
我试过这个代码,发现它适合我 为了找出可能的错误,您可以检查您正在导入的内容,并确保它是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 :)");
}
}
节点
应启用,以便事件正常工作
我尝试了以下代码,当我拖动矩形时它起作用:
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");
}
}
}
public类主扩展应用程序
{
公共静态void main(字符串[]args)
{
发射(args);
}
@凌驾
public void start(Stage)引发异常
{
DragHandler dh=新的DragHandler();
StackPane=新的StackPane();
矩形rect=新矩形(200200200200200);
检测到的直射波(dh);
pane.getChildren().add(rect);
场景=新场景(窗格,600600);
舞台场景;
stage.show();
}
私有类DragHandler实现EventHandler
{
@凌驾
公共无效句柄(MouseeEvent事件)
{
System.out.println(“OK”);
}
}
}
您能否编辑您的问题以包括。。。好。。。一个问题?@JoeC谢谢,我忘了问这个问题谢谢你的回答,很明显我是在调用构造函数调用事件处理程序之前调用它的。谢谢你的回答,很明显我是在调用构造函数调用事件处理程序之前调用它的。
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();
}
}
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");
}
}
}