反思一个组件 : Java组件 « 开发相关类 « Java

En
Java
1. 图形用户界面
2. 三维图形动画
3. 高级图形
4. 蚂蚁编译
5. Apache类库
6. 统计图
7. 
8. 集合数据结构
9. 数据类型
10. 数据库JDBC
11. 设计模式
12. 开发相关类
13. EJB3
14. 电子邮件
15. 事件
16. 文件输入输出
17. 游戏
18. 泛型
19. GWT
20. Hibernate
21. 本地化
22. J2EE平台
23. 基于J2ME
24. JDK-6
25. JNDI的LDAP
26. JPA
27. JSP技术
28. JSTL
29. 语言基础知识
30. 网络协议
31. PDF格式RTF格式
32. 映射
33. 常规表达式
34. 脚本
35. 安全
36. Servlets
37. Spring
38. Swing组件
39. 图形用户界面
40. SWT-JFace-Eclipse
41. 线程
42. 应用程序
43. Velocity
44. Web服务SOA
45. 可扩展标记语言
Java 教程
Java » 开发相关类 » Java组件屏幕截图 
反思一个组件
反思一个组件
 
// : c14:BeanDumper.java
// Introspecting a Bean.
// From 'Thinking in Java, 3rd ed.' (c) Bruce Eckel 2002
// www.BruceEckel.com. See copyright notice in CopyRight.txt.

import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.beans.BeanInfo;
import java.beans.EventSetDescriptor;
import java.beans.IntrospectionException;
import java.beans.Introspector;
import java.beans.MethodDescriptor;
import java.beans.PropertyDescriptor;
import java.lang.reflect.Method;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;

public class BeanDumper extends JFrame {
  private JTextField query = new JTextField(20);

  private JTextArea results = new JTextArea();

  public void print(String s) {
    results.append(s + "\n");
  }

  public void dump(Class bean) {
    results.setText("");
    BeanInfo bi = null;
    try {
      bi = Introspector.getBeanInfo(bean, Object.class);
    catch (IntrospectionException e) {
      print("Couldn't introspect " + bean.getName());
      return;
    }
    PropertyDescriptor[] properties = bi.getPropertyDescriptors();
    for (int i = 0; i < properties.length; i++) {
      Class p = properties[i].getPropertyType();
      if (p == null)
        continue;
      print("Property type:\n  " + p.getName() "Property name:\n  "
          + properties[i].getName());
      Method readMethod = properties[i].getReadMethod();
      if (readMethod != null)
        print("Read method:\n  " + readMethod);
      Method writeMethod = properties[i].getWriteMethod();
      if (writeMethod != null)
        print("Write method:\n  " + writeMethod);
      print("====================");
    }
    print("Public methods:");
    MethodDescriptor[] methods = bi.getMethodDescriptors();
    for (int i = 0; i < methods.length; i++)
      print(methods[i].getMethod().toString());
    print("======================");
    print("Event support:");
    EventSetDescriptor[] events = bi.getEventSetDescriptors();
    for (int i = 0; i < events.length; i++) {
      print("Listener type:\n  " + events[i].getListenerType().getName());
      Method[] lm = events[i].getListenerMethods();
      for (int j = 0; j < lm.length; j++)
        print("Listener method:\n  " + lm[j].getName());
      MethodDescriptor[] lmd = events[i].getListenerMethodDescriptors();
      for (int j = 0; j < lmd.length; j++)
        print("Method descriptor:\n  " + lmd[j].getMethod());
      Method addListener = events[i].getAddListenerMethod();
      print("Add Listener Method:\n  " + addListener);
      Method removeListener = events[i].getRemoveListenerMethod();
      print("Remove Listener Method:\n  " + removeListener);
      print("====================");
    }
  }

  class Dumper implements ActionListener {
    public void actionPerformed(ActionEvent e) {
      String name = query.getText();
      Class c = null;
      try {
        c = Class.forName(name);
      catch (ClassNotFoundException ex) {
        results.setText("Couldn't find " + name);
        return;
      }
      dump(c);
    }
  }

  public BeanDumper() {
    Container cp = getContentPane();
    JPanel p = new JPanel();
    p.setLayout(new FlowLayout());
    p.add(new JLabel("Qualified bean name:"));
    p.add(query);
    cp.add(BorderLayout.NORTH, p);
    cp.add(new JScrollPane(results));
    Dumper dmpr = new Dumper();
    query.addActionListener(dmpr);
    query.setText("frogbean.Frog");
    // Force evaluation
    dmpr.actionPerformed(new ActionEvent(dmpr, 0""));
  }

  public static void main(String[] args) {
    run(new BeanDumper()600500);

  }

  public static void run(JFrame frame, int width, int height) {
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setSize(width, height);
    frame.setVisible(true);
  }

///:~



           
         
  
Related examples in the same category
1. Java组件: BeanContextSupportJava组件: BeanContextSupport
2. Java组件:测试程序,增加了100组件到背景Java组件:测试程序,增加了100组件到背景
3. Java组件:如何使用instantiateChild ( )方便的方法创建一个组件Java组件:如何使用instantiateChild ( )方便的方法创建一个组件
4. Java组件:说明交付BeanContextMembershipEventJava组件:说明交付BeanContextMembershipEvent
5. Java组件:创建的所有对象的测试服务能力Java组件:创建的所有对象的测试服务能力
6. 组件集装箱组件集装箱
7. 属性表属性表
8. 性能测试
9. 在JFileChooser对话框倾听改变到所选文件
10. 获取选定的文件清单
11. 在JFileChooser对话框倾听改变到当前目录
12. 在标题JFileChooser对话框显示当前目录中
13. 在标题JFileChooser对话框中设置配件组件
14. 转换组件为XML
15. 聆听组件属性变更事件
16. 列表组件的属性名称
17. 防止组件的属性列化到XML
18. 创建一个实例组件
19. 转换XML持久到组件
20. 确定组件的属性类型
21. 聆听了限制属性变化
22. 组件属性
23. 实现一个有界属性
24. Implementing a Constrained Property: fires a PropertyChangeEvent whenever its value is about to be changed.
25. 一个组件实例
26. 列出自建的属性名称
27. 获得和设置一个组件的属性
28. Get and set the value of a property in a bean using Expression and Statement
29. 获取和设置的对象类型属性
30. 获得和设置一个原始类型属性
31. 获得和建立了一个数组类型的属性
32. Serializing a Bean to XML: XMLEncoder only persists the value of public properties.
33. 防止XML序列化一个组件
34. 防止一个组件属性被序列化到XML
35. 序列化不可改变组件属性为XML
36. Listening for a Property Change Event: A property change event is fired when a bound property is changed.
37. Listening for a Vetoable Property Change Event
38. 读取组件的属性值
39. CAD系统的储存和恢复状态CAD系统的储存和恢复状态
www.java2java.com | Contact Us
Copyright 2010 - 2030 Java Source and Support. All rights reserved.
All other trademarks are property of their respective owners.