我最终使用Eng的方法在JList和JFileChooser的JComboBox上定制了选择颜色。 Fouad建议here
public void customizeJFileChooser(Container c)
{
Component[] cmps = c.getComponents();
for (Component cmp : cmps)
{
if (cmp instanceof JList)
{
((JList)cmp).setSelectionBackground(new Color(164,164,164));
}
if (cmp instanceof JComboBox)
{
((JComboBox)cmp).setRenderer(new DefaultListCellRenderer() {
public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
Component comp = super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
if (isSelected)
comp.setBackground(new Color(164,164,164));
return comp;
}
});
}
if (cmp instanceof Container)
{
customizeJFileChooser((Container) cmp);
}
}
}
非常适合颜色,但是......现在我对FileFilter名称有疑问,如上所示:
如果我不调用customizeJFileChooser,它的名称是正确的,所以它必须是该方法的问题。有什么帮助吗?
答案 0 :(得分:2)
ListCellRenderer很可能不仅仅是一个DefaultListCellRenderer,而是一个派生类。 因此,解决方案是获取原始并包装它,而不是替换它。
if (cmp instanceof JComboBox)
{
((JComboBox)cmp).setRenderer(new DefaultListCellRenderer() {
private ListCellRenderer superLCR = ((JComboBox)cmp).getRenderer();
public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
Component comp = superLCR.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
if (isSelected)
comp.setBackground(new Color(164,164,164));
return comp;
}
});
}