1

我有一个JComboBox用于选择Font。为了在用户进行选择时允许预览字体,我编写了一个自定义ListCellRenderer

public class FontListCellRenderer implements ListCellRenderer<String>{
    private ListCellRenderer<Object> defaultRenderer;
    @SuppressWarnings("unchecked")
    public FontListCellRenderer(){
        this.defaultRenderer = (ListCellRenderer<Object>) new JComboBox<Object>().getRenderer();
    }

    @Override
    public Component getListCellRendererComponent(JList<? extends String> list,
            String value, int index, boolean isSelected, boolean cellHasFocus) {
        Component returnVal = this.defaultRenderer.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
        returnVal.setFont(new Font((String) value, returnVal.getFont().getStyle(), returnVal.getFont().getSize()));
        return returnVal;
    }
}

然而,在使用这个时,我注意到在用这个ListCellRenderer初始化我的JComboBox时性能受到了极大的影响。经过进一步调查,我发现当我使用setSelectedItem()为我的项目设置默认值时,我的ListCellRenderer被许多字体调用。

现在我已经更改了我的代码以最后设置ListCellRenderer但我想知道为什么会发生这种情况?即使我的项目在屏幕上(还没有),ListCellRenderer也不会呈现所选项目,因为它在JComboBox中闲置显示。即使是这样,为什么非选定项目会调用它?

4

0 回答 0