从顶部出现并向下移动的Java FX组件

时间:2017-08-31 06:15:26

标签: java javafx javafx-2

是否存在Java FX组件,如从顶部出现并向下显示的组件,如下面的gif所示?enter image description here

2 个答案:

答案 0 :(得分:1)

我能够根据窗格的转换实现演示。它看起来像:

enter image description here

这种方法的缺点是它不适用于具有标准边框,按钮等的Window。开发人员负责根据Pane构建一个漂亮的窗口。

另一个问题是调整父窗口的大小也会调整子窗格的大小。但是,如果你没有可重新调整大小的父对话框,它应该不是问题。

欢迎您复制粘贴此代码并使用它:

public class Main extends Application {
    public static void main(String[] args) {
        launch(args);
    }

    @Override
    public void start(Stage primaryStage) {
        final SubPane subPane = new SubPane();

        final TranslateTransition dialogAnimator =
                new TranslateTransition(new Duration(500), subPane);

        final Button showSubPaneButton = new Button("Slide a sub pane");
        showSubPaneButton.setOnAction(event -> {
            dialogAnimator.setToY(10);
            dialogAnimator.play();
        });

        subPane.setCloseAction(event -> {
            dialogAnimator.setToY(-subPane.getHeight());
            dialogAnimator.play();
        });

        final Pane rootPane = new StackPane(showSubPaneButton, subPane);
        rootPane.setPrefWidth(400);
        rootPane.setPrefHeight(300);

        // By default hide the given pane by moving to the top.
        Platform.runLater(() -> subPane.setTranslateY(-subPane.getHeight()));

        primaryStage.setTitle("Drop slided dialog");
        primaryStage.setScene(new Scene(rootPane));
        primaryStage.show();
    }
}

class SubPane extends BorderPane {
    private final Button dialogButton = new Button("Close");

    SubPane() {
        final Pane centralPane = new StackPane(dialogButton);
        centralPane.setStyle(
                "-fx-effect: dropshadow(three-pass-box, rgba(0,0,0,0.8), 10, 0, 0, 0);-fx-padding: 10;" +
                "-fx-background-color: firebrick;-fx-background-radius: 10;");
        setCenter(centralPane);

        final Pane blankLeftPane = new StackPane();
        blankLeftPane.setPrefWidth(100);
        setLeft(blankLeftPane);

        final Pane blankRightPane = new StackPane();
        blankRightPane.setPrefWidth(100);
        setRight(blankRightPane);

        final Pane blankBottomPane = new StackPane();
        blankBottomPane.setPrefHeight(200);
        setBottom(blankBottomPane);
    }

    void setCloseAction(final EventHandler<ActionEvent> closeCallback) {
        dialogButton.setOnAction(closeCallback);
    }
}

答案 1 :(得分:0)

如果您正在谈论对话窗口,ControlsFX会有类似NotificationPane的内容。