我在自定义 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 时,控件的布局边界与父控件的边界不同。实际上, parent 中的边界似乎已正确计算,但未使用。
这可能是这个问题的根源。我已经尝试过所有计算皮肤的(Min/Pref/Max)Height 方法,但没有设法正确调整 TitledPane 的大小。
知道为什么 TextFlow 在自定义控件/皮肤中使用时的行为会有所不同,以及如何正确调整 TitledPane 的大小吗?