这与三年前提出的前一个问题有关。 JavaFX 8 - 将图形添加到右侧的 TitledPane
我不喜欢这个解决方案,也没有找到任何其他解决方案。
自从 JavaFX 8 提出这个原始问题以来,JavaFX 发生了很多事情。最近发布了 JavaFX 11。
我有一个使用 JavaFX 11 的项目。 TitledPane 图形设置有一个 HBox,其中包含一个我想放置在标题最右侧的按钮。
TitledPane titledPane = new TitledPane();
titledPane.setText("Title");
HBox titleBox = new HBox();
Button b1 = new Button("ClickMe!");
titleBox.getChildren().add(b1);
titledPane.setGraphic(titleBox);
titledPane.setContentDisplay(ContentDisplay.RIGHT);
将 TitlePane Alignment 设置为 CENTER_RIGHT 会将标题置于右侧,但将整个标题、文本和图形放置在右侧。
titledPane.setAlignment(Pos.CENTER_RIGHT);
我已经尝试在 TitledPane 图形、HBox、GridPane 中使用不同的容器。设置增长、对齐、填充宽度等。无效。
如果不设置人为的图形差距,我看不到可行的解决方案,但上面提到的问题中建议的黑客攻击。这是一个丑陋的黑客。对于 Acrodion 中的多个 TitledPanes。但是 Button 并没有放在确切的末尾,标题右侧还有更多空间。
primaryStage.setOnShown(e -> {
for (TitledPane titledPane : panes) {
Node titleRegion = titledPane.lookup(".title");
Insets padding = ((StackPane) titleRegion).getPadding();
double graphicWidth = titledPane.getGraphic().getLayoutBounds().getWidth();
double arrowWidth = titleRegion.lookup(".arrow-button").getLayoutBounds().getWidth();
double labelWidth = titleRegion.lookup(".text").getLayoutBounds().getWidth();
double nodesWidth = graphicWidth + padding.getLeft() + padding.getRight() + arrowWidth + labelWidth;
titledPane.graphicTextGapProperty().bind(titledPane.widthProperty().subtract(nodesWidth));
}
});