这与三年多前提出的问题有关。JavaFX 8 - Add a graphic to a TitledPane on the right side
我不喜欢这个解决方案,我也没有找到任何其他解决方案。
自从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对齐方式设置为CENTER_RIGHT会将标题放在右侧,但会将整个标题、文本和图形放在右侧。
titledPane.setAlignment(Pos.CENTER_RIGHT);
我已经尝试过在TitledPane图形、HBox、GridPane中使用不同的容器。设置增长、对齐、fillWidth等。都不起作用。
在没有设置人工图形间隙的情况下,我看不到可行的解决方案,但上面引用的问题中建议的黑客。这是一个丑陋的黑客行为。用于Acrodion中的多个TitledPanes。然而,按钮并没有放置在确切的末端,在标题的右侧仍然有更多的空间。
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));
}
});
发布于 2018-09-23 01:40:03
你不需要为图形节点使用容器-只需将其向右转换即可:
TitledPane titledPane = new TitledPane("Title", null);
titledPane.setPrefSize(400, 200);
Button graphic = new Button("Click me!");
titledPane.setGraphic(graphic);
titledPane.setContentDisplay(ContentDisplay.RIGHT);
final double graphicMarginRight = 10; //change it, if needed
graphic.translateXProperty().bind(Bindings.createDoubleBinding(
() -> titledPane.getWidth() - graphic.getLayoutX() - graphic.getWidth() - graphicMarginRight,
titledPane.widthProperty())
);
https://stackoverflow.com/questions/52457813
复制相似问题