私はJavaFXを使い慣れていないので、ユーザーが自分のOSのようにアプリケーションの外からファイルをドラッグしているときにマウスの位置を検出する必要があります。ウィンドウからドラッグしてフォーカスを要求する
EventHandler<MouseEvent> mouseMoved = new EventHandler<MouseEvent>() {
@Override
public void handle(MouseEvent event) {
logger.severe(event.getScreenX() + " : " + event.getScreenY());
}
};
scrollPane.setOnDragEntered(new EventHandler<DragEvent>() {
@Override
public void handle(DragEvent event) {
scrollPane.getScene().getWindow().requestFocus();
scrollPane.requestFocus();
event.consume();
isDragging = true;
logger.severe(event.getScreenX() + " : " + event.getScreenY());
scrollPane.addEventHandler(MouseEvent.MOUSE_MOVED, mouseMoved);
}
});
scrollPane.setOnDragExited(new EventHandler<Event>() {
@Override
public void handle(Event event) {
isDragging = false;
event.consume();
scrollPane.removeEventHandler(MouseEvent.MOUSE_MOVED, mouseMoved);
}
});
scrollPane.setOnDragDropped(new EventHandler<Event>() {
@Override
public void handle(Event event) {
isDragging = false;
event.consume();
scrollPane.removeEventHandler(MouseEvent.MOUSE_MOVED, mouseMoved);
}
});
に成功し、ユーザーが何かをドラッグし、私の見解に入ったことを検出したが、ユーザが自分のアプリケーションの外をクリックするので、私のノードがフォーカスを持っていると私ない:私はこのように、dragEnteredとdragExitedのリスナーを追加しましたフォーカスはOS上にあるのでrequestFocusもできません - マウス移動を検出するためにscrollPaneノードにMouseEventHandlerを追加できません。スマートなスクロールを実装するにはこれが必要です。ユーザーがScrollPaneをドラッグすると、ノードの下端でマウスを動かすことができ、スクロールがスムーズに行われます。
誰かがこの問題を私に助けてくれますか?例えば
これはテストされていませんが、まずウィンドウのフォーカスを要求するのに役立ちます。つまり、scrollPane.requestFocus()を呼び出す前に 'scrollPane.getScene()。getWindow()。requestFocus()'を実行しますか? –
ありがとうございます。これは実際に自分のアプリケーション(私のタスクバーに表示される)にフォーカスを変更しますが、それでもMOUSE_MOVEDのイベントハンドラは機能しません。 – Robert