我需要拥有用户拖动内容的对象实例。我正在查看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);
}
}
});
现在我只记录目标类名称,如果它不是FlowPane。我需要拥有实际对象的实例,因为我想在其上应用悬停效果。
你能建议我做些什么吗?
答案 0 :(得分:1)
您想要使用event.getTarget()
或event.getSource()
,但您必须将检索到的对象强制转换为特定的类。然后你可以修改它。
如需参考,请查看以下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);
}
}
没什么好看的,一旦你开始尝试拖动文本,它就会变成红色。