ヘッダーでグラフィック ノードを使用すると、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); }
}
TitlePane のヘッダー内の完全な空き領域を占めるようにインスタンスを管理するにはどうすればよいですかBorderPane
(できれば矢印ボタンを考慮に入れることをお勧めします)。
css-lookup を使用して width-property バインディング スタントを記述することは可能かもしれませんが、もっと便利な解決策があるはずです。