2017-07-16 444 views
1

我的控制器类中有很大的事件处理方法。我把他们每个人放在一个单独的班级,但现在他们不再被调用。通过自定义类在javafx中添加事件处理程序

这是它是如何目前实施:

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

能否请您编辑您的问题,包括......好一个问题吗? –

+0

@JoeC谢谢,我忘了实际问这个问题 – Vinagy

回答

1

我试过这段代码,发现它适合我。

要找出可能出错的地方,你可以检查你正在导入的东西,并确保它是否为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(); 
} 

} 
+0

感谢您的回答,显然我在构造函数被调用事件处理函数之前调用它。 – Vinagy

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

感谢您的回答,在构造函数调用事件处理函数之前,我明显地调用了它。 – Vinagy

相关问题