JAVA在表格中显示滚动条并根据value动态变色求教

zjhchangsha 2012-10-17 10:03:31
才研究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;
}
}

----------------------------------------
只要一最小化或鼠标移到其他控件上,所有的单元格全部变为红色,而不是当时根据各自的值改变的了。


问题出在哪 ? 我要怎么改进? 请高手帮忙


...全文
126 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

50,504

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧