我想在弹出窗口上添加翻译转换,但失败了。因为 TranslateTransition 的参数是节点,而弹出窗口是一个窗口。

`javafx.animation.FadeTransition.FadeTransition(Duration duration, Node node)`

如何在弹出窗口中添加翻译转换?

最佳答案

有一种方法可以通过其 yProperty() 移动弹出窗口。您可以使用时间轴来设置此属性,而不是翻译过渡。但由于这是一个只读属性,我们必须在转换中使用 DoubleProperty 并将其绑定(bind)到 Popup.setY()

对于此示例,我将使用 ContextMenu 作为弹出控件,并创建从窗口顶部到用户单击点的平移动画。

我们需要弹出窗口的尺寸和位置,为此我们需要显示它。这意味着它将被显示,并立即移动到窗口的顶部。
yProperty() 中的监听器允许我们在转换期间内插的所有不同位置内设置弹出窗口的位置。

@Override
public void start(Stage primaryStage) {

    ContextMenu cm =  new ContextMenu(new MenuItem("Item 1"), new MenuItem("Item 2"));

    StackPane root = new StackPane();

    Scene scene = new Scene(root, 300, 250);

    scene.setOnContextMenuRequested(event -> {
        cm.show(root,event.getScreenX(),event.getScreenY());

        double yIni=scene.getWindow().getY();
        double yEnd=cm.getY();
        cm.setY(yIni);

        final DoubleProperty yProperty = new SimpleDoubleProperty(yIni);
        yProperty.addListener((ob,n,n1)->cm.setY(n1.doubleValue()));

        Timeline timeIn = new Timeline();
        timeIn.getKeyFrames().add(
            new KeyFrame(Duration.seconds(0.5),
                 new KeyValue(yProperty, yEnd, Interpolator.EASE_BOTH)));
        timeIn.play();

    });

    primaryStage.setTitle("Moving Popup");
    primaryStage.setScene(scene);
    primaryStage.show();
}

关于animation - javafx如何在弹出窗口中添加动画,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29958304/

10-12 13:01
查看更多