1

我认为 JavaFX 的 TitledPane 在其标题中使用图形节点时显示错误的大小调整行为。因为当我将BorderPane实例作为图形(使用Label#setGraphic)添加到标签时,当我设置为时,contentDisplay实例总是占据标签的完整内部。相反,当我使用TitledPane执行相同操作时, BorderPane 会忽略 TitledPane 标题的实际大小,但始终使用其首选宽度和高度。我希望 Label 和 TitledPane 显示相同的大小调整行为,因为它们都是同一个超类 Labeled 的子类。(虽然,当然也有办法处理额外的箭头按钮。)GRAPHIC_ONLYBorderPaneTitledPane

下面的小程序演示了 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 并编写一些宽度属性绑定特技,但我认为应该有一个更方便的解决方案。

4

0 回答 0