Я новичок в JavaFX, и мне нужно определить положение мыши, когда пользователь перетаскивает какой-то файл из-за пределов моего приложения, например, его ОС. Я добавил перехватчик для dragEntered и dragExited, как это:Запросить фокус при перетаскивании из окон
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);
}
});
успешно детектирует, что пользователь ввел мой взгляд, таща что-то, но так как пользователь нажал вне моего приложения, мой узел не имеет фокус, и я также не может запроситьфокусировку, поскольку основное внимание уделяется ОС - поэтому я не могу добавить MouseEventHandler на свой узел scrollPane для обнаружения движения мыши. Мне нужно это, чтобы реализовать интеллектуальную прокрутку, поэтому, когда пользователь перетаскивает мою ScrollPane, он может перемещать мышь в нижней части узла, и она будет плавно прокручиваться вниз.
Может кто-нибудь помочь мне в этом вопросе?
Не проверен, но помогает ли он сначала запросить фокус на окне, т. Е. Выполнить 'scrollPane.getScene(). GetWindow(). RequestFocus()' перед вызовом 'scrollPane.requestFocus()'? –
Спасибо, что ответили. Это действительно меняет фокус на моем приложении (я вижу на панели задач), но, тем не менее, обработчик событий для MOUSE_MOVED не работает. – Robert