⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 classbrowsertest.java

📁 sun公司开发的,java2核心技术,卷II:高级性能,包括一系列的高级java应用技术,如数据库德连接,高级swing,多线程,软件本地化等等,本文件中则包含该书中的所用实例,配合该书使用,使对ja
💻 JAVA
字号:
/**
 * @version 1.00 1999-07-17
 * @author Cay Horstmann
 */

import 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 ClassBrowserTest
{  public static void main(String[] args)
   {  JFrame frame = new ClassBrowserTestFrame();
      frame.show();
   }
}

class ClassBrowserTestFrame extends JFrame
   implements ActionListener, TreeSelectionListener
{  public ClassBrowserTestFrame()
   {  setTitle("ClassBrowserTest");
      setSize(300, 200);
      addWindowListener(new WindowAdapter()
         {  public void windowClosing(WindowEvent e)
            {  System.exit(0);
            }
         } );

      // the root of the class tree is Object
      root = new DefaultMutableTreeNode(java.lang.Object.class);
      model = new DefaultTreeModel(root);
      tree = new JTree(model);

      // add this class to populate the tree with some data
      addClass(getClass());

      // set up selection mode
      tree.addTreeSelectionListener(this);
      int mode = TreeSelectionModel.SINGLE_TREE_SELECTION;
      tree.getSelectionModel().setSelectionMode(mode);

      // this text area holds the class description
      textArea = new JTextArea();

      // add tree and text area to the content pane
      JPanel panel = new JPanel();
      panel.setLayout(new GridLayout(1, 2));
      panel.add(new JScrollPane(tree));
      panel.add(new JScrollPane(textArea));

      Container contentPane = getContentPane();
      contentPane.add(panel, "Center");

      // new class names are typed into this text
      textField = new JTextField();
      textField.addActionListener(this);
      contentPane.add(textField, "South");
   }

   public void actionPerformed(ActionEvent event)
   {  // add the class whose name is in the text field
      try
      {  String text = textField.getText();
         addClass(Class.forName(text));
         // clear text field to indicate success
         textField.setText("");
      }
      catch (ClassNotFoundException e)
      {  Toolkit.getDefaultToolkit().beep();
      }
   }

   public void valueChanged(TreeSelectionEvent event)
   {  // the user selected a different node--update description
      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);
   }

   public DefaultMutableTreeNode findUserObject(Object obj)
   {  // find the node containing a user object
      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)
   {  // add a new class to the tree

      // skip non-class types
      if (c.isInterface() || c.isPrimitive()) return null;

      // if the class is already in the tree, return its node
      DefaultMutableTreeNode node = findUserObject(c);
      if (node != null) return node;

      // class isn't present--first add class parent recursively

      Class s = c.getSuperclass();

      DefaultMutableTreeNode parent;
      if (s == null)
         parent = root;
      else
         parent = addClass(s);

      parent = addClass(s);

      // add the class as a child to the parent
      DefaultMutableTreeNode newNode = new DefaultMutableTreeNode(c);
      model.insertNodeInto(newNode, parent, parent.getChildCount());

      // make node visible
      TreePath path = new TreePath(model.getPathToRoot(newNode));
      tree.makeVisible(path);

      return newNode;
   }

   public static String getFieldDescription(Class c)
   {  // use reflection to find types and names of fields
      String r = "";
      Field[] fields = c.getDeclaredFields();
      for (int i = 0; i < fields.length; i++)
      {  Field f = fields[i];
         if ((f.getModifiers() & Modifier.STATIC) != 0)
            r += "static ";
         r += f.getType().getName() + " ";
         r += f.getName() + "\n";
      }
      return r;
   }

   private DefaultMutableTreeNode root;
   private DefaultTreeModel model;
   private JTree tree;
   private JTextField textField;
   private JTextArea textArea;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -