@postya

Как положить кастомные шрифты в combobox в JavaFX?

Есть лейбл с текстом и combobox в приложении. Когда кликаю на combobox выплывает список шрифтов. При клике на шрифт, шрифт текста лейбла изменяется на выбранный. На данный момент у меня combobox работает нормально, но там отображаются только шрифты, которые установлены в систему(WIndows/fonts) мне же надо,чтобы в combobox отображались только шрифты из папки, которая находится в папке программы.
Система - Windows 10

Как отобразить свои кастомные шрифты в combobox?

Если в combobox не возможно положить свои кастомные шрифты из папки программы, то можно ли изменить путь к системной папке со шрифтами?

@FXML  private ComboBox<Font> fontSelector;
@FXML  private Label fontLabel;

//get font family and size 
  private static Font getFont(Font font, Integer size) {
    return Font.font(font == null ? null : font.getFamily(), size == null ? -1d : size.doubleValue());
  }

//add font families to combboox
    fontSelector.getItems().addAll(Font.getFamilies().stream().map(name -> Font.font(name, 14)).toArray(Font[]::new));

// bind font based on size/family
    fontLabel.fontProperty()
            .bind(Bindings.createObjectBinding(() -> getFont(fontSelector.getValue(), size.getValue()),
                    fontSelector.valueProperty(), size.valueProperty()));

//display and render font families looks in combobox
    class FontListCell extends ListCell<Font> {
      @Override
      public void updateItem(Font item, boolean empty) {
        super.updateItem(item, empty);
        if (item != null) {
          setText(item.getFamily());
          setFont(item);
        } else {
          setText("");
          setFont(Font.font(12));
        }
      }
    }

    fontSelector.setCellFactory(lv -> new FontListCell());
    fontSelector.setButtonCell(new FontListCell());


Структура проекта:

5cf6786155b1a028702178.jpeg
  • Вопрос задан
  • 225 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы