1.swing的JTree结点图标能不能设置为动画图标,如果能怎么实现?
2.JTable里面的某一列数据想显示为图标,怎么做?最好详细说说实现的步骤

解决方案 »

  1.   

    1.swing的JTree结点图标能不能设置为动画图标,如果能怎么实现?
    把要显示的图形类型模式改成gif的就可以了。2.JTable里面的某一列数据想显示为图标,怎么做?
    要用多层嵌套。
      

  2.   

    多层嵌套,怎么做,在JTable的单元格里房icon吗
      

  3.   

    2.JTable里面的某一列数据想显示为图标,怎么做?
    class MyRender extends JLabel implements TableCellRenderer
    {
       Icon icon;
       public MyRender(Icon icon)
       {
          this.icon = icon;
       }
       public component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) 
    {
        //假设将第一列设为图标
       if(column == 0)
       {
          this.setIcon(icon);
        }
        return this;
    }}
    ...
    ...
    jTable.setDefaultRenderer(columnClass,new MyRender(icon))
      

  4.   

    import java.awt.BorderLayout;
    import java.awt.Component;
    import java.awt.Image;
    import java.awt.Rectangle;
    import java.awt.event.WindowAdapter;
    import java.awt.event.WindowEvent;
    import java.awt.image.ImageObserver;
    import java.util.Enumeration;
    import java.util.Hashtable;
    import java.util.Vector;import javax.swing.Icon;
    import javax.swing.ImageIcon;
    import javax.swing.JFrame;
    import javax.swing.JScrollPane;
    import javax.swing.JTree;
    import javax.swing.UIManager;
    import javax.swing.tree.DefaultMutableTreeNode;
    import javax.swing.tree.DefaultTreeCellRenderer;
    import javax.swing.tree.DefaultTreeModel;
    import javax.swing.tree.TreeNode;
    import javax.swing.tree.TreePath;/**
     * @version 1.0 06/20/99
     */
    public class AnimatedIconTreeExample2 extends JFrame {
      final static String CAT = "cat";  final static String DOG = "dog";  public AnimatedIconTreeExample2() {
        super("AnimatedIconTreeExample2");
        String[] strs = { "CARNIVORA", // 0
            "Felidae", // 1
            "Acinonyx jutatus  (cheetah)", // 2
            "Panthera leo  (lion)", // 3
            "Canidae", // 4
            "Canis lupus  (wolf)", // 5
            "Lycaon pictus  (lycaon)", // 6
            "Vulpes Vulpes  (fox)" }; // 7    IconNode[] nodes = new IconNode[strs.length];
        for (int i = 0; i < strs.length; i++) {
          nodes[i] = new IconNode(strs[i]);
        }
        nodes[0].add(nodes[1]);
        nodes[0].add(nodes[4]);
        nodes[1].add(nodes[2]);
        nodes[1].add(nodes[3]);
        nodes[4].add(nodes[5]);
        nodes[4].add(nodes[6]);
        nodes[4].add(nodes[7]);    // If you want to share the ImageIcon with a node.    nodes[2].setIconName(CAT);
        nodes[3].setIconName(CAT);
        nodes[5].setIconName(DOG);
        nodes[6].setIconName(DOG);
        nodes[7].setIconName(DOG);    Hashtable icons = new Hashtable();
        icons.put(CAT, new ImageIcon("Java2sAnimation.gif"));
        icons.put(DOG, new ImageIcon("Java2sAnimation.gif"));    JTree tree = new JTree(nodes[0]);
        tree.putClientProperty("JTree.icons", icons);
        tree.setCellRenderer(new IconNodeRenderer());
        setImageObserver(tree, nodes, icons);    JScrollPane sp = new JScrollPane(tree);
        getContentPane().add(sp, BorderLayout.CENTER);
      }  private void setImageObserver(JTree tree, IconNode[] nodes, Hashtable icons) {
        Hashtable observers = new Hashtable();    for (int i = 0; i < nodes.length; i++) {
          ImageIcon icon = (ImageIcon) nodes[i].getIcon();
          if (icon != null) {
            Vector repaintNodes = new Vector();
            repaintNodes.addElement(nodes[i]);
            icon
                .setImageObserver(new NodeImageObserver(tree,
                    repaintNodes));
          } else {
            String iconName = nodes[i].getIconName();
            if (iconName != null) {
              Vector repaintNodes = (Vector) observers.get(iconName);
              if (repaintNodes == null) {
                repaintNodes = new Vector();
                observers.put(iconName, repaintNodes);
              }
              repaintNodes.addElement(nodes[i]);
            }
          }
        }    Enumeration e = observers.keys();
        while (e.hasMoreElements()) {
          String iconName = (String) e.nextElement();
          Vector repaintNodes = (Vector) observers.get(iconName);
          ImageIcon icon = (ImageIcon) icons.get(iconName);
          icon.setImageObserver(new NodeImageObserver(tree, repaintNodes));
        }
      }  class NodeImageObserver implements ImageObserver {
        JTree tree;    DefaultTreeModel model;    Vector nodes;    NodeImageObserver(JTree tree, Vector nodes) {
          this.tree = tree;
          this.model = (DefaultTreeModel) tree.getModel();
          this.nodes = nodes;
        }    public boolean imageUpdate(Image img, int flags, int x, int y, int w,
            int h) {
          if ((flags & (FRAMEBITS | ALLBITS)) != 0) {
            Enumeration e = nodes.elements();
            while (e.hasMoreElements()) {
              TreeNode node = (TreeNode) e.nextElement();
              TreePath path = new TreePath(model.getPathToRoot(node));
              Rectangle rect = tree.getPathBounds(path);
              if (rect != null) {
                tree.repaint(rect);
              }
            }
          }
          return (flags & (ALLBITS | ABORT)) == 0;
        }
      }  public static void main(String args[]) {
        try {
            UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
        } catch (Exception evt) {}
      
        AnimatedIconTreeExample2 frame = new AnimatedIconTreeExample2();
        frame.addWindowListener(new WindowAdapter() {
          public void windowClosing(WindowEvent e) {
            System.exit(0);
          }
        });
        frame.setSize(280, 200);
        frame.setVisible(true);
      }
    }class IconNodeRenderer extends DefaultTreeCellRenderer {  public Component getTreeCellRendererComponent(JTree tree, Object value,
          boolean sel, boolean expanded, boolean leaf, int row,
          boolean hasFocus) {    super.getTreeCellRendererComponent(tree, value, sel, expanded, leaf,
            row, hasFocus);    Icon icon = ((IconNode) value).getIcon();    if (icon == null) {
          Hashtable icons = (Hashtable) tree.getClientProperty("JTree.icons");
          String name = ((IconNode) value).getIconName();
          if ((icons != null) && (name != null)) {
            icon = (Icon) icons.get(name);
            if (icon != null) {
              setIcon(icon);
            }
          }
        } else {
          setIcon(icon);
        }    return this;
      }
    }class IconNode extends DefaultMutableTreeNode {  protected Icon icon;  protected String iconName;  public IconNode() {
        this(null);
      }  public IconNode(Object userObject) {
        this(userObject, true, null);
      }  public IconNode(Object userObject, boolean allowsChildren, Icon icon) {
        super(userObject, allowsChildren);
        this.icon = icon;
      }  public void setIcon(Icon icon) {
        this.icon = icon;
      }  public Icon getIcon() {
        return icon;
      }  public String getIconName() {
        if (iconName != null) {
          return iconName;
        } else {
          String str = userObject.toString();
          int index = str.lastIndexOf(".");
          if (index != -1) {
            return str.substring(++index);
          } else {
            return null;
          }
        }
      }  public void setIconName(String name) {
        iconName = name;
      }}gif动画做Jtree结点的图标,被我找到了,放上来。
      

  5.   

    class MyRender extends JLabel implements TableCellRenderer
    {
       Icon icon;
       public MyRender(Icon icon)
       {
          this.icon = icon;
       }
       public component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) 
    {
        //假设将第一列设为图标
       if(column == 0)
       {
          this.setIcon(icon);
        }
        return this;
    }}
    ...
    ...
    jTable.setDefaultRenderer(columnClass,new MyRender(icon))
    用了这个,不仅第一列有图标,整行都带图标了
      

  6.   

    class MyRender implements TableCellRenderer
    {
       Icon icon;
       public MyRender(Icon icon)
       {
          this.icon = icon;
       }
       public component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) 
    {
        //假设将第一列设为图标
       JLabel ret = new JLabel();
       ret.setText(value.toString());
       if(column == 0)
       {
          ret.setIcon(icon);
        }
        return ret;
    }}
    ...
    ...
    jTable.setDefaultRenderer(columnClass,new MyRender(icon))
    这样应该没有问题了。