我正在使用netbeans IDE7.4,我在运行时向JTable
添加行,现在我想为特定行设置背景颜色。
现在的问题是,当该行的值发生变化时,该特定行的颜色不会改变,当我向上或向下滚动表格时,会应用更改。
如何在运行时刷新表?如何在运行时设置特定行的背景颜色?
这是我用于着色特定行的渲染器类:
public class MyCellRenderer extends javax.swing.table.DefaultTableCellRenderer
{
public java.awt.Component getTableCellRendererComponent(javax.swing.JTable table, java.lang.Object value, boolean isSelected, boolean hasFocus, int row, int column)
{
final java.awt.Component cellComponent = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
Object val=table.getValueAt(row, 2);
String sval=val.toString();
sval=sval.replaceAll(":","");
int ival=Integer.parseInt(sval);
if(ival==0)
{
cellComponent.setForeground(Color.black);
cellComponent.setBackground(Color.red);
}
else
{
cellComponent.setBackground(Color.white);
cellComponent.setForeground(Color.black);
}
if (isSelected)
{
cellComponent.setForeground(table.getSelectionForeground()); cellComponent.setBackground(table.getSelectionBackground());
}
return cellComponent;
}
}
并且像这样分配给jtable:
newViewTable.setDefaultRenderer(Object.class,new MyCellRenderer());
newViewTable是JTable的名称。
答案 0 :(得分:2)
如何在运行时设置特定行的背景颜色?
使用表格单元格渲染器。有关详细信息,请参阅How to Use Tables: Using Custom Renderers。
答案 1 :(得分:1)
在某些时候,您需要告诉表格内容已经以某种方式发生了变化。
如果您使用基于TableModel
的{{1}},则可以使用AbstractTableModel
个事件,例如fireTableXxx
。这将告知fireTableCellUpdate(row, col)
模型已更改并使其重新绘制表格...
您可以考虑使用JTable
,因为这会导致fireTablesRowsUpdated
更新整行。
如果您在模型上使用JTable
来更改值,则需要调用相应的事件触发器...
更新了正在运行的示例
所以,基于你setValueAt
渲染器,我做了这个例子,它运行正常......
MyCellRenderer
现在的问题是,你有什么不同的做法?