我正在填充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);
}
}
答案 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;
}
}
然后在填充 em>之前为您的表设置一个新的CustomCellRenderer
:
vitalSignJTable.setDefaultRenderer(Object.class, new CustomCellRenderer());