Javafx 拖动时悬停

Javafx 拖动时悬停,javafx,drag-and-drop,hover,Javafx,Drag And Drop,Hover,我有这样一个场景: FlowPane AnchorPane VBox Label LabeledText HBox ImageView VBox Label LabeledView StackPane HBox ImageView F

我有这样一个场景:

FlowPane
   AnchorPane
      VBox
         Label
            LabeledText
         HBox
            ImageView
            VBox
               Label
                  LabeledView
         StackPane
            HBox
               ImageView
FlowPane
有多个
AnchorPane
节点。我需要的是让
AnchorPane
悬停,同时将某个东西拖到上面的任何东西上。就像我没有拖动鼠标,只是在上面移动鼠标一样。 我可以使用以下命令以编程方式触发
悬停

private static PseudoClass HOVER_PSEUDO_CLASS = PseudoClass.getPseudoClass("hover");
anchorePane.pseudoClassStateChanged(HOVER_PSEUDO_CLASS, true);
但这仅在鼠标在
AnchorPane
节点上向右拖动时有效。如果鼠标在
标签
图像
上拖动,则不会悬停。
你能帮帮我吗?

我真的不明白你是如何自己触发悬停效果的,但我认为你不应该这么做。它可以由
setOnDragEntered
setOnDragExited
事件处理程序自动处理,您只需要指定预期的行为。我举了一个小例子来说明它们是如何工作的

public class JavaFXTest extends Application {

    @Override
    public void start(Stage primaryStage) {
        BorderPane root = new BorderPane();

        ImageView avatar = new ImageView("https://www.gravatar.com/avatar/1eb4610d0e524773a8d28f8896dd5f20?s=64&d=identicon&r=PG");
        avatar.setOnDragDetected(e -> {
            Dragboard db = avatar.startDragAndDrop(TransferMode.ANY);
            ClipboardContent content = new ClipboardContent();
            content.putImage(avatar.getImage());
            db.setContent(content);
            e.consume();
        });
        root.setLeft(avatar);

        root.setCenter(getAnchorPane());
        root.setRight(getAnchorPane());

        Scene scene = new Scene(root, 400, 150);
        primaryStage.setScene(scene);
        primaryStage.show();
    }

    public AnchorPane getAnchorPane() {
        AnchorPane pane = new AnchorPane();
        pane.setOnDragEntered(e -> {
            pane.setStyle("-fx-border-style: dotted;");
        });
        pane.setOnDragExited(e -> {
            pane.setStyle("");
        });
        AnchorPane.setTopAnchor(pane, 20d);
        AnchorPane.setLeftAnchor(pane, 100d);
        ImageView imageView = new ImageView("http://cdn.sstatic.net/Sites/stackoverflow/company/img/logos/so/so-icon.png");
        pane.getChildren().add(imageView);

        return pane;
    }

    public static void main(String[] args) {
        launch(args);
    }
}
首先,我创建了一个舞台,其中有一个图像(我的gravatar),可以拖动,还有两个完全相同的面板-实际上这就是
start
方法所做的一切

getAnchorPane()
方法创建面板并设置其事件处理程序:如果在其上拖动任何内容,面板将其边框更改为虚线。无论您是将鼠标悬停在面板上,还是它的子面板(即stackoverflow徽标)上