获取放置目标对象的实例

时间:2017-01-23 07:38:08

标签: javafx drag-and-drop droptarget

我需要拥有用户拖动内容的对象实例。我正在查看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。我需要拥有实际对象的实例,因为我想在其上应用悬停效果。

你能建议我做些什么吗?

1 个答案:

答案 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);
    }
}

没什么好看的,一旦你开始尝试拖动文本,它就会变成红色。