Je suis en train de créer un contrôle de bouton pour JavaFX avec cet exemple comme point de départ: http://fxexperience.com/2012/01/fun-javafx-2-0-audio-player/Impossible de charger la peau: null lors de l'application css à FXML dans le constructeur de la scène
Dans cet exemple, ils appliquent une peau (KnobSkin. java) à un curseur dans le fichier css.
J'ai créé un contrôle personnalisé comme celui-ci:
Knob.fxml
<?import java.lang.*?>
<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>
<?import javafx.scene.layout.AnchorPane?>
<fx:root type="javafx.scene.layout.AnchorPane" xmlns:fx="http://javafx.com/fxml/1" xmlns="http://javafx.com/javafx/2.2">
<children>
<AnchorPane id="myTestButton" layoutX="0.0" layoutY="5.0" minHeight="49.0" prefHeight="140.0" prefWidth="14.0">
<children>
<Slider id="volume" orientation="VERTICAL" styleClass="knobStyle" />
</children>
</AnchorPane>
</children>
</fx:root>
Knob.java
package application;
public class Knob extends AnchorPane {
@FXML
private AnchorPane myTestButton;
public Knob() {
FXMLLoader fxmlLoader = new FXMLLoader(
getClass().getResource("/application/Knob.fxml"));
fxmlLoader.setRoot(this);
fxmlLoader.setController(this);
try {
fxmlLoader.load();
} catch (IOException exception) {
throw new RuntimeException(exception);
}
}
}
Ma scène principale ressemble à ceci:
test. fxml
<?import application.*?>
<?import java.lang.*?>
<?import javafx.scene.layout.*?>
<?import javafx.scene.layout.AnchorPane?>
<?scenebuilder-classpath-element ../../bin?>
<AnchorPane prefHeight="217.0" prefWidth="221.0" xmlns:fx="http://javafx.com/fxml/1" xmlns="http://javafx.com/javafx/2.2">
<Knob layoutX="5.0" layoutY="4.0" />
</AnchorPane>
Lorsque je tente d'ouvrir le fichier dans test.fxml Scene Builder et appliquer cette css à elle:
.slider.knobStyle {
-fx-skin: "application.KnobSkin";
}
Je reçois l'erreur suivante:
Impossible de charger la peau « StringProperty [haricot: Slider [id = volume, styleClass = slider knobStyle], nom: skinClassName, valeur: application.KnobSkin] 'pour le contrôle Slider [id = volume, styleClass = slider knobStyle]: null
Si j'exécute l'application, le bouton est affiché parfaitement.
Une idée de ce que j'ai mal fait?
Merci!