获取放置目标对象的实例
Get instance of drop target object
我需要拥有用户在其上拖动内容的对象的实例。我正在查看 event.getTarget()
,但我仍然无法获取实际对象。
这是我现在拥有的:
scrollPane.setOnDragOver(new EventHandler<DragEvent>() {
private Node hoveredNode;
@Override
public void handle(DragEvent event) {
double windowHeight = scrollPane.getHeight();
if(!event.getTarget().getClass().getName().contains("FlowPane"))
logger.severe(event.getTarget().getClass().getName() + "");
double topBar = (20*windowHeight)/100;
double bottomBar = windowHeight - topBar;
event.acceptTransferModes(TransferMode.LINK);
if(event.getY() > 0 && event.getY() < topBar && scrollPane.getVvalue() > 0) {
scrollPane.setVvalue(scrollPane.getVvalue()-0.001);
}
else if(event.getY() < windowHeight && event.getY() > bottomBar && scrollPane.getVvalue() < 1){
scrollPane.setVvalue(scrollPane.getVvalue()+0.001);
}
}
});
现在我只记录目标 class 名称(如果它不是 FlowPane)。我需要实际对象的实例,因为我想对其应用悬停效果。
你能建议我做些什么吗?
您想要像您已经使用的那样使用 event.getTarget()
或 event.getSource()
,但您必须将检索到的对象转换为特定的 class。然后就可以修改了。
作为参考,请查看以下 SSCCE。
public class JavaFXTest extends Application {
@Override
public void start(Stage primaryStage) {
StackPane root = new StackPane();
Text text = new Text("Test");
text.setOnDragDetected((Event event) -> {
((Text)event.getSource()).setStyle("-fx-stroke: red;");
event.consume();
});
root.getChildren().add(text);
Scene scene = new Scene(root, 600, 250);
primaryStage.setScene(scene);
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
没什么特别的,一旦您开始尝试拖动文本,它就会变成红色。
我需要拥有用户在其上拖动内容的对象的实例。我正在查看 event.getTarget()
,但我仍然无法获取实际对象。
这是我现在拥有的:
scrollPane.setOnDragOver(new EventHandler<DragEvent>() {
private Node hoveredNode;
@Override
public void handle(DragEvent event) {
double windowHeight = scrollPane.getHeight();
if(!event.getTarget().getClass().getName().contains("FlowPane"))
logger.severe(event.getTarget().getClass().getName() + "");
double topBar = (20*windowHeight)/100;
double bottomBar = windowHeight - topBar;
event.acceptTransferModes(TransferMode.LINK);
if(event.getY() > 0 && event.getY() < topBar && scrollPane.getVvalue() > 0) {
scrollPane.setVvalue(scrollPane.getVvalue()-0.001);
}
else if(event.getY() < windowHeight && event.getY() > bottomBar && scrollPane.getVvalue() < 1){
scrollPane.setVvalue(scrollPane.getVvalue()+0.001);
}
}
});
现在我只记录目标 class 名称(如果它不是 FlowPane)。我需要实际对象的实例,因为我想对其应用悬停效果。
你能建议我做些什么吗?
您想要像您已经使用的那样使用 event.getTarget()
或 event.getSource()
,但您必须将检索到的对象转换为特定的 class。然后就可以修改了。
作为参考,请查看以下 SSCCE。
public class JavaFXTest extends Application {
@Override
public void start(Stage primaryStage) {
StackPane root = new StackPane();
Text text = new Text("Test");
text.setOnDragDetected((Event event) -> {
((Text)event.getSource()).setStyle("-fx-stroke: red;");
event.consume();
});
root.getChildren().add(text);
Scene scene = new Scene(root, 600, 250);
primaryStage.setScene(scene);
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
没什么特别的,一旦您开始尝试拖动文本,它就会变成红色。