dic*_*c19 5 java swing renderer swingx jxtreetable
我把这个CustomCellRenderer类打算用于JXTreeTable和JXTable对象,因为我的项目中有很多这些.所以这个类实现TreeCellRenderer和TableCellRenderer接口:
public class CustomCellRenderer extends JLabel
implements TreeCellRenderer, TableCellRenderer {
@Override
public Component getTreeCellRendererComponent(JTree tree, Object value, boolean selected, boolean expanded, boolean leaf, int row, boolean hasFocus) {
setBackground(selected ? new Color(83,142,213) : Color.white);
setForeground(selected ? Color.white : Color.black);
//here is the icon setting code but it's irrelevant to my problem
setText(value != null ? value.toString() : "<null>");
return this;
}
@Override
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
setBackground(isSelected ? new Color(83,142,213) : Color.white);
setForeground(isSelected ? Color.white : Color.black);
setText(value != null ? value.toString() : "<null>");
return this;
}
}
Run Code Online (Sandbox Code Playgroud)
这是我设置渲染器的代码:
jXTreeTableConsumos.setDefaultRenderer(Object.class, new CustomCellRenderer());
jXTreeTableConsumos.setTreeCellRenderer(new CustomCellRenderer());
Run Code Online (Sandbox Code Playgroud)
当选择一行时,我期待背景和前景分别变成蓝色和白色.但是它只发生在树表格单元格(第一列),而只有前景发生变化,而背景仍然是白色,在同一个选定行的其他单元格中:

有人可以告诉我为什么细胞(不是树细胞)不改变它们的背景颜色?
感谢大家的意见和建议.我在JComponent#setBackground(Color bg)文档中找到了解决方案:
设置此组件的背景颜色.仅当组件不透明时才使用背景颜色,并且仅使用JComponent或ComponentUI实现的子类.JComponent的直接子类必须覆盖paintComponent才能使用此属性.
因为我CustomCellRenderer从我JLabel唯一需要做的事情是确保它是不透明的并且它的背景颜色将被绘制:
@Override
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
setOpaque(true);//adding this line I solved my problem
setBackground(isSelected ? new Color(83,142,213) : Color.white);
setForeground(isSelected ? Color.white : Color.black);
setText(value != null ? value.toString() : "<null>");
return this;
}
Run Code Online (Sandbox Code Playgroud)
