我正在尝试创建一个更改行背景的TableCellRenderer
。我正在覆盖prepareRenderer
,它会在选择时更改行的背景,但是一旦我更改选择,默认背景颜色(白色)将设置为上一个选定行,而较新的行将获得背景颜色(浅灰色)
这是我的代码:
final JTable table = new JTable(model) { @Override public Component prepareRenderer(TableCellRenderer renderer,int row,int column) { Component comp=super.prepareRenderer(renderer,row, column); int modelRow=convertRowIndexToModel(row); if(!isRowSelected(modelRow)) comp.setBackground(Color.WHITE); else comp.setBackground(Color.LIGHT_GRAY); return comp; } };
我的输出屏幕:
我想这样做:
答案 0 :(得分:1)
试试这个:
table.setDefaultRenderer(Object.class, new TableCellRenderer(){
private DefaultTableCellRenderer DEFAULT_RENDERER = new DefaultTableCellRenderer();
@Override
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
Component c = DEFAULT_RENDERER.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
//table.setBackground(Color.YELLOW);
//table.setSelectionBackground(Color.YELLOW);
if(isSelected){
c.setBackground(Color.YELLOW);
}else{
if (row%2 == 0){
c.setBackground(Color.WHITE);
}
else {
c.setBackground(Color.LIGHT_GRAY);
} }
return c;
}
});
答案 1 :(得分:1)
根据您的要求,您可以执行以下操作:
在你的模型中保留一个隐藏的标志值列。假设您的隐藏列是5列,您可以按如下方式编码:
final JTable table = new JTable(model)
{
@Override
public Component prepareRenderer(TableCellRenderer renderer,int row,int column)
{
Component comp=super.prepareRenderer(renderer,row, column);
int modelRow=convertRowIndexToModel(row);
if((Boolean)getValueAt(row,5))
comp.setBackground(Color.LIGHT_GRAY);
else
comp.setBackground(Color.WHITE);
return comp;
}
};
您的旗帜值包含布尔对象。