Граничная панель с анимацией смахивания Javafx

Я работаю над приложением Javafx, которое имеет основную границу. В верхней и правой части приложения расположены разные панели. В центре есть основная панель стека, на которой я добавляю и удаляю панели по мере необходимости. Я создал анимацию смахивания, которая будет смахивать одну панель по мере того, как другая будет входить в эту область стека в центре.

Проблема заключается в том, что анимация смахивания основана на свойстве 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 - панель, которая удаляется.

0 ответов

Другие вопросы по тегам