tree節點圖片

/* (swing1.1) */
//package jp.gr.java_conf.tame.swing.examples;

import java.util.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.tree.*;
import javax.swing.event.*;
import javax.swing.plaf.metal.*;

import jp.gr.java_conf.tame.swing.tree.*;
import jp.gr.java_conf.tame.swing.icon.*;

/**
 * @version 1.0 01/12/99
 */
public class IconNodeTreeExample extends JFrame {
  public IconNodeTreeExample() {
    super("IconNode TreeExample");
    
    String[] strs = {"swing home",  // 0
		     "platf",       // 1
		     "basic.txt",   // 2
		     "metal.c",     // 3
		     "metal.java",  // 4
		     "metal.html",  // 5
		     "Computer",    // 6
		     "A:",          // 7
		     "C:",          // 8
		     "D:"};         // 9
                                             
    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]);
    for (int i=2;i<=5;i++) nodes[1].add(nodes[i]);
    nodes[0].add(nodes[6]);
    for (int i=7;i<=9;i++) nodes[6].add(nodes[i]);
    
    //
    // set Icon directly
    //
    nodes[0].setIcon(MetalIconFactory.getFileChooserHomeFolderIcon());
     
    //
    // use JTree default Icon
    //
    // nodes[1]
    // nodes[2]
   
    //
    // set Icon by user Object
    //
    // nodes[3]
    // nodes[4]
    // nodes[5]
    
    //
    // set Icon by name
    //
    nodes[6].setIconName("computer");
    nodes[7].setIconName("floppyDrive");
    nodes[8].setIconName("hardDrive");
    nodes[9].setIconName("hardDrive");
    
    JTree tree = new JTree( nodes[0] );
    tree.putClientProperty("JTree.icons", makeIcons());
    tree.setCellRenderer(new IconNodeRenderer());
    JScrollPane sp = new JScrollPane(tree);
    getContentPane().add(sp, BorderLayout.CENTER);
  }
  
  private Hashtable makeIcons() {
    Hashtable icons = new Hashtable();
    icons.put("floppyDrive",MetalIconFactory.getTreeFloppyDriveIcon());
    icons.put("hardDrive"  ,MetalIconFactory.getTreeHardDriveIcon());
    icons.put("computer"   ,MetalIconFactory.getTreeComputerIcon()); 
    icons.put("c"    ,TextIcons.getIcon("c"));
    icons.put("java" ,TextIcons.getIcon("java"));
    icons.put("html" ,TextIcons.getIcon("html"));    
    return icons;
  }

  public static void main(String args[]) {
    IconNodeTreeExample frame = new IconNodeTreeExample();
    frame.addWindowListener(new WindowAdapter() {
      public void windowClosing(WindowEvent e) {System.exit(0);}
    });
    frame.setSize(300, 150);
    frame.setVisible(true);
  }
}
===============================================
/* (swing1.1) */ 
package jp.gr.java_conf.tame.swing.tree;

import java.util.*;
import java.awt.*;
import javax.swing.*;
import javax.swing.tree.*;


/**
 * @version 1.0 01/12/99
 */
public 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;
  }
}
================================================
/*  (swing1.1.1beta2) */ 
package jp.gr.java_conf.tame.swing.tree;

import java.util.*;
import javax.swing.*;
import javax.swing.tree.*;

/**
 * @version 1.1 06/19/99
 */
public 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;
  }

}

================================
/* (swing1.1) */ 
package jp.gr.java_conf.tame.swing.icon;


import java.util.*;
import java.awt.*;
import javax.swing.*;
import javax.swing.plaf.metal.*;


/**
 * @version 1.0 01/12/99
 */
public class TextIcons extends MetalIconFactory.TreeLeafIcon {

  protected String label;
  private static Hashtable labels;
  
  protected TextIcons() {
  }

  public void paintIcon(Component c, Graphics g, int x, int y) {
    super.paintIcon( c, g, x, y );
    if (label != null) {
      FontMetrics fm = g.getFontMetrics();
          
      int offsetX = (getIconWidth()  - fm.stringWidth(label)) /2;
      int offsetY = (getIconHeight() - fm.getHeight()) /2 - 2;
      
      g.drawString(label, x + offsetX ,
                          y + offsetY + fm.getHeight());
    }
  }
  
  public static Icon getIcon(String str) {
    if (labels == null) {
      labels = new Hashtable();
      setDefaultSet();
    }
    TextIcons icon = new TextIcons();
    icon.label = (String)labels.get(str);
    return icon;
  }
  
  public static void setLabelSet(String ext, String label) {
    if (labels == null) {
      labels = new Hashtable();
      setDefaultSet();
    }
    labels.put(ext, label);   
  }
  
  private static void setDefaultSet() {
    labels.put("c"     ,"C");   
    labels.put("java"  ,"J");   
    labels.put("html"  ,"H");   
    labels.put("htm"   ,"H");   
    
    // and so on
    /*
    labels.put("txt"   ,"TXT");   
    labels.put("TXT"   ,"TXT");   
    labels.put("cc"    ,"C++");   
    labels.put("C"     ,"C++");   
    labels.put("cpp"   ,"C++");   
    labels.put("exe"   ,"BIN");   
    labels.put("class" ,"BIN");   
    labels.put("gif"   ,"GIF");   
    labels.put("GIF"   ,"GIF");  
    
    labels.put("", "");   
    */
  }

}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章