如果你使用了Synth 对于JList,JComboBox来说,在自定义Render的时候, 如果继承自DefaultListCellRender 是不能同时起到期望的效果的,不仅仅是DefaultListCellRender ,所有以Default开头的Render都是这样,其具体原因是因为Synth 需要使用其内部定义的Render,具体可以参考SynthComboBoxUI 或者相似的一个Synth 的UI代理。

所以当你使用了DefaultListCellRender 之后,在xml文件中定义的效果是不会生效的,目前可以通过如下的折中方式来达到目的:

// first get render from UI

final ListCellRenderer oldRender = jbCbx.getRenderer();


      jbCbx.setRenderer(new ListCellRenderer(){
                public Component getListCellRendererComponent(JList list,Object value, int index, boolean isSelected,boolean cellHasFocus) {
                 JLabel render = (JLabel) oldRender.getListCellRendererComponent(list, value, index, isSelected,cellHasFocus);
                    JBod jbod = (JBod)value;
                    render.setText(jbod.getName());
                    return render;
                }
            });

 

Reference: Don’t subclass DefautListCellRenderer for Swing’s Nimbus LAF