swing jtree 生成的树中,在叶节点可以设置图片,我在想,怎样让这个叶子节点上的图片可以抖动哦,像QQ一样setLeafIcon(ii2); //设置叶子节点图片我希望这个图片可以在适当的时候抖动起来,当然了,不是每个叶子节点都抖动哦,我希望达到qq的效果一样,请问怎么做哦,谢谢

解决方案 »

  1.   

    使用线程不停的调用setLeafIcon(ii2); 里面使用几张不同的图片,在图片上使用视觉欺骗达到抖动效果,就像gif图一样。
      

  2.   

    不行就自己实现JTree的cellRenderer吧,这个是万能的。
      

  3.   

    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
    import javax.swing.tree.*;public class Test {
    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);
    Timer timer = new Timer(500, new ActionListener() {
    public void actionPerformed(ActionEvent event) {
    isHidden = !isHidden;
    tree.updateUI();
    }
    });
    timer.start();
    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);
    }
    }
    }
    }楼主参考一下,大概就是这么让节点闪动的,要做得跟真的QQ一样,还是要费不少劲的。