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