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为数据库中的值.
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为数据库中的值.
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 );
}
}
TableColumnModel tcm = scribeTable.getColumnModel();DefaultTableCellRenderer rendere = new AlignTableCellRenderer( JLabel.CENTER , new Color( 206 , 207 , 255 ) , null );tcm.getColumn( 0 ).setCellRenderer( rendere );
我的代码如下:
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判断并且置颜色.
重载的TableModel里的getValueAt(int,int)方法改了一下:
/**取得指定位置的值*/
public Object getValueAt(int rowIndex, int columnIndex) {
return "<html><font color=red>"+rowIndex*columnIndex+"</font></html>";
}
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);
}
}
我的运行环境是HP solaris
你说的,我试过了,当表格加入数据时还是会变成整列都变成同一颜色.