现在的位置: 首页 > 综合 > 正文

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

2018年01月30日 ⁄ 综合 ⁄ 共 2729字 ⁄ 字号 评论关闭
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); 
  }
  }
} 

抱歉!评论已关闭.