ComponentTableModel.java
上传用户:zhengdagz
上传日期:2014-03-06
资源大小:1956k
文件大小:4k
源码类别:

xml/soap/webservice

开发平台:

Java

  1. /*
  2.  * Created on 20.06.2005
  3.  *
  4.  */
  5. package org.jdesktop.demo.swingx.common;
  6. import java.awt.Component;
  7. import java.awt.Dimension;
  8. import java.awt.Point;
  9. import java.util.ArrayList;
  10. import java.util.Enumeration;
  11. import java.util.List;
  12. import java.util.Stack;
  13. import java.util.Vector;
  14. import javax.swing.table.AbstractTableModel;
  15. import javax.swing.tree.TreeModel;
  16. /**
  17.  * A static snapshot of a container hierarchy.
  18.  * 
  19.  * NOTE: does not listen to any property changes of
  20.  * contained components - cell updates are arbitrary on
  21.  * repaint only!
  22.  * 
  23.  * @author Jeanette Winzenburg
  24.  */
  25. public class ComponentTableModel extends AbstractTableModel {
  26.     public int getRowCount() {
  27.         return components.size();
  28.     }
  29.     public Class getColumnClass(int column) {
  30.         switch (column) {
  31.         case 0:
  32.             return String.class;
  33.         case 1:
  34.             return Point.class;
  35.         case 2:
  36.             return Dimension.class;
  37.         default:
  38.             return Object.class;
  39.         }
  40.     }
  41.     
  42.     public int getColumnCount() {
  43.         return 3;
  44.     }
  45.     public String getColumnName(int column) {
  46.         switch (column) {
  47.         case 0:
  48.             return "Type";
  49.         case 1:
  50.             return "Location";
  51.         case 2:
  52.             return "Size";
  53.         default:
  54.             return "Column " + column;
  55.         }
  56.     }
  57.     
  58.     public Object getValueAt(int row, int column) {
  59.         Component comp = (Component) components.get(row);
  60.         switch (column) {
  61.         case 0:
  62.             return convertValueToText(comp);
  63.         case 1:
  64.             return comp.getLocation();
  65.         case 2:
  66.             return comp.getSize();
  67.         default:
  68.             return null;
  69.         }
  70.     }
  71.     public boolean isCellEditable(int rowIndex, int columnIndex) {
  72.         return false;
  73.     }
  74.     public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
  75.       
  76.     }
  77.     private List components = new ArrayList();
  78.     
  79.     public void updateComponentList(TreeModel model) {
  80.         components = new ArrayList();
  81.         Enumeration enumeration = new PreorderEnumeration(model);
  82.         while (enumeration.hasMoreElements()) {
  83.             components.add(enumeration.nextElement());
  84.         }
  85.         fireTableDataChanged();
  86.         
  87.     }
  88.     public String convertValueToText(Object node) {
  89.         String className = node.getClass().getName();
  90.         int lastDot = className.lastIndexOf(".");
  91.         String lastElement = className.substring(lastDot + 1);
  92.         return lastElement;
  93.     }
  94. //  -------------------- helper classes for traversing the tree
  95. //  -------------------- c&p from Santhosh Kumar
  96. //  --------------------http://jroller.com/page/santhosh/20050607#tree_inside_jcombobox    
  97.       
  98.       class ChildrenEnumeration implements Enumeration{ 
  99.           TreeModel treeModel; 
  100.           Object node; 
  101.           int index = -1; 
  102.        
  103.           public ChildrenEnumeration(TreeModel treeModel, Object node){ 
  104.               this.treeModel = treeModel; 
  105.               this.node = node; 
  106.           } 
  107.        
  108.           public boolean hasMoreElements(){ 
  109.               return index<treeModel.getChildCount(node)-1; 
  110.           } 
  111.        
  112.           public Object nextElement(){ 
  113.               return treeModel.getChild(node, ++index); 
  114.           } 
  115.       } 
  116.       class PreorderEnumeration implements Enumeration{ 
  117.           private TreeModel treeModel; 
  118.           protected Stack stack; 
  119.        
  120.           public PreorderEnumeration(TreeModel treeModel){ 
  121.               this.treeModel = treeModel; 
  122.               Vector v = new Vector(1); 
  123.               v.addElement(treeModel.getRoot()); 
  124.               stack = new Stack(); 
  125.               stack.push(v.elements()); 
  126.           } 
  127.        
  128.           public boolean hasMoreElements(){ 
  129.               return (!stack.empty() && 
  130.                       ((Enumeration)stack.peek()).hasMoreElements()); 
  131.           } 
  132.        
  133.           public Object nextElement(){ 
  134.               Enumeration enumer = (Enumeration)stack.peek(); 
  135.               Object node = enumer.nextElement(); 
  136.               if(!enumer.hasMoreElements()) 
  137.                   stack.pop(); 
  138.               Enumeration children = new ChildrenEnumeration(treeModel, node); 
  139.               if(children.hasMoreElements()) 
  140.                   stack.push(children); 
  141.               return node; 
  142.           } 
  143.       } 
  144. }