请问高手:
如何 写
我想jtree里的文字,实现定时改变颜色,有闪烁的效果
如何 写
我想jtree里的文字,实现定时改变颜色,有闪烁的效果
解决方案 »
- 请教
- 帮忙解释一下红色部分的代码
- compareTo与equals方法
- JAVA的一些小问题
- 我在Java2 从入门到精通中看到checkMod()方法,但是报错,不知道什么原因?
- 关于servlet输出中文奇怪的问题,高手们帮忙阿~~急~~
- 求救有关rose生成java代码的问题
- 如果一段字符串中有太多敏感字符又不能一一进行转义怎么办?
- 那里有最新版本的Jbuilder FOR WINDOWS下载啊,请告诉我,谢谢,100分赠送!
- 请教java的分布式应用,我建立好的server,但是只要执行到server.accept()就没反映了,窗口上的其它按钮什么的都不能用了!
- 如何获得控件的值?
- [200分]关于和OutputStream类中的"input"和"output"的含义该如何解释,什么时候该用InputStream,什么时候用outputStream;
import java.awt.Color;
import java.awt.Component;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTree;
import javax.swing.UIManager;
import javax.swing.tree.DefaultTreeCellRenderer;
import javax.swing.tree.DefaultTreeModel;
import javax.swing.tree.TreeNode;public class BlinkNodeTree extends JTree {
private Map blinkNodeMap = new HashMap();
private Thread refreshThread = new BlinkThread();
private boolean flag = false; public BlinkNodeTree() {
setCellRenderer(new BlinkRenderer());
this.refreshThread.start();
} public class BlinkRenderer extends DefaultTreeCellRenderer {
public Component getTreeCellRendererComponent(
JTree tree, Object value, boolean sel, boolean expanded,
boolean leaf, int row, boolean hasFocus) { super.getTreeCellRendererComponent(
tree, value, sel, expanded, leaf, row, hasFocus); BlinkNode bc = (BlinkNode) blinkNodeMap.get(value);
if (bc != null) {
if (flag ) {
setForeground(bc.color1);
}
else {
setForeground(bc.color2);
}
}
return this;
}
} private static class BlinkNode {
Color color1, color2;
long blinkCount;
public BlinkNode(int blinkCount, Color color1, Color color2) {
this.blinkCount = (long)blinkCount*2;
this.color1 = color1;
this.color2 = color2;
}
}
public void blink(TreeNode node, int blinkCount, Color color1, Color color2) {
synchronized (blinkNodeMap) {
blinkNodeMap.put(node, new BlinkNode(blinkCount, color1, color2));
blinkNodeMap.notifyAll();
}
}
private class BlinkThread extends Thread {
public void run() {
while (true) {
synchronized (blinkNodeMap) {
while (blinkNodeMap.isEmpty()) {
try {
blinkNodeMap.wait();
} catch (InterruptedException e) {}
}
flag = ! flag;
Iterator iter = blinkNodeMap.entrySet().iterator();
while (iter.hasNext()) {
Map.Entry entry = (Map.Entry) iter.next();
TreeNode treeNode = (TreeNode) entry.getKey();
BlinkNode bc = (BlinkNode) entry.getValue();
bc.blinkCount--; if (bc.blinkCount <= 0) {
iter.remove();
}
}
repaint();
}
try {
sleep(500);
} catch (InterruptedException e) {
}
}
}
}
public static void main(String[] args) {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (Exception e) {
e.printStackTrace();
} BlinkNodeTree tree = new BlinkNodeTree();
DefaultTreeModel model = (DefaultTreeModel) tree.getModel();
TreeNode rootNode = (TreeNode) model.getRoot();
TreeNode node = rootNode.getChildAt(1);
tree.blink(rootNode, Integer.MAX_VALUE, Color.RED, Color.BLUE);
tree.blink(node, Integer.MAX_VALUE, Color.MAGENTA, null); JScrollPane sp = new JScrollPane(tree); JFrame f = new JFrame("BlinkTreeTest");
f.getContentPane().add(sp, BorderLayout.CENTER);
f.pack();
f.setLocationRelativeTo(null);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setVisible(true);
}
}