To jest błąd. Jest to zgłaszane tutaj Removal of hovered style class, does not update styling. Możesz zagłosować i obejrzeć go. Aby obejść ten problem, należy zastąpić reguły css dotknięte/zmienione tak, aby były takie same, jak te domyślne. Demo:
import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.layout.StackPane;
import javafx.scene.layout.VBoxBuilder;
import javafx.stage.Stage;
public class StyleDemo extends Application {
@Override
public void start(Stage primaryStage) {
final Label lbl = new Label("Style Me");
lbl.getStyleClass().add("style1"); // initial style
Button btn = new Button("Change the style");
btn.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent arg0) {
lbl.getStyleClass().remove("style1");
lbl.getStyleClass().add("style2");
}
});
StackPane root = new StackPane();
root.getChildren().add(VBoxBuilder.create().spacing(20).children(lbl, btn).build());
Scene scene = new Scene(root, 300, 250);
scene.getStylesheets().add(this.getClass().getResource("style.css").toExternalForm());
primaryStage.setScene(scene);
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
i style.css to:
.style1 {
-fx-text-fill: red;
-fx-border-color: green;
-fx-font-size: 20;
}
.style2 {
-fx-text-fill: blue;
-fx-border-color: red;
-fx-font-size: 15;
-fx-underline: true;
}
po kliknięciu przycisku początkowo dodanej style1
jest usuwany i style2
dodaje.
W niektórych wersjach JavaFX wystąpiły pewne błędy w zarządzaniu klasami stylów. Spróbuj ponownie wykonać test w [późnym wywiadzie dla programisty] (http://www.oracle.com/technetwork/java/javafx/downloads/devpreview-1429449.html) i sprawdź, czy nadal występują problemy. – jewelsea