求实现闪烁的效果

twinsv 2005-08-31 05:01:49
请问高手:
如何 写
我想jtree里的文字,实现定时改变颜色,有闪烁的效果
...全文
88 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
congliu 2005-08-31
  • 打赏
  • 举报
回复
运行了,果然行,学习楼上
gtlang78 2005-08-31
  • 打赏
  • 举报
回复
import java.awt.BorderLayout;
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);
}
}

62,615

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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