Я знаю, что невозможно открыть несколько титулованных панелей в аккордеоне.Поэтому я попытался реализовать логику, используя заголовочные панели и VBox.То, чего я хочу добиться, - это чтобы каждая титулованная панель занимала всю высоту VBox после его расширения.
Это "работает", но у меня проблемы с воспроизведением анимации.Вот что у меня есть (допустим, у меня только 2 титулованных стекла):
main.fxml:
<HBox fx:id="main">
<children>
<VBox HBox.hgrow="ALWAYS">
<children>
<TitledPane onMouseClicked="#expandTitle" fx:id="pane1" VBox.vgrow="ALWAYS">
<content>
<AnchorPane minHeight="0.0" minWidth="0.0" prefHeight="180.0" prefWidth="200.0" />
</content>
</TitledPane>
<TitledPane onMouseClicked="#expandTitle" fx:id="pane2" expanded="false" VBox.vgrow="ALWAYS">
<content>
<AnchorPane minHeight="0.0" minWidth="0.0" prefHeight="180.0" prefWidth="200.0" />
</content>
</TitledPane>
</children>
</VBox>
</children></HBox>
Controller.java:
public class Controller {
@FXML
private javafx.scene.layout.HBox main;
@FXML
private javafx.scene.control.TitledPane pane1;
@FXML
private javafx.scene.control.TitledPane pane2;
@FXML
private void expandTitle(MouseEvent evt){
TitledPane clickTarget = (TitledPane) evt.getSource();
TitledPane otherTarget = clickTarget == pane1 ? pane2 : pane1;
otherTarget.setExpanded(!clickTarget.expandedProperty().getValue());
if(otherTarget.expandedProperty().getValue()){
otherTarget.setMaxHeight(main.getHeight());
clickTarget.setMaxHeight(0);
} else {
clickTarget.setMaxHeight(main.getHeight());
otherTarget.setMaxHeight(0);
}
}
}
Я пытался setMaxHeight
, setPrefHeight
, все они имеют одинаковый результат.Вот как это выглядит против того, как я ожидаю, что это будет выглядеть: