Я делаю приложение с JavaFX и Scene Builder.
-У меня есть одно поле со списком для выбора размера шрифта (id - размер)
-У меня есть одно поле со списком для выбора семейства шрифтов (id - шрифт)селектор)
-У меня есть метка (id - передняя метка)
Задача № 1: Когда я нажимаю на Combobox с выпадающим меню.Выпадающий список появляется только через секунду.Кажется, что он работает медленно
Проблема № 2: Когда я нажимаю на выпадающий список с семейством шрифтов и выбираю какой-то шрифт, он не применяется к метке, ноСемейство шрифтов применяется, когда я нажимаю на поле со списком и выбираю шрифт во второй раз.В этом случае я должен выбрать шрифт два раза подряд, чтобы применить шрифт к моему ярлыку
Задача № 3 (Основная проблема): У меня естьконфликт комбобоксов.Когда я выбираю семейство шрифтов, оно применяется к метке, но когда я выбираю размер шрифта из другого списка, также применяется размер комбинированного списка, но после этого семейство шрифтов метки становится стандартным.Такая же ситуация возникает, когда я выбираю размер шрифта, а затем выбираю семейство шрифтов из другого комбинированного списка.
Кажется, что только один комбинированный список может быть применен к метке.
Какрешить эти проблемы?
* Весь код находится в контроллере
* Проблема № 3 является изначальной.
Видео
@FXML private ComboBox<String> fontSelector;
@FXML private ComboBox<Integer> size;
@FXML private Label fontLabel;
//create array of font sizes
ObservableList<Integer> fontSizes = FXCollections.observableArrayList(8,
10, 11, 12, 14, 16, 18, 20, 24, 30, 36, 40, 48, 60, 72);
//get fonts from system
ObservableList<String> fonts =
FXCollections.observableArrayList(Font.getFamilies());
//getting Controller variables and methods through Context class
Controller cont = Context.getInstance().getController();
@Override
public void initialize(URL location, ResourceBundle resources) {
//register FontController in Context Class
Context.getInstance().setFontController(this);
//bind text from textfield to label
fontLabel.textProperty().bind(fontTextfield.textProperty());
//show fonts' actual look in combobox list
fontSelector.setCellFactory((ListView<String> listView) -> {
final ListCell<String> cell = new ListCell<>(){
@Override
public void updateItem(String item, boolean empty) {
super.updateItem(item, empty);
if (item != null) {
setText(item);
setFont(new Font(item, 14));
}
}
};
return cell;
});
fontSelector.setItems(fonts);
size.setItems(fontSizes);
size.setOnAction(e -> updateFontSize());
}
Метод, который применяет размер шрифта к метке из выпадающего списка
private void updateFontSize() {
fontLabel.setFont(Font.font(size.getValue()));
}
Метод, который применяет семейство шрифтов из выпадающего списка к метке
public void changeLabel(ActionEvent event) {
fontSelector.getSelectionModel().selectedItemProperty().addListener((obs,
oldValue, newValue) -> fontLabel.setFont(Font.font(newValue,
FontWeight.NORMAL, 35)));
}
РЕДАКТИРОВАТЬ:
Я предполагаю, что здесь возникает конфликт со списком:
fontSelector.getSelectionModel().selectedItemProperty().addListener((obs,
oldValue, newValue) -> fontLabel.setFont(Font.font(newValue,
FontWeight.NORMAL, 35)));
Как реорганизовать эту строку кода, чтобы она работала, но без конкретного размера шрифта после FontWeight. Нормально в скобках?