我試圖獲得手風琴的UI行爲,其中用戶可以彈出任何TitledPane
到窗口,並將窗口彈回到手風琴內的TitledPane
。將標題窗口內容彈出窗口
但是,當彈出摺疊的TitledPane
時,內容未在Stage
中正確對齊,並且如果no窗格展開,它甚至不會顯示。
附加是顯示問題的最小示例 - 請注意,我保留了兩個佔位符窗格,以避免內容節點(我的情況下爲A VBox
)多次出現在場景圖中。我曾嘗試在VBox
上設置preferredSize
和visible
屬性,並在顯示前後調用layout
,甚至以編程方式展開標題窗格,但似乎沒有任何效果。結果
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.*;
import javafx.scene.layout.Pane;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;
public class Main extends Application {
@Override
public void start(Stage primaryStage) throws Exception {
TitledPane t1 = new TitledPane();
TitledPane t2 = new TitledPane();
Accordion accordion = new Accordion(t1, t2);
t1.setContent(buildComponent("Pane 1", t1, accordion));
t2.setContent(buildComponent("Pane 2", t2, accordion));
primaryStage.setScene(new Scene(accordion, 300, 300));
primaryStage.show();
}
private VBox buildComponent(String name, TitledPane titledPane, Accordion holder) {
final Button popout = new Button("Pop out");
titledPane.setGraphic(popout);
titledPane.setText(name);
final VBox component = new VBox(new Label(name), new TableView<>());
final Pane placeholder1 = new Pane();
final Pane placeholder2 = new Pane();
Stage st = new Stage();
st.setScene(new Scene(placeholder1, 300, 300));
popout.setOnAction(event -> {
if (!st.equals(component.getScene().getWindow())) {
holder.getPanes().remove(titledPane);
titledPane.setContent(placeholder2);
st.getScene().setRoot(component);
st.show();
}
});
st.setOnHidden(windowEvent -> {
st.getScene().setRoot(placeholder1);
titledPane.setContent(component);
holder.getPanes().add(titledPane);
});
return component;
}
public static void main(String[] args) {
launch(args);
}
}
插圖:
時候,沒有窗格中展開:當其他窗格中展開
結果。注意標籤是多麼的不可見:當窗格中展開
結果 - 這是我想在所有情況下,結果: