Je travaille sur un contrôle personnalisé et je suis en utilisant le StyleablePropertyFactory pour essayer de faire une propriété styleable comme suit:StyleableProperty dans JavaFX CSS
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);
J'ai ensuite eu des accesseurs qui me permettent d'accéder la lecture de la valeur:
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;
}
dans le constructeur, je suis en train de la peau et du style à regarder pour:
this.setSkin(new RackControlSkin(this));
getStyleClass().add("rack-control");
ensuite dans ma peau (si cela ne compte pas vraiment où je l'obtenir à partir) Je suis en train de charger dans la propriété css comme suit:
System.out.println(control.getCssMetaData().stream().filter(c -> c.getProperty().equals("-fx-default-tube-color")).findFirst().get());
System.out.println(control.getDefaultTubeColor());
Ceci affiche:
CSSProperty {property: -fx-default-tube-color, converter: ColorConverter, initalValue: 0x000000ff, inherits: false, subProperties: []}
0x000000ff
donc je sais que la propriété est trouvé dans le fichier css suivant:
.rack-control {
-fx-default-tube-color: red;
}
Quand il est appelé de la scène comme indiqué dans mon code de test:
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();
Donc, autant que je peux voir; Je fais tout correctement, mais la valeur n'est pas chargée depuis le fichier css. Quelqu'un peut-il me fournir un pointeur sur ce que je fais mal ici s'il vous plaît?
Merci d'avance de lire la question et merci pour tout conseil!
Cheers,
Neil