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);
}
}
}
swing jtree实现叶子节点闪动效果类似于QQ好友列表
最新推荐文章于 2018-10-11 23:45:25 发布