Встроенные вложенные элементы JavaFX .setStyle - PullRequest
0 голосов
/ 15 мая 2018

Чтобы стилизовать фон для многих элементов в JavaFX, вам нужно использовать файл CSS или использовать .setStyle.

В моем случае мне нужно стилизовать фон выпадающего меню из ComboBox, но я должен использовать .setStyle, а не файл CSS (потому что у меня есть некоторые динамические цвета, которые будут использоваться для стилизации различных элементов графического интерфейса) , Проблема в том, что если я использую следующий код CSS, функция .setStyle не распознает его так, как если бы я использовал файл CSS.

.setStyle(".combo-box .list-cell{ -fx-background: blue;}");

Код будет выглядеть так:

comboBox.setStyle(".combo-box .list-cell{ -fx-background: #"+ Color1.toString().substring(2) + ";}");

Color1 объект Color, который получит динамическое значение в зависимости от случая.

Вопрос в том, можно ли использовать .list-cell внутри функции .setStyle? Если так, то как? Это помогло бы мне с другими элементами графического интерфейса, если бы мне пришлось использовать .setStyle.

Ответы [ 2 ]

0 голосов
/ 16 мая 2018

За то, что у меня есть, мне больше нравится это решение.

comboBox.setCellFactory(new Callback<ListView<String>, ListCell<String>>() {
    public ListCell<String> call(ListView<String> param) {
        return new ListCell<String>() {
            protected void updateItem(String item, boolean empty) {
                super.updateItem(item, empty);
                setText(item);
                setBackground(new Background(new BackgroundFill(Color.BLACK, CornerRadii.EMPTY, Insets.EMPTY)));
                setTextFill(Color.BLUE);
            }
        };
    }
});
0 голосов
/ 15 мая 2018

Для этого можно использовать искомые цвета.Вы можете назначить их с помощью setStyle и использовать их из таблицы стилей CSS:

@Override
public void start(Stage primaryStage) {
    ComboBox<String> comboBox = new ComboBox<>();
    comboBox.getItems().addAll("A", "B", "C");

    StackPane root = new StackPane(comboBox);

    // set color
    root.setStyle("cell-color: blue;");

    Scene scene = new Scene(root, 400, 400);
    scene.getStylesheets().add("style.css");

    primaryStage.setScene(scene);
    primaryStage.setResizable(false);
    primaryStage.show();
}

style.css

/* default values */
.root {
    cell-color: yellow;
}

/* use color */
.combo-box .list-cell {
    -fx-background: cell-color;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...