友情提示:如果本网页打开太慢或显示不完整,请尝试鼠标右键“刷新”本网页!阅读过程发现任何错误请告诉我们,谢谢!! 报告错误
一世书城 返回本书目录 我的书架 我的书签 TXT全本下载 进入书吧 加入书签

Java编程思想第4版[中文版](PDF格式)-第150章

按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
————未阅读完?加入书签已便下次继续阅读!




      bi。getPropertyDescriptors();  

    for(int i = 0; i 《 properties。length; i++) {  

      Class p = properties'i'。getPropertyType();  

      System。out。println(  

        〃Property type:n  〃 + p。getName());  

      System。out。println(  

        〃Property name:n  〃 +   

        properties'i'。getName());  

      Method readMethod =   

        properties'i'。getReadMethod();  

      if(readMethod != null)  

        System。out。println(  

          〃Read method:n  〃 +   

          readMethod。toString());  

      Method writeMethod =   

        properties'i'。getWriteMethod();  

      if(writeMethod != null)  

        System。out。println(  

          〃Write method:n  〃 +  

          writeMethod。toString());  

      System。out。println(〃====================〃);  

    }  

    System。out。println(〃Public methods:〃);  

    MethodDescriptor'' methods =  

      bi。getMethodDescriptors();  

    for(int i = 0; i 《 methods。length; i++)  

      System。out。println(  

        methods'i'。getMethod()。toString());  

    System。out。println(〃======================〃);  

    System。out。println(〃Event support:〃);  

    EventSetDescriptor'' events =   

      bi。getEventSetDescriptors();  

    for(int i = 0; i 《 events。length; i++) {  



                                                                                          459 


…………………………………………………………Page 461……………………………………………………………

      System。out。println(〃Listener type: n  〃 +  

        events'i'。getListenerType()。getName());  

      Method'' lm =   

        events'i'。getListenerMethods();  

      for(int j = 0; j 《 lm。length; j++)  

        System。out。println(  

          〃Listener method:n  〃 +  

          lm'j'。getName());  

      MethodDescriptor'' lmd =   

        events 'i'。getListenerMethodDescriptors();  

      for(int j = 0; j 《 lmd。length; j++)  

        System。out。println(  

          〃Method descriptor:n  〃 +  

          lmd'j'。getMethod()。toString());  

      Method addListener =   

        events'i'。getAddListenerMethod();  

      System。out。println(  

          〃Add Listener Method:n  〃 +  

        addListener。toString());  

      Method removeListener =  

        events'i'。getRemoveListenerMethod();  

      System。out。println(  

        〃Remove Listener Method:n  〃 +  

        removeListener。toString());  

      System。out。println(〃====================〃);  

    }  

  }  

  // Dump the class of your choice:  

  public static void main(String'' args) {  

    if(args。length 《 1) {  

      System。err。println(〃usage: n〃 +  

        〃BeanDumper fully。qualified。class〃);  

      System。exit(0);  

    }  

    Class c = null;  

    try {  

      c = Class。forName(args'0');  

    } catch(ClassNotFoundException ex) {  

      System。err。println(  

        〃Couldn't find 〃 + args'0');  

      System。exit(0);  

    }  

    dump(c);  

  }  

} ///:~  

  

BeanDumper。dump()是一个可以做任何工作的方法。首先它试图创建一个BeanInfo 对象,如果成功地调用 

BeanInfo 的方法,就产生关于属性、方法和事件的信息。在 Introspector。getBeanInfo()中,我们会注意到 

有一个另外的自变量。由它来通知 Introspector访问继承体系的地点。在这种情况下,它在分析所有对象方 

法前停下,因为我们对看到那些并不感兴趣。  

因为属性,getPropertyDescriptors()返回一组的属性描述符号。对于每个描述符号我们可以调用 

getPropertyType()方法彻底的通过属性方法发现类的对象。这时,我们可以用getName()方法得到每个属性 



                                                                                          460 


…………………………………………………………Page 462……………………………………………………………

的假名(从方法名中提取),getname()方法用 getReadMethod()和getWriteMethod()完成读和写的操作。最 

后的两个方法返回一个可以真正地用来调用在对象上调用相应的方法方法对象(这是映象的一部分)。对于 

公共方法(包括属性方法),getMethodDescriptors(  )返回一组方法描述字符。每一个我们都可以得到相 

当的方法对象并可以显示出它们的名字。  

对于事件而言,getEventSetDescriptors()返回一组事件描述字符。它们中的每一个都可以被查询以找出接 

收器的类,接收器类的方法以及增加和删除接收器的方法。BeanDumper 程序打印出所有的这些信息。  

如果我们调用BeanDumper 在Frog 类中,就像这样:  

java BeanDumper frogbean。Frog  

它的输出结果如下(已删除这儿不需要的额外细节):  

  

class name: Frog  

Property type:  

  Color  

Property name:  

  color  

Read method:  

  public Color getColor()  

Write method:  

  public void setColor(Color)  

====================  

Property type:  

  Spots  

Property name:  

  spots  

Read method:  

  public Spots getSpots()  

Write method:  

  public void setSpots(Spots)  

====================  

Property type:  

  boolean  

Property name:  

  jumper  

Read method:  

  public boolean isJumper()  

Write method:  

  public void setJumper(boolean)  

====================  

Property type:  

  int  

Property name:  

  jumps  

Read method:  

  public int getJumps()  

Write method:  

  public void setJumps(int)  

====================  

Public methods:  

public void setJumps(int)  

public void croak()  

public void removeActionListener(ActionListener)  

public void addActionListener(ActionListener)  



                                                                                          461 


…………………………………………………………Page 463……………………………………………………………

public int getJumps()  

public void setColor(Color)  

public void setSpots(Spots)  

public void setJumper(boolean)  

public boolean isJumper()  

public void addKeyListener(KeyListener)  

public Color getColor()  

public void removeKeyListener(KeyListener)  

public Spots getSpots()  

======================  

Event support:  

Listener type :  

  KeyListener  

Listener method:  

  keyTyped  

Listener method:  

  keyPressed  

Listener method:  

  keyReleased  

Method descriptor:  

  public void keyTyped(KeyEvent)  

Method descriptor:  

  public void keyPressed(KeyEvent)  

Method descriptor:  

  public void keyReleased(KeyEvent)  

Add Listener Method:  

  public void addKeyListener(KeyListener)  

Remove Listener Method:  

  public void removeKeyListener(KeyListener)  

====================  

Listener type:  

  ActionListener  

Listener method:  

  actionPerformed  

Method descriptor:  

  public void actionPerformed(ActionEvent)  

Add Listener Method:  

  public void addActionListener(ActionListener)  

Remove Listener Method:  

  public void removeActionListener(ActionListener)  

====================  

  

这个结果揭示出了 Introspector 在从我们的 Bean 产生一个BeanInfo 对象时看到的大部分内容。我们可注意 

到属性的类型和它们的名字是相互独立的。请注意小写的属性名。(当属性名开头在一行中有超过不止的大 

写字母,这一次程序就不会被执行。)并且请记住我们在这里所见到的方法名(例如读和与方法)真正地从 

一个可以被用来在对象中调用相关方法的方法对象中产生。  

通用方法列表包含了不相关的事件或者属性,例如 croak()。列表中所有的方法都是我们可以有计划的为 

Bean 调用,并且应用程序构建工具可以选择列出所有的方法,当我们调用方法时,减轻我们的任务。  

最后,我们可以看到事件在接收器中完全地分析研究它的方法、增加和减少接收器的方法。基本上,一旦我 

们拥有BeanInfo ,我们就可以找出对Bean 来说任何重要的事物。我们同样可以为Bean 调用方法,即使我们 

除了对象外没有任何其它的信息(此外,这也是映象的特点)。  



                                                                                             462 


…………………………………………………………Page 464……………………………………………………………

13。18。3 一个更复杂的 Bean   



接下的程序例子稍微复杂一些,尽管这没有什么价值。这个程序是一张不论鼠标何时移动都围绕它画一个小 

圆的 弧5蔽颐前聪率蟊昙  保  谄聊恢醒胂允疽桓鲎帧奥ang! ”,并且一个动作接收器被激活。画布。当 

按下鼠标键时,我们可以改变的属性是圆的大小,除此之外还有被显示文字的色彩,大小,内容。BangBean 

同样拥有它自己的addActionListener()和 removeActionListener()方法,因此我们可以附上自己的当用户 

单击在BangBean 上时会被激活的接
返回目录 上一页 下一页 回到顶部 0 0
未阅读完?加入书签已便下次继续阅读!
温馨提示: 温看小说的同时发表评论,说出自己的看法和其它小伙伴们分享也不错哦!发表书评还可以获得积分和经验奖励,认真写原创书评 被采纳为精评可以获得大量金币、积分和经验奖励哦!