在运行时为JTable的特定行设置背景颜色

时间:2014-03-20 06:16:15

标签: java swing colors jtable

我正在使用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的名称。

2 个答案:

答案 0 :(得分:2)

  

如何在运行时设置特定行的背景颜色?

使用表格单元格渲染器。有关详细信息,请参阅How to Use Tables: Using Custom Renderers

答案 1 :(得分:1)

在某些时候,您需要告诉表格内容已经以某种方式发生了变化。

如果您使用基于TableModel的{​​{1}},则可以使用AbstractTableModel个事件,例如fireTableXxx。这将告知fireTableCellUpdate(row, col)模型已更改并使其重新绘制表格...

您可以考虑使用JTable,因为这会导致fireTablesRowsUpdated更新整行。

如果您在模型上使用JTable来更改值,则需要调用相应的事件触发器...

更新了正在运行的示例

所以,基于你setValueAt渲染器,我做了这个例子,它运行正常......

MyCellRenderer

现在的问题是,你有什么不同的做法?