2017-07-16 15 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であれば確認してください。ここで

は、私が試したものです:

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

関連する問題