カスタム JavaFX コントロール内の Text で TextFlow を使用していますが、このコントロールは TitledPane に配置されています。
制御宣言:
public class CustomControl extends Control {
@Override
protected Skin<?> createDefaultSkin() {
return new CustomControlSkin(this);
}
}
スキン宣言 :
public class CustomControlSkin extends SkinBase<CustomControl> implements Skin<CustomControl> {
public CustomControlSkin(CustomControl customControl) {
super(customControl);
TextFlow textFlow = new TextFlow();
textFlow.getChildren().add(new Text("This is a long long long long long long long long long long long long long long text"));
getChildren().add(new StackPane(textFlow));
}
}
応用 :
@Override
public void start(Stage primaryStage) throws Exception {
TitledPane titledPane = new TitledPane();
titledPane.setContent(new CustomControl());
Scene scene = new Scene(new StackPane(titledPane));
primaryStage.setScene(scene);
primaryStage.show();
}
シーンが水平方向にサイズ変更されると、テキストが折り返されて高さが増加します。ただし、TitledPane は垂直方向にサイズ変更されません。
これは、カスタム コントロールを使用せずに TextFlow が TitledPane に直接配置されている場合には発生しません。
Scenic Viewの使用TextFlow をカスタム コントロールで使用すると、コントロールのレイアウト境界が親の境界と異なることに気付きました。実際、親の境界は正しく計算されているようですが、使用されていません。
これがこの問題の原因である可能性があります。スキンのすべての計算(最小/優先/最大)高さメソッドを実験しましたが、TitledPane を正しくサイズ変更することができませんでした。
カスタム コントロール/スキンで使用したときに TextFlow の動作が異なる理由と、TitledPane のサイズを正しく変更する方法を教えてください。