Изменение шрифта элемента меню поля со списком в fxml

Мне нужно изменить шрифт и удалить тень для элементов поля со списком.

Я сделал попытку с кодом ниже, но безуспешно:

.combo-box .popup-menu, .combo-box .menu-item, .combo-box .popup-menu .menu-item-radio
    {
        -fx-shadow-highlight-color: transparent;
         -fx-font-family: "Arial";
         -fx-font-size: 14px;
    }

person Karthikram    schedule 08.08.2014    source источник


Ответы (1)


Для JavaFX2 вы можете создать CellFactory, чтобы установить его:

import javafx.application.Application;
import javafx.collections.FXCollections;
import javafx.scene.Scene;
import javafx.scene.control.ComboBox;
import javafx.scene.control.ListCell;
import javafx.scene.control.ListView;
import javafx.scene.layout.Pane;
import javafx.stage.Stage;
import javafx.util.Callback;

public class Main extends Application {

    @Override
    public void start(Stage stage) throws Exception {
        ComboBox<String> cb = new ComboBox<String>();
        cb.setItems(FXCollections.observableArrayList("Foo","Bar","777","Batman"));
        cb.setCellFactory(new Callback<ListView<String>, ListCell<String>>() {
            @Override public ListCell<String> call(ListView<String> p) {
                return new ListCell<String>() {
                    {
                        getStyleClass().add("customcell");
                    }
                    @Override
                    protected void updateItem(String item, boolean empty) {
                        super.updateItem(item, empty);
                        setText(item);
                    }
                };
            }
        });
        cb.getSelectionModel().selectFirst();
        Pane root = new Pane();
        root.getChildren().add(cb);
        Scene scene = new Scene(root);
        scene.getStylesheets().add(getClass().getResource("style.css").toExternalForm());
        stage.setScene(scene);
        stage.show();
    }
    public static void main(String[] args) {launch(args);}
}

style.css

/* for the main button of the ComboBox  */
.combo-box .cell{
    -fx-text-fill: blue;
    -fx-font: 16px "Arial";
}
.customcell {
    -fx-text-fill: blue;
    -fx-font: 16px "Arial";
    /* No alternate highlighting */
    -fx-background-color: #FFF;
}

Для примера JavaFX 8 проверьте этот ответ, который я дал на очень похожий вопрос, но для другой версии.

person Mansueli    schedule 08.08.2014
comment
Но у меня есть файл fxml, в котором можно изменить шрифты и цвет фона элементов меню со списком. Я использовал конструктор сцен 1.1 для создания поля со списком. - person Karthikram; 21.08.2014
comment
Просто загрузите CSS, как в примере выше. Вам даже не придется менять fxml - person Mansueli; 21.08.2014
comment
я загрузил css в приведенном выше примере напрямую. Но значение по умолчанию в поле со списком только изменилось (видимое). Шрифт и размер элементов меню по-прежнему имеют шрифт и размер по умолчанию. - person Karthikram; 21.08.2014
comment
@Karthikram, тогда вы используете файл JavaFX 8. Этот ответ предназначен для JavaFX 2, а внизу есть ссылка для примера JavaFX 8. - person Mansueli; 21.08.2014
comment
Я проверил версию. что, если версия javaFX 1.1. Я использовал конструктор сцен javafx 1.1 для разработки страницы. Есть ли у меня возможность изменить пункты меню здесь. я думаю, что я использую довольно старую версию. - person Karthikram; 22.08.2014
comment
@Karthikram Извините, я не знаю JavaFX 1.X. Но вы можете опубликовать новый вопрос для этой версии, поскольку я уже ответил для JavaFX 2 и 8, кто-то может ответить на 1.X. PS: я думаю, что вам следует, по крайней мере, подумать об изменении версии на более новую, поскольку даже Windows XP поддерживает JavaFX 2 - person Mansueli; 22.08.2014
comment
Да конечно. Спасибо за вашу поддержку. - person Karthikram; 22.08.2014