У меня есть узел, который я хочу реализовать для перетаскивания (этот объект является источником не целевой). Я также хочу, чтобы объект двигался вместе с курсором мыши. Мне удалось сделать это, но не в одно и то же время.Как выполнить код во время операции перетаскивания?
Похоже, что setOnDragDetected
и setOnMouseDragged
не работают вместе. Рассмотрим узел со следующими обработчиками:
import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.input.ClipboardContent;
import javafx.scene.input.Dragboard;
import javafx.scene.input.TransferMode;
import javafx.scene.shape.Rectangle;
import javafx.stage.Stage;
public class Example extends Application {
@Override
public void start(Stage primaryStage) throws Exception {
Rectangle rect = new Rectangle(20, 20);
rect.setOnMousePressed(e -> System.out.println("Pressed"));
rect.setOnMouseDragged(e -> System.out.println("Dragged"));
rect.setOnDragDetected(e -> {
System.out.println("Detected");
ClipboardContent content = new ClipboardContent();
content.putString("something");
Dragboard db = rect.startDragAndDrop(TransferMode.ANY);
db.setContent(content);
});
Group subGroup = new Group(rect);
Scene scene = new Scene(subGroup, 100, 100);
primaryStage.setScene(scene);
primaryStage.show();
}
public static void main(String[] args) {
Example.launch(args);
}
}
Теперь нажмите мышь на узел и переместите мышь. Это выход:
Pressed
Dragged
Dragged
Dragged
Dragged
Dragged
Dragged
Detected
После того, как сопротивление будет обнаружен MouseDragged
проводник останавливается.
Как достичь того, что я описал? Одна вещь, которую я заметил, может быть, это то, что я могу использовать onDragOver
для родителя, но я хочу, чтобы поведение было в узле, потому что именно там оно и должно быть.
Я вообще этого не наблюдаю; обработчик 'onMouseDragged' продолжает сообщать, когда обнаружен жест перетаскивания. Вы должны создать [MCVE] и [изменить] свой вопрос, чтобы включить его. –
@James_D извините. вот код. Я думаю, что это связано с перетаскиванием. – Mark