我正在开发一个具有主边框窗格的 Javafx 应用程序。应用程序的顶部和右侧有不同的窗格。该中心有一个主 StackPane,我根据需要在其上添加和删除窗格。我创建了一个滑动动画,当另一个窗格进入中间的这个堆栈窗格时,它将滑动一个窗格。
问题是滑动动画基于每个窗格的 translateX 属性。这些属性从主边框窗格的一端延伸到另一端。这意味着当我滑入和滑出时,窗格也会越过侧面主边框的面板。
我不知道如何解决这个问题。我考虑放置某种组来封装我要添加到中心的窗格,从而将动画保持在组中的节点内。问题在于组不可调整大小,因此当我展开和缩小窗口时,窗格不会随之增长。我的临时解决方法是在动画滑动时使侧面板不可见。但是,我想找到一种方法来封装这些节点,同时允许它们仍然适合中心的大小,或者找到一种方法来设置我的 translateX 属性以仅填充中心堆栈的侧面。
任何的意见都将会有帮助。谢谢!
这是我的滑动功能:
root.getChildren().add(pane1);
KeyFrame start = new KeyFrame(Duration.ZERO,
new KeyValue(pane1.translateXProperty(), root.getWidth()),
new KeyValue(pane2.translateXProperty(), 0));
KeyFrame end = new KeyFrame(Duration.seconds(1),
new KeyValue(pane1.translateXProperty(), 0),
new KeyValue(pane2.translateXProperty(), -root.getWidth()));
Timeline slide = new Timeline(start, end);
slide.setOnFinished(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
root.getChildren().remove(pane2);
for(Node b : buttonBar.getButtons()){
b.setDisable(false);
dvs.setVisible(true);
}
}
这里,root 是这些节点所在的外部窗格,pane1 是目标窗格,pane2 是被刷出的窗格。