ComponentTableModel.java
资源名称:swingx.zip [点击查看]
上传用户:zhengdagz
上传日期:2014-03-06
资源大小:1956k
文件大小:4k
源码类别:
xml/soap/webservice
开发平台:
Java
- /*
- * Created on 20.06.2005
- *
- */
- package org.jdesktop.demo.swingx.common;
- import java.awt.Component;
- import java.awt.Dimension;
- import java.awt.Point;
- import java.util.ArrayList;
- import java.util.Enumeration;
- import java.util.List;
- import java.util.Stack;
- import java.util.Vector;
- import javax.swing.table.AbstractTableModel;
- import javax.swing.tree.TreeModel;
- /**
- * A static snapshot of a container hierarchy.
- *
- * NOTE: does not listen to any property changes of
- * contained components - cell updates are arbitrary on
- * repaint only!
- *
- * @author Jeanette Winzenburg
- */
- public class ComponentTableModel extends AbstractTableModel {
- public int getRowCount() {
- return components.size();
- }
- public Class getColumnClass(int column) {
- switch (column) {
- case 0:
- return String.class;
- case 1:
- return Point.class;
- case 2:
- return Dimension.class;
- default:
- return Object.class;
- }
- }
- public int getColumnCount() {
- return 3;
- }
- public String getColumnName(int column) {
- switch (column) {
- case 0:
- return "Type";
- case 1:
- return "Location";
- case 2:
- return "Size";
- default:
- return "Column " + column;
- }
- }
- public Object getValueAt(int row, int column) {
- Component comp = (Component) components.get(row);
- switch (column) {
- case 0:
- return convertValueToText(comp);
- case 1:
- return comp.getLocation();
- case 2:
- return comp.getSize();
- default:
- return null;
- }
- }
- public boolean isCellEditable(int rowIndex, int columnIndex) {
- return false;
- }
- public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
- }
- private List components = new ArrayList();
- public void updateComponentList(TreeModel model) {
- components = new ArrayList();
- Enumeration enumeration = new PreorderEnumeration(model);
- while (enumeration.hasMoreElements()) {
- components.add(enumeration.nextElement());
- }
- fireTableDataChanged();
- }
- public String convertValueToText(Object node) {
- String className = node.getClass().getName();
- int lastDot = className.lastIndexOf(".");
- String lastElement = className.substring(lastDot + 1);
- return lastElement;
- }
- // -------------------- helper classes for traversing the tree
- // -------------------- c&p from Santhosh Kumar
- // --------------------http://jroller.com/page/santhosh/20050607#tree_inside_jcombobox
- class ChildrenEnumeration implements Enumeration{
- TreeModel treeModel;
- Object node;
- int index = -1;
- public ChildrenEnumeration(TreeModel treeModel, Object node){
- this.treeModel = treeModel;
- this.node = node;
- }
- public boolean hasMoreElements(){
- return index<treeModel.getChildCount(node)-1;
- }
- public Object nextElement(){
- return treeModel.getChild(node, ++index);
- }
- }
- class PreorderEnumeration implements Enumeration{
- private TreeModel treeModel;
- protected Stack stack;
- public PreorderEnumeration(TreeModel treeModel){
- this.treeModel = treeModel;
- Vector v = new Vector(1);
- v.addElement(treeModel.getRoot());
- stack = new Stack();
- stack.push(v.elements());
- }
- public boolean hasMoreElements(){
- return (!stack.empty() &&
- ((Enumeration)stack.peek()).hasMoreElements());
- }
- public Object nextElement(){
- Enumeration enumer = (Enumeration)stack.peek();
- Object node = enumer.nextElement();
- if(!enumer.hasMoreElements())
- stack.pop();
- Enumeration children = new ChildrenEnumeration(treeModel, node);
- if(children.hasMoreElements())
- stack.push(children);
- return node;
- }
- }
- }