Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/360.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通过自定义类在javafx中添加eventhandler_Java_Events_Javafx_Event Handling - Fatal编程技术网

通过自定义类在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");
        }
    }
}