Это связано с предыдущим вопросом, заданным более трех лет назад. JavaFX 8 - Добавить изображение в TitledPane с правой стороны
Мне не нравится это решение, и я не нашел других решений.
Многопроизошло с JavaFX, так как этот оригинальный вопрос был задан для JavaFX 8. Недавно был выпущен 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);
При установке выравнивания области заголовка на CENTER_RIGHT заголовок будет располагаться справа, но весь заголовок, текст и графика.
titledPane.setAlignment(Pos.CENTER_RIGHT);
Iпробовал экспериментировать с различными контейнерами в графике TitledPane, HBox, GridPane.Настройка увеличения, выравнивания, заполнения, ширины и т. Д. Ничего не работает.
Без установки искусственного графического разрыва я не вижу жизнеспособных решений, но взлом, предложенный в упомянутом выше вопросе.Это безобразный хак.Для нескольких титановых панелей в Acrodion.Однако кнопка не помещается в точный конец, справа от заголовка еще больше места.
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));
}
});