📄 classbrowsertest.java~23~
字号:
import java.awt.*;import java.awt.event.*;import java.lang.reflect.*;import java.util.*;import javax.swing.*;import javax.swing.tree.*;public class ClassBrowserTest{ public static void main(String [] args){ JFrame frame = new ClassBrowserTestFrame(); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.show(); }}class ClassBrowserTestFrame extends JFrame{ public ClassBrowserTestFrame(){ setTitle("ClassBrowserTestFrame"); setSize(WIDTH,HEIGHT); //创建根节点与树状样式 root = new DefaultMutableTreeNode(java.lang.Object.class); model = new DefaultTreeModel(root); tree = new JTree(model); addClass(getClass()); tree.addTreeSelectionListener(new TreeSelectionListener(){ public void valueChanged(TreeSelectionEvent event){ TreePath path = tree.getSelectionPath(); if( path == null) return; DefaultMutableTreeNode selectedNode = (DefaultMutableTreeNode)path.getLastPathComponent(); Class c = (Class)selectedNode.getUserObject(); String description = getFieldDescription(c); textArea.setText(description); } }); int mode = TreeSelectionModel.SINGLE_TREE_SELECTION; tree.getSelectionModel().setSelectionMode(mode); textArea = new JTextArea(); JPanel panel = new JPanel(); panel.setLayout(new GridLayout(1,2)); panel.add(new JScrollPane(tree)); panel.add(new JScrollPane(textArea)); getContentPane().add(panel,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; } public static String getFieldDescription(Class c){ StringBuffer r = new StringBuffer(); Field[] fields = c.getDeclaredFields(); for(int i = 0;i< fields.length;i++){ Field f= fields[i]; if((f.getModifiers() & Modifier.STATIC) !=0) r.append(f.getType().getName()); r.append(" "); r.append(f.getName()); r.append("\n"); } return r.toString(); } private DefaultMutableTreeNode root; private DefaultTreeModel model; private JTree tree; private JTextField textField; private JTextArea textArea; private static final int WIDTH = 400; private static final int HEIGHT = 300;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -