​http://inthirties.com:90/thread-1309-1-1.html​



一个监控server的程序,需要更加server的不同健康级别修改底色,这可难坏我这个以前做bs结构的人了。

在google里找了一下,一下是解决的最后方法
先定义个render处理器,在render里根据cell的datamodel来处理不同的颜色变化


引用:

DefaultTableCellRenderer tcr = new DefaultTableCellRenderer() {
public Component getTableCellRendererComponent(JTable table,
Object value, boolean isSelected, boolean hasFocus,
int row, int column) {
Component cell = super.getTableCellRendererComponent
(table, value, isSelected, hasFocus, row, column);

String svalue = (String)table.getModel().getValueAt(row, 2);
//实验代码
if(svalue!=null && svalue.equals("连接故障"))
{
cell.setBackground(Color.RED);
}
else
{
cell.setBackground(Color.WHITE);
}

return cell;
}
};

table.setDefaultRenderer(Object.class, tcr);




在listener里加入我们需要的datamodel的处理,


tableModel.fireTableDataChanged();这里是刷新row,否则的话,只有数据变化或者系统事件相关的cell变 颜色



引用:

if(serverinfo.getHost().equals(server) && serverinfo.getPort() == port)
{
try
{
int failCount = (tableModel.getValueAt(ind, 3) instanceof String)?1:((Integer)tableModel.getValueAt(ind, 3) + 1);
Date d = new Date();
Date start = String.valueOf(tableModel.getValueAt(ind, 5)).trim().length()==0?d:str2Date(String.valueOf(tableModel.getValueAt(ind, 5)));

tableModel.setValueAt("连接故障", ind, 2);
tableModel.setValueAt(failCount, ind, 3);
tableModel.setValueAt((d.getTime()-start.getTime())/1000, ind, 4);
//tableModel.setValueAt(failCount, ind, 5);
tableModel.setValueAt(formatTime(d), ind, 6);

tableModel.fireTableDataChanged();

//Toolkit.getDefaultToolkit().beep();

warningIndex.put(ind, true);
}
catch (Exception e) {
e.printStackTrace();
}
}




上面是基本的代码,后来根据需要具体了一些内容。



google离开,还是改不了使用google的习惯,杯具的是,访问google经常出错。不知道还是不是政治问题。