Change Cascading Style Sheets (css)
The JavaFX application will dynamically change (switch) between StyleSheets.
------------ ChangeStyleSheet.java ------------- import javafx.application.*; import javafx.stage.*; import javafx.scene.*; import javafx.scene.layout.*; import javafx.scene.control.*; import javafx.geometry.*; import javafx.collections.*; import java.util.*; public class ChangeStyleSheet extends Application { List<String> urls = new ArrayList<>(); ChoiceBox<String> cb = new ChoiceBox<>(); @Override public void start(Stage stage) { HBox layout = new HBox(10); stage.setScene(new Scene(layout, 400, 150)); Class<?> skinClass = null; try { skinClass = Class.forName("com.sun.javafx.scene.control.skin.Utils"); } catch (Exception e) {} addItem(null, null, "Default"); addItem(skinClass, "modena/modena.css", "Modena"); addItem(skinClass, "caspian/caspian.css", "Caspian"); addItem(skinClass, "modena/blackOnWhite.css", "Modena-BlackOnWhite"); addItem(skinClass, "modena/whiteOnBlack.css", "Modena-WhiteOnBlack"); addItem(skinClass, "modena/yellowOnBlack.css", "Modena-YellowOnBlack"); addItem(getClass(), "myCss.css", "MyCss"); cb.getSelectionModel().selectFirst(); cb.getSelectionModel().selectedIndexProperty().addListener((observable, oldValue, newValue) -> { String url = urls.get(newValue.intValue()); if (url == null) stage.getScene().getStylesheets().clear(); else stage.getScene().getStylesheets().setAll(url); }); Button button = new Button("Click Me"); button.setOnAction(event -> { Stage newStage = new Stage(); newStage.initOwner(stage); VBox vb = new VBox(10); newStage.setScene(new Scene(vb, 200, 200)); newStage.show(); vb.getChildren().addAll(new Label("Label"), new TextField("TextField"), /*new Spinner<Integer>(0, 10, 0),*/ new Button("Button"), new CheckBox("CheckBox"), new RadioButton("RadioButton")); vb.setAlignment(Pos.CENTER); ListChangeListener<String> listener = c -> { if (c.next()) { System.out.println("ListChangeListener " + c.getList()); newStage.getScene().getStylesheets().setAll(stage.getScene().getStylesheets()); } }; stage.getScene().getStylesheets().addListener(listener); newStage.setOnCloseRequest(evt -> stage.getScene().getStylesheets().removeListener(listener)); newStage.getScene().getStylesheets().setAll(stage.getScene().getStylesheets()); }); layout.getChildren().addAll(cb, button); layout.setAlignment(Pos.CENTER); stage.show(); } void addItem(Class<?> cl, String name, String desc) { try { //String url = (name == null ? null : cl.getResource(name).toExternalForm()); String url = (name == null ? null : cl.getResource("").toExternalForm() + name); // javafx-sdk-11.0.1 urls.add(url); cb.getItems().add(desc); } catch (Exception e) {} } } ----------------- myCss.css -------------------- .root { -fx-base: aquamarine; }