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

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); 
  }
  }
} 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值