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

来源:互联网 发布:js控制浏览器最小化 编辑:程序博客网 时间:2024/04/24 04:08
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);   }  }} 

原创粉丝点击