Я делаю выбор шрифта, используя JComboBox
и пользовательский ListCellRenderer
. Я хочу, чтобы JComboBox
отображал все доступные шрифты, причем каждое имя шрифта отображалось в своем собственном шрифте. В настоящее время я использую около 500 шрифтов.
Пример ListCellRenerer
, который обеспечивает эту функциональность:
private class ComboBoxRenderer extends JLabel implements ListCellRenderer {
private JLabel label = new JLabel("Test");
@Override
public Component getListCellRendererComponent(JList list, Object value,
int index, boolean isSelected, boolean cellHasFocus) {
Font tempFont = label.getFont();
setFont(new Font((String) value, tempFont.getStyle(),
tempFont.getSize()));
setText((String) value);
return this;
}
}
Проблема в том, что при использовании этого рендерера JComboBox
перестает отвечать на запросы во время выполнения программы. При первом нажатии на поле со списком, чтобы открыть список, для загрузки списка требуется несколько секунд. При втором щелчке сразу отображается список.
Если прокомментировать строку
setFont(new Font((String) value, tempFont.getStyle(),tempFont.getSize()));
, поле со списком работает нормально.
Как можно предотвратить эту невосприимчивость?
Font
объектов. Используется для кэшированияFont
иFontMetric
еще в 90-х. Вы можете создатьJLabel
для каждогоFont
. - person Tom Hawtin - tackline   schedule 05.05.2011if (isSelected){
илиcellHasFocus
- person mKorbel   schedule 05.05.2011