我有这门课:
@SuppressWarnings("serial")
private class DataCellRenderer extends JLabel implements ListCellRenderer
{
public DataCellRenderer()
{
setHorizontalAlignment(SwingConstants.RIGHT);
}
@Override
public Component getListCellRendererComponent(
JList list,
Object value,
int index,
boolean isSelected,
boolean cellHasFocus)
{
if(isSelected)
setBackground(Color.red);
setText(" " + value.toString());
return this;
}
}
问题是当我在 JList 中选择一个单元格时,我的背景不会变成红色。 setText 部分有效,但我不明白为什么它不会改变单元格的背景颜色。大家有什么想法吗,谢谢!
主要问题是默认情况下标签是不透明的,因此您需要使标签不透明才能绘制背景。
但您不需要为此创建自定义渲染器。默认渲染器是不透明的。您需要做的就是设置列表的选择背景属性:
list.setSelectionBackground(Color.RED);
如果您尝试创建一个渲染器来右对齐文本,那么您只需在默认渲染器上设置一个属性即可:
DefaultListCellRenderer renderer = (DefaultListCellRenderer)list.getCellRenderer();
renderer.setHorizontalAlignment(SwingConstants.RIGHT);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)