在JavaFX中使用ComboBox设置默认皮肤



我想在运行时更改JavaFXapplication的默认皮肤。我如何使用组合框做到这一点?现在我用下面的代码来改变这个值:

setUserAgentStylesheet(STYLESHEET_MODENA);

是否有办法在运行时更改皮肤?

可以在ComboBox.setOnAction()方法体中使用setUserAgentStylesheet()。例如:

import javafx.application.Application;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.control.ComboBox;
import javafx.scene.layout.BorderPane;
import javafx.stage.Stage;
public class SetStyleDemo extends Application {
    public Parent createContent() {
        /* layout */
        BorderPane layout = new BorderPane();
        /* layout -> combobox */
        ObservableList<String> styles = FXCollections.observableArrayList(
                "Modena", "Caspian");
        ComboBox<String> cbStyles = new ComboBox<String>(styles);
        cbStyles.getSelectionModel().select(0);
        cbStyles.setOnAction(new EventHandler<ActionEvent>() {
            @Override
            public void handle(ActionEvent ae) {
                if (cbStyles.getSelectionModel()
                        .getSelectedItem().equals("Modena")) {
                    setUserAgentStylesheet(STYLESHEET_MODENA);
                } else {
                    setUserAgentStylesheet(STYLESHEET_CASPIAN);
                }
            }
        });
        /* add items to the layout */
        layout.setCenter(cbStyles);
        return layout;
    }
    @Override
    public void start(Stage stage) throws Exception {
        stage.setScene(new Scene(createContent()));
        stage.setWidth(200);
        stage.setHeight(200);
        stage.show();
    }
    public static void main(String args[]) {
        launch(args);
    }
}

最新更新