gpt4 book ai didi

JavaFX - 垂直 Accordion

转载 作者:行者123 更新时间:2023-12-01 18:23:07 27 4
gpt4 key购买 nike

您好,我有一个关于 JavaFX 的问题。我担心答案是剥皮,我对此一无所知,但这里是。

我想在 JavaFX 中制作 Accordion/TabPane 交叉。我将尝试用文字解释自己,但在下面我已经包含了我想要制作的图像。

所以,我想制作一个左侧有一个按钮的 JavaFX 容器,单击该按钮时将在该初始容器上移动不同的相关容器。再次按下时,顶部容器将移回左侧。我希望按钮和顶部容器一起从左向右移动,然后再返回,就像它们彼此相连一样。

需要明确的是,两个不同的容器最好应该以平滑的方式在之间过渡,就像 Accordion 的情况一样。

enter image description here

最佳答案

将“标准”内容和 slider 内容(包含按钮和 slider 内容的 HBox)放置在 StackPane 中,并使用动画来设置 translateX 使 slider 移入和移出 View :

@Override
public void start(Stage primaryStage) {
Button someButton = new Button("Sample content");

StackPane stackPane = new StackPane(someButton);
stackPane.setPrefSize(500, 500);
stackPane.setStyle("-fx-background-color: blue;");

Region sliderContent = new Region();
sliderContent.setPrefWidth(200);
sliderContent.setStyle("-fx-background-color: red; -fx-border-color: orange; -fx-border-width: 5;");

Button expandButton = new Button(">");

HBox slider = new HBox(sliderContent, expandButton);
slider.setAlignment(Pos.CENTER);
slider.setPrefWidth(Region.USE_COMPUTED_SIZE);
slider.setMaxWidth(Region.USE_PREF_SIZE);

// start out of view
slider.setTranslateX(-sliderContent.getPrefWidth());
StackPane.setAlignment(slider, Pos.CENTER_LEFT);

// animation for moving the slider
Timeline timeline = new Timeline(
new KeyFrame(Duration.ZERO, new KeyValue(slider.translateXProperty(), -sliderContent.getPrefWidth())),
new KeyFrame(Duration.millis(500), new KeyValue(slider.translateXProperty(), 0d))
);

expandButton.setOnAction(evt -> {
// adjust the direction of play and start playing, if not already done
String text = expandButton.getText();
boolean playing = timeline.getStatus() == Animation.Status.RUNNING;
if (">".equals(text)) {
timeline.setRate(1);
if (!playing) {
timeline.playFromStart();
}
expandButton.setText("<");
} else {
timeline.setRate(-1);
if (!playing) {
timeline.playFrom("end");
}
expandButton.setText(">");
}
});

stackPane.getChildren().add(slider);

final Scene scene = new Scene(stackPane);

primaryStage.setScene(scene);
primaryStage.show();
}

关于JavaFX - 垂直 Accordion ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51045135/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com