如果你使用了Synth 對(duì)于JList,JComboBox來說,在自定義Render的時(shí)候, 如果繼承自DefaultListCellRender 是不能同時(shí)起到期望的效果的,不僅僅是DefaultListCellRender ,所有以Default開頭的Render都是這樣,其具體原因是因?yàn)镾ynth 需要使用其內(nèi)部定義的Render,具體可以參考SynthComboBoxUI 或者相似的一個(gè)Synth 的UI代理。
所以當(dāng)你使用了DefaultListCellRender 之后,在xml文件中定義的效果是不會(huì)生效的,目前可以通過如下的折中方式來達(dá)到目的:
// 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