我认为JavaFX的TitledPane在其标题中使用图形节点时显示错误的调整大小行为。当我将BorderPane
实例作为图形(使用Label#setGraphic
)添加到标签并且当我将contentDisplay
设置为GRAPHIC_ONLY
时, BorderPane
实例始终占据标签的完整内部。
相反,当我使用 TitledPane 时,BorderPane会忽略TitledPane标题的实际大小,但始终使用其首选的宽度和高度。
我希望Label和TitledPane显示相同的调整大小行为,因为它们都是同一个超类Labeled的子类。 (虽然,TitledPane
当然还有某种方式来处理额外的箭头按钮。)
以下小程序演示了TitledPane和Label的不同布局行为。
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.ContentDisplay;
import javafx.scene.control.Label;
import javafx.scene.control.LabelBuilder;
import javafx.scene.control.TitledPane;
import javafx.scene.control.TitledPaneBuilder;
import javafx.scene.layout.BorderPaneBuilder;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;
public class LayoutProblem extends Application {
@Override
public void start(Stage primaryStage) {
TitledPane tPane = TitledPaneBuilder.create().graphic(
BorderPaneBuilder.create().prefHeight(20).prefWidth(100)
.style("-fx-border-color: black;").build()
).contentDisplay(ContentDisplay.GRAPHIC_ONLY)
.maxWidth(Double.MAX_VALUE).build();
Label label = LabelBuilder.create().graphic(
BorderPaneBuilder.create().prefHeight(20).prefWidth(100)
.style("-fx-border-color: black;").build()
).contentDisplay(ContentDisplay.GRAPHIC_ONLY)
.maxWidth(Double.MAX_VALUE).build();
VBox vBox = new VBox(10);
vBox.getChildren().addAll(tPane, label);
vBox.setPrefWidth(300);
primaryStage.setScene(new Scene(vBox));
primaryStage.show();
}
public static void main(String[] args) { launch(args); }
}
如何管理BorderPane
实例以占用TitlePane标题中的完整可用空间(最好考虑箭头按钮)?
有可能使用css-lookup并编写一些宽度属性绑定特技,但我认为应该有一个更方便的解决方案。