📄 objectinspectortest.java~40~
字号:
/** * <p>Title: ObjectInspectorTest </p> * 定制树模型 * <p>Description: </p> * * <p>Copyright: Copyright (c) 2006</p> * * <p>Company: Spring </p> * * @author : Spring * @version 1.0 *///importsimport java.awt.*;import java.awt.event.*;import java.lang.reflect.*;import java.util.*;import javax.swing.*;import javax.swing.event.*;import javax.swing.tree.*;public class ObjectInspectorTest{ public static void main(String[] args){ JFrame frame = new ObjectInspectorFrame(); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.show(); }}class ObjectInspectorFrame extends JFrame{ public ObjectInspectorFrame(){ setTitle("ObjectInspectorTest"); setSize(WIDTH, HEIGHT); Variable v = new Variable(getClass(), "this", this); ObjectTreeModel model = new ObjectTreeModel(); model.setRoot(v); //创建树型结构 tree = new JTree(model); getContentPane().add(new JScrollPane(tree), BorderLayout.CENTER); } private JTree tree; private static final int WIDTH = 400; private static final int HEIGHT = 300; }class ObjectTreeModel implements TreeModel{ public ObjectTreeModel(){ root = null; } public void setRoot(Variable v){ Variable oldRoot = v; root = v; fireTreeStructureChanged(oldRoot); } /** * Description : 以下三个方法显示了对象树到JTree组件之间的结构 * @return Object */ //得到根节点 public Object getRoot(){ return root; } //得到当前节点的子节点个数 public int getChildCount(Object parent){ return ((Variable)parent).getFields().size(); } /** * * @param parent Object * @param index int * @返回一个新的Variable对象,用于描述一个特定的字段 */ public Object getChild(Object parent,int index){ ArrayList fields = ((Variable)parent).getFields(); Field f =(Field)fields.get(index); Object parentValue = ((Variable)parent).getValue(); try{ //产生字段的类型和名字 return new Variable(f.getType(),f.getName(),f.get(parentValue)); } catch(IllegalAccessException e){ return null; } } public int getIndexOfChild(Object parent,Object child){ int n = getChildCount(parent); for(int i=0;i<n;i++) if(getChild(parent,i).equals(child)) return i; return -1; } public boolean isLeaf(Object node){ return getChildCount(node) == 0; } public void valueForPathChanged(TreePath path, Object newValue){ } public void addTreeModelListener(TreeModelListener I){ listenerList.add(TreeModelListener.class,I); } public void removeTreeModelListener(TreeModelListener I){ listenerList.remove(TreeModelListener.class,I); } protected void fireTreeStructureChanged(Object oldRoot){ TreeModelEvent event = new TreeModelEvent(this,new Object[]{oldRoot}); EventListener[] listeners = listenerList.getListeners( TreeModelListener.class); for(int i = 0;i<listeners.length;i++) ((TreeModelListener)listeners[i]).treeStructureChanged(event); } private Variable root; private EventListenerList listenerList = new EventListenerList();} class Variable{ public Variable(Class aType,String aName,Object aValue){ type = aType; name = aName; value = aValue; fields = new ArrayList(); if(!type.isPrimitive() && !type.isArray() && !type.equals(String.class) && value != null){ for(Class c = value.getClass();c != null;c = c.getSuperclass()){ Field[] f = c.getDeclaredFields(); AccessibleObject.setAccessible(f,true); for(int i=0;i<f.length;i++) if((f[i].getModifiers() & Modifier.STATIC)==0) fields.add(f[i]); } } } public Object getValue(){ return value; } public ArrayList getFields(){ return fields; } public String toString(){ String r = type + " " + name; if(type.isPrimitive()) r += "=" + value; else if(type.equals(String.class)) r += "=" + value; else if (value == null) r += "=null"; return r; } private Class type; private String name; private Object value; private ArrayList fields; }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -