gpt4 book ai didi

java - JavaFX CSS 中的 StyleableProperty

转载 作者:行者123 更新时间:2023-11-28 15:23:19 25 4
gpt4 key购买 nike

我正在开发一个自定义控件并使用 StyleablePropertyFactory 来尝试创建一个可设置样式的属性,如下所示:

private static final StyleablePropertyFactory<RackControl> FACTORY = new StyleablePropertyFactory<>(RackControl.getClassCssMetaData());
private StyleableProperty<Color> defaultTubeColor =
FACTORY.createStyleableColorProperty(this, "defaultTubeColor", "-fx-default-tube-color", rc -> rc.defaultTubeColor);

然后我得到了 getter 和 setter,它们允许我访问读入的值:

public Color getDefaultTubeColor() {
return defaultTubeColor.getValue();
}

public void setDefaultTubeColor(Color defaultTubeColor) {
System.out.println("Set default tube color");
this.defaultTubeColor.setValue(defaultTubeColor);
}

@SuppressWarnings("unchecked")
public ObservableValue<Color> defaultTubeColorProperty() {

return (ObservableValue<Color>) defaultTubeColor;
}

在构造函数中,我正在设置要注意的外观和样式:

    this.setSkin(new RackControlSkin(this));
getStyleClass().add("rack-control");

然后在我的皮肤中(虽然这并不重要我从哪里得到它)我试图加载 css 属性如下:

    System.out.println(control.getCssMetaData().stream().filter(c -> c.getProperty().equals("-fx-default-tube-color")).findFirst().get());
System.out.println(control.getDefaultTubeColor());

打印出来:

CSSProperty {property: -fx-default-tube-color, converter: ColorConverter, initalValue: 0x000000ff, inherits: false, subProperties: []}
0x000000ff

所以我知道该属性是从以下 css 文件中找到的:

.rack-control {
-fx-default-tube-color: red;
}

如我的测试代码所示,当从场景中调用它时:

VBox root = new VBox();
RackControl control = new RackControl(8,12);
root.getChildren().addAll(control);
VBox.setVgrow(control, Priority.ALWAYS);
Scene scene = new Scene(root, 320, 200);
String css = this.getClass().getResource("rackcontrol.css").toExternalForm();
scene.getStylesheets().add(css);
//Scene scene = new Scene((Parent) FXMLLoader.load(getClass().getResource("TestUI.fxml")));
primaryStage.setTitle("Custom control");
primaryStage.setScene(scene);
primaryStage.show();

据我所知;我做的一切都正确,但只是没有从 css 文件加载值。任何人都可以向我提供有关我在这里做错了什么的指示吗?

提前感谢您阅读问题并再次感谢您的任何建议!

干杯,

尼尔

最佳答案

我们通过解构元类找到了答案 - 在调用构造器之后之前不会设置 css 属性。因此,您需要设置皮肤以监听 css 中的变化,然后进行绘图等操作。

关于java - JavaFX CSS 中的 StyleableProperty,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45681021/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com