如果你使用了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