如何根据给定的条件更改JTable单元格颜色?

时间:2013-09-18 19:01:49

标签: java swing jtable

我正在填充JTable,如下所示......并且有一个VitalSign类可以设置和获取用户输入。如何根据条件更改JTable单元格颜色,例如,如果heartrate> 90,则JTable单元格必须为用户提供红色

   private void populateTable(){

        DefaultTableModel model =(DefaultTableModel) vitalSignJTable.getModel();
        model.setRowCount(0);

        for(VitalSign vs : vitalSignRecord.getVitalSignList() ){

            Object row[] =new Object[7];
            row[0]=vs;
            row[1]=vs.getAge();
            row[2]=vs.getRespRate();
            row[3]=vs.getHeartRate();
            row[4]=vs.getSystolicBp();
            row[5]=vs.getWeightLbs();
            row[6]=vs.getWeightKg();
            model.addRow(row);
        }
 }

1 个答案:

答案 0 :(得分:1)

作为第一步,我建议您查看此链接Using Custom Renderers

现在关于您的问题,您可以按照以下方式实施自己的TableCellRenderer(在此情况下扩展DefaultTableCellRenderer):

public class CustomCellRenderer extends DefaultTableCellRenderer {
    @Override
    public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
        if(column == 3 && ((Integer)value).intValue() > 90) {
            setBackground(isSelected ? Color.red : Color.red.brighter());                
        } else {
            setBackground(isSelected ? /* some color if selected*/ : /* some color if not */);
        }
        setForeground(isSelected ? Color.white : Color.black);
        setText(value != null ? value.toString() : "<null>");
        return this;
    }
}

然后在填充之前为您的表设置一个新的CustomCellRenderer

vitalSignJTable.setDefaultRenderer(Object.class, new CustomCellRenderer());