1

我需要拥有用户在其上拖动某些东西的对象的实例。我在看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,我只是记录目标类名称。我需要有实际对象的实例,因为我想在它上面应用悬停效果。

你能建议我做点什么吗?

4

1 回答 1

1

您想使用event.getTarget()or 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);
    }
}

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

于 2017-01-23T08:07:42.083 回答