JTable中cell的背景色需要根据数据库中不同值设置不同的背景色,我的做法如下:
table.getColumn(bundleValuesCheck("LIST.SEVERITY")).setCellRenderer(new DefaultTableCellRenderer(){
       public Component getTableCellRendererComponent(JTable tblDataTable,
       Object value,
       boolean isSelected,
       boolean hasFocus,
       int row,
       int column) {
        JLabel ret=(JLabel)super.getTableCellRendererComponent(tblDataTable,value,isSelected,hasFocus,row,column);
        ret.setHorizontalAlignment(javax.swing.SwingConstants.RIGHT);
                    
         if(severityStatus == 1) {
         ret.setBackground(Color.red);
         } else if(severityStatus == 2) {
         ret.setBackground(Color.black);
         }
                    
        return ret;
       }
      });
但是每次增加一条数据后,整列的背景色又都被改变,不知道是什么原因?或是谁有更好的方法呀?谢谢了!
severityStatus为数据库中的值. 

解决方案 »

  1.   

    package util.gui.table;import javax.swing.table.*;
    import javax.swing.*;
    import java.awt.*;public class AlignTableCellRenderer extends DefaultTableCellRenderer
    {
    public AlignTableCellRenderer( int align , Color back , Color fore )
    {
    super();
    this.setHorizontalAlignment( align );
    if( back != null )
        {
    this.setBackground( back );    
        }
        if( fore != null )
        {
        this.setForeground( fore );
        }
    }public void setValue( Object value )
    {
    super.setValue( value );
    }
    }
      

  2.   

    应用这个类:
    TableColumnModel tcm = scribeTable.getColumnModel();DefaultTableCellRenderer rendere = new AlignTableCellRenderer( JLabel.CENTER , new Color( 206 , 207 , 255 ) , null );tcm.getColumn( 0 ).setCellRenderer( rendere );
      

  3.   

    to vssivl(克斯):你的方法使用后效果和我的一样呀,还是会改变整列的颜色.
    我的代码如下:
            if (severityStatus == 1) {
                            rendere = new AlignTableCellRenderer(JLabel.LEFT, Color.green, null);
                            tcm.getColumn( 0 ).setCellRenderer(rendere);
            } else if (severityStatus == 2) {
                            rendere = new AlignTableCellRenderer(JLabel.LEFT, Color.red, null);
                            tcm.getColumn( 0 ).setCellRenderer(rendere);
            } else {        }
    我的数据是一行一行加入Table的,每一行的第一列都用一个severityStatus判断并且置颜色.
      

  4.   

    设置JTable指定单元格的颜色
      重载的TableModel里的getValueAt(int,int)方法改了一下:
       /**取得指定位置的值*/ 
      public Object getValueAt(int rowIndex, int columnIndex) { 
       return "<html><font color=red>"+rowIndex*columnIndex+"</font></html>"; 
     }
      

  5.   

    public Component getTableCellRendererComponent(JTable tblDataTable,Object value,boolean isSelected,boolean hasFocus,int row,int column) {
            JLabel ret=(JLabel)super.getTableCellRendererComponent(tblDataTable,value,isSelected,hasFocus,row,column);
            ret.setHorizontalAlignment(javax.swing.SwingConstants.RIGHT);
                        
             if(severityStatus == 1) {
             ret.setBackground(Color.red);
             } else if(severityStatus == 2) {
             ret.setBackground(Color.black);
             }
                        
            return ret;
           }
    楼主,不管你的代码怎么写,这里面有2个参数int row,int column
    判断以下就可以了
    比如:
    if(row == 0 && column == 0) {
      if(severityStatus == 1) {
          ret.setBackground(Color.red);
      } else if(severityStatus == 2) {
          ret.setBackground(Color.black);
      }
    }
      

  6.   

    to laughsmile(海边的星空):
    我的运行环境是HP solaris
      

  7.   

    to zhaohao19853(小人物):
    你说的,我试过了,当表格加入数据时还是会变成整列都变成同一颜色.