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经常出错。不知道还是不是政治问题。