java—为什么在使用setselecteditem()时调用listcellrenderer?

tvmytwxo  于 2021-07-09  发布在  Java
关注(0)|答案(0)|浏览(216)

我有一个jcombobox,用于选择字体。为了在用户进行选择时预览字体,我编写了一个自定义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中显示的那样呈现选中的项目。即使是,为什么要为未选中的项目调用它?

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题