JAVA在表格中显示滚动条并根据value动态变色求教
才研究SWING,在表中的一列用滚动条 ,并且进度条要根据我设置的值来显示不同的颜色,实现是可以了,但是鼠标一移动到其他的panel或最小化窗口再还原,这些进度条的颜色就全部变为最后的设置值了。代码如下
----调的地方-------------------------------------------------
......
ServerMonCellRenderer vpic = new ServerMonCellRenderer(jTable1,0,0);
DefaultTableColumnModel dcmAll = (DefaultTableColumnModel) jTable1.getColumnModel();
dcmAll.getColumn(4).setCellRenderer(vpic);
.......
-----进度条的定义-----------------------------------------
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package neusoft.os;
import java.awt.Color;
import java.awt.Component;
import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JOptionPane;
import javax.swing.JProgressBar;
import javax.swing.JTable;
import javax.swing.UIManager;
import javax.swing.plaf.ColorUIResource;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.TableCellRenderer;
/**
*
* 根据单元格的值显示不同的颜色
*/
public class ServerMonCellRenderer extends DefaultTableCellRenderer {
JTable jtable;
private JProgressBar progress;
public ServerMonCellRenderer(JTable jtable, int row, int column) {
}
public Component getTableCellRendererComponent(
JTable table, Object value,
boolean isSelected, boolean hasFocus,
int row, int column) {
Component c = super.getTableCellRendererComponent(table, value,
isSelected, hasFocus, row, column);
if (column >= 4) { //&& (value.getClass().getName().equals("java.lang.Double")))
int val = ((Double) value).intValue() ;
try {
for (UIManager.LookAndFeelInfo laf : UIManager.getInstalledLookAndFeels()) {
if ("Nimbus".equals(laf.getName())) {
UIManager.setLookAndFeel(laf.getClassName());
ColorUIResource colorResource = null;
if (val>=90)
colorResource = new ColorUIResource(Color.green.darker().darker());
else if (val>=80 && val <90)
colorResource = new ColorUIResource(Color.blue.darker().darker());
else if (val>=40 && val <70)
colorResource = new ColorUIResource(Color.orange.darker().darker());
else if (val>=20 && val <40)
colorResource = new ColorUIResource(Color.yellow.darker().darker());
else if (val>=0 && val <20)
colorResource = new ColorUIResource(Color.red);//.darker().darker());
UIManager.getLookAndFeelDefaults().put("nimbusOrange", colorResource);
// UIManager.getLookAndFeelDefaults().put("nimbusSelection", Color.green);
// UIManager.getLookAndFeelDefaults().put("ProgressBar[Enabled].foregroundPainter",Color.green);
}
}
} catch (Exception e) {
e.printStackTrace();
}
//////////////////////////////////////////////
progress = getProgress();
progress.setMinimum(0);
progress.setMaximum(100);
progress.setValue(0);
progress.setStringPainted(true);
//////////////////////////////////////////////
progress.setValue(val);
//////////////////////////////////////////////
return progress;
} else {
this.setBorder(javax.swing.BorderFactory.createBevelBorder(javax.swing.border.BevelBorder.RAISED));
return c;
}
}
private JProgressBar getProgress() {
if (progress == null) {
progress = new JProgressBar();
}
return progress;
}
}
----------------------------------------
只要一最小化或鼠标移到其他控件上,所有的单元格全部变为红色,而不是当时根据各自的值改变的了。
问题出在哪 ? 我要怎么改进? 请高手帮忙