📄 classtree.java~16~
字号:
/** * * <p>Title: Class Tree </p> * * <p>Description: 通过类的层次结构图来表示节点 </p> * * <p>Copyright: Copyright (c) 2006</p> * * <p>Company : Spring </p> * * @author : Spring * @version 1.0 */import java.awt.*;import java.awt.event.*;import java.lang.reflect.*;import java.util.*;import javax.swing.*;import javax.swing.tree.*;public class ClassTree{ public static void main(String[] args){ JFrame frame = new ClassTreeFrame(); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.show(); }}class ClassTreeFrame extends JFrame{ public ClassTreeFrame(){ setTitle("ClassTree"); setSize(WIDTH,HEIGHT); //创建根节点 root = new DefaultMutableTreeNode(java.lang.Object.class); //设置默认树型方式 model = new DefaultTreeModel(root); tree = new JTree(model); addClass(getClass()); ClassNameTreeCellRenderer renderer = new ClassNameTreeCellRenderer(); //设置图标 renderer.setClosedIcon(new ImageIcon("red-ball.gif")); renderer.setOpenIcon(new ImageIcon("yellow-ball.gif")); renderer.setLeafIcon(new ImageIcon("blue-ball.gif")); tree.setCellRenderer(renderer); //添加滚动面板 getContentPane().add(new JScrollPane(tree), BorderLayout.CENTER); //添加文本框 addTextField(); } /** * */ public void addTextField(){ JPanel panel = new JPanel(); ActionListener addListener = new ActionListener(){ public void actionPerformed(ActionEvent event){ try{ String text = textField.getText(); addClass(Class.forName(text)); textField.setText(""); } //显示异常消息 catch(ClassNotFoundException e){ JOptionPane.showMessageDialog(null, "Class not found"); } }}; textField = new JTextField(20); textField.addActionListener(addListener); panel.add(textField); JButton addButton = new JButton("Add"); addButton.addActionListener(addListener); panel.add(addButton); getContentPane().add(panel,BorderLayout.SOUTH); } public DefaultMutableTreeNode findUserObject(Object obj){ Enumeration e = root.breadthFirstEnumeration(); while(e.hasMoreElements()){ DefaultMutableTreeNode node =(DefaultMutableTreeNode)e.nextElement(); if(node.getUserObject().equals(obj)) return node; } return null; } public DefaultMutableTreeNode addClass(Class c){ if(c.isInterface() ||c.isPrimitive()) return null; DefaultMutableTreeNode node = findUserObject(c); if(node !=null) return node; Class s = c.getSuperclass(); DefaultMutableTreeNode parent; if(s == null) parent = root; else parent = addClass(s); DefaultMutableTreeNode newNode = new DefaultMutableTreeNode(c); model.insertNodeInto(newNode,parent,parent.getChildCount()); TreePath path = new TreePath(model.getPathToRoot(newNode)); tree.makeVisible(path); return newNode; } private DefaultMutableTreeNode root; private DefaultTreeModel model; private JTree tree; private JTextField textField; private static final int WIDTH = 400; private static final int HEIGHT = 300;}class ClassNameTreeCellRenderer extends DefaultTreeCellRenderer{ public Component getTreeCellRendererComponent(JTree tree, Object value,boolean selected,boolean expanded, boolean leaf,int row,boolean hasFocus){ super.getTreeCellRendererComponent(tree,value, selected,expanded,leaf,row,hasFocus); DefaultMutableTreeNode node = (DefaultMutableTreeNode)value; Class c = (Class)node.getUserObject(); if(plainFont == null){ plainFont = getFont(); if(plainFont !=null) italicFont = plainFont.deriveFont(Font.ITALIC); } if((c.getModifiers() & Modifier.ABSTRACT) == 0) setFont(plainFont); else setFont(italicFont); return this;} private Font plainFont = null; private Font italicFont = null;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -