您的位置:首页 > 其它

swing jtree实现叶子节点闪动效果类似于QQ好友列表

2013-11-21 16:57 411 查看
package test;

import java.awt.Component;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.Icon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTree;
import javax.swing.Timer;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeCellRenderer;

public class JTreeTest {
private static boolean isHidden;
public static void main(String[] args) {
JFrame  frame = new JFrame();
frame.setSize(800, 600);
DefaultMutableTreeNode root = new DefaultMutableTreeNode("根节点");
DefaultMutableTreeNode node1 = new DefaultMutableTreeNode("节点1");
DefaultMutableTreeNode node2 = new DefaultMutableTreeNode("节点2");
final JTree tree = new JTree(root);
tree.setCellRenderer(new MyCellRenderer());
root.add(node1);
root.add(node2);
tree.expandRow(0);
frame.add(tree);
final Timer timer = new Timer(500, new ActionListener() {
public void actionPerformed(ActionEvent event) {
isHidden = !isHidden;
tree.updateUI();
}
});
timer.start();
tree.addTreeSelectionListener(new javax.swing.event.TreeSelectionListener() {
public void valueChanged(javax.swing.event.TreeSelectionEvent evt) {
DefaultMutableTreeNode node = (DefaultMutableTreeNode)tree.getLastSelectedPathComponent();
String name=node.toString();

if(node.isLeaf()){
if(name.equals("节点1")){
timer.stop();
tree.setCellRenderer(new MyRenderer());
}
}
}
});
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}

private static class MyCellRenderer extends DefaultTreeCellRenderer {
@Override
public Component getTreeCellRendererComponent(JTree tree, Object value, boolean selected,
boolean expanded, boolean leaf, int row, boolean hasFocus) {
leafIcon = getLeafIcon();
if ("节点1".equals(value.toString()) && !isHidden) {
Component renderer = super.getTreeCellRendererComponent(tree, "", selected, expanded, leaf, row, hasFocus);
if (renderer instanceof JLabel) {
JLabel label = (JLabel)renderer;
Icon icon = label.getIcon();
Dimension size = label.getPreferredSize();
size.width = 100;
size.height = icon.getIconHeight();
label.setPreferredSize(size);
label.setIcon(null);
}
return renderer;
} else {

return super.getTreeCellRendererComponent(tree, value, selected, expanded, leaf, row, hasFocus);
}
}
}
private static class MyRenderer extends DefaultTreeCellRenderer {
@Override
public Component getTreeCellRendererComponent(JTree tree, Object value, boolean selected,
boolean expanded, boolean leaf, int row, boolean hasFocus) {
leafIcon = getLeafIcon();
if ("节点1".equals(value.toString()) && !isHidden) {
Component renderer = super.getTreeCellRendererComponent(tree, "", selected, expanded, leaf, row, hasFocus);

JLabel label = (JLabel)renderer;
Icon icon = label.getIcon();
Dimension size = label.getPreferredSize();
size.width = 100;
size.height = icon.getIconHeight();
label.setPreferredSize(size);
label.setIcon(null);
}
return super.getTreeCellRendererComponent(tree, value, selected, expanded, leaf, row, hasFocus);
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: