和風(fēng)細(xì)雨

          世上本無(wú)難事,心以為難,斯乃真難。茍不存一難之見(jiàn)于心,則運(yùn)用之術(shù)自出。

          #

          用匿名類實(shí)現(xiàn)Comparator實(shí)現(xiàn)鏈表排序的例子

          package com.sitinspring;

          import java.util.ArrayList;
          import java.util.Collections;
          import java.util.Comparator;
          import java.util.List;


          /**
           * 用匿名類實(shí)現(xiàn)排序的例子
           * 
          @author sitinspring(junglesong@gmail.com)
           *
           * @date 2007-12-7
           
          */

          public class Main{
            
          public static void main(String[] args){
              
          // 新建鏈表并加入元素
              List<Member> members=new ArrayList<Member>();   
              members.add(
          new Member("Andy",20));   
              members.add(
          new Member("Dell",23));
              members.add(
          new Member("Felex",24));
              members.add(
          new Member("Bill",21));
              members.add(
          new Member("Cindy",22));
              
              
          // 創(chuàng)建一個(gè)比較器匿名類
              Comparator comparator=new Comparator(){
                
          public int compare(Object op1,Object op2){
                  Member memberOp1
          =(Member)op1;
                  Member memberOp2
          =(Member)op2;
                  
                  
          // 按姓名排序
                  return memberOp1.getName().compareTo(memberOp2.getName());
                }

              }
          ;
              
              
          // 排序
              Collections.sort(members,comparator);
              
              
          // 輸出排序后的鏈表
              for(Member member:members){
                System.out.println(member);
              }

                
            }

          }

          posted @ 2008-02-22 10:26 和風(fēng)細(xì)雨 閱讀(1576) | 評(píng)論 (0)編輯 收藏

          Java泛型類示例

               摘要: 泛型類示例一: package com.sitinpsring; import java.util.ArrayList; import java.util.List; /** *//**  * 泛型類示例一,成員變量為鏈表,T可以指代任意類類型.  * @author sitinsprin...  閱讀全文

          posted @ 2008-02-22 10:26 和風(fēng)細(xì)雨 閱讀(1838) | 評(píng)論 (1)編輯 收藏

          java.math.BigDecimal使用示例

          BigDecimal op1=new BigDecimal("3.14159");
          BigDecimal op2=new BigDecimal("3");       

          System.out.println("和="+op1.add(op2));
          System.out.println("差="+op1.subtract(op2));
          System.out.println("積="+op1.multiply(op1));
          System.out.println("商="+op1.divide(op2, BigDecimal.ROUND_UP));
          System.out.println("負(fù)值="+op1.negate());

          System.out.println("指定精度的商="+op1.divide(op2,15, BigDecimal.ROUND_UP));
          輸出:

          和=6.14159
          差=0.14159
          積=9.8695877281
          商=1.04720
          負(fù)值=-3.14159
          指定精度的商=1.047196666666667

          posted @ 2008-02-22 10:07 和風(fēng)細(xì)雨 閱讀(1085) | 評(píng)論 (1)編輯 收藏

          使用java.text.SimpleDateFormat類進(jìn)行文本日期和Date日期的轉(zhuǎn)換

          Date類內(nèi)部既不存儲(chǔ)年月日也不存儲(chǔ)時(shí)分秒,而是存儲(chǔ)一個(gè)從1970年1月1日0點(diǎn)0分0秒開始的毫秒數(shù),而真正有用的年月日時(shí)分秒毫秒都是從這個(gè)毫秒數(shù)轉(zhuǎn)化而來(lái),這是它不容易被使用的地方,尤其是顯示和存儲(chǔ)的場(chǎng)合。但Date類的優(yōu)勢(shì)在于方便計(jì)算和比較。
          另一點(diǎn),日常生活中我們習(xí)慣用年月日時(shí)分秒這樣的文本日期來(lái)表示時(shí)間,它方便顯示和存儲(chǔ),也容易理解,但不容易計(jì)算和比較。
          綜上所述,我們?cè)诔绦蛑羞M(jìn)行日期時(shí)間處理時(shí)經(jīng)常需要在在文本日期和Date類之間進(jìn)行轉(zhuǎn)換,為此我們需要借助java.text.SimpleDateFormat類來(lái)進(jìn)行處理,下文列舉了它的幾個(gè)常用示例。

          1.將Date轉(zhuǎn)化為常見(jiàn)的日期時(shí)間字符串
          這里我們需要用到j(luò)ava.text.SimpleDateFormat類的format方法,其中可以指定年月日時(shí)分秒的模式字符串格式。
          Date date = new Date();
          Format formatter = new SimpleDateFormat("yyyy年MM月dd日HH時(shí)mm分ss秒");
          System.out.println("轉(zhuǎn)化的時(shí)間等于="+formatter.format(date));
          其中
          yyyy表示四位數(shù)的年份
          MM表示兩位數(shù)的月份
          dd表示兩位數(shù)的日期
          HH表示兩位數(shù)的小時(shí)
          mm表示兩位數(shù)的分鐘
          ss表示兩位數(shù)的秒鐘

          2.將文本日期轉(zhuǎn)化為Date以方便比較
          文本日期的優(yōu)勢(shì)在于便于記憶,容易處理,但缺點(diǎn)是不方便比較,這時(shí)我們需要借助SimpleDateFormat的parse方法得到Date對(duì)象再進(jìn)行比較,實(shí)例如下:
          String strDate1="2004年8月9日";
          String strDate2="2004年10月5日";

          SimpleDateFormat myFormatter = new SimpleDateFormat("yyyy年MM月dd日");
          java.util.Date date1 = myFormatter.parse(strDate1);

          java.util.Date date2 = myFormatter.parse(strDate2);

          // Date比較能得出正確結(jié)果
          if(date2.compareTo(date1)>0){
                System.out.println(strDate2+">"+strDate1);
          }

          // 字符串比較得不出正確結(jié)果
          if(strDate2.compareTo(strDate1)>0){
                System.out.println(strDate2+">"+strDate1);
          }


          3.將文本日期轉(zhuǎn)化為Date以方便計(jì)算
          文本日期的另一個(gè)大問(wèn)題是不方便計(jì)算,比如計(jì)算2008年1月9日的100天后是那一天就不容易,此時(shí)我們還是需要把文本日期轉(zhuǎn)化為Date進(jìn)行計(jì)算,再把結(jié)果轉(zhuǎn)化為文本日期:
          SimpleDateFormat myFormatter = new SimpleDateFormat("yyyy年MM月dd日");
          java.util.Date date = myFormatter.parse("2008年1月9日");
          date.setDate(date.getDate()+100);

          Format formatter = new SimpleDateFormat("yyyy年MM月dd日");

          // 得到2008年04月18日
          System.out.println("100天后為"+formatter.format(date));

          posted @ 2008-02-22 10:07 和風(fēng)細(xì)雨 閱讀(154) | 評(píng)論 (0)編輯 收藏

          表格渲染器示例



          實(shí)現(xiàn)類:
          package com.sitinspring.view.panel;

          import java.awt.Color;
          import java.awt.Component;

          import javax.swing.JTable;
          import javax.swing.table.DefaultTableCellRenderer;

          /**
           * 間隔色表格渲染類
           * 
          @author: sitinspring(junglesong@gmail.com)
           * @date: 2008-1-10
           
          */

          public class ColorTableCellRenderer extends DefaultTableCellRenderer 
              
          private static final long serialVersionUID = -3378036327580475639L;

              
          public Component getTableCellRendererComponent( 
                         JTable table, 
                         Object value, 
                         
          boolean isSelected, 
                         
          boolean hasFocus, 
                         
          int row, 
                         
          int column) 
                  
                         
          // 得到渲染的單元格
                         Component cell = 
                                 
          super.getTableCellRendererComponent( 
                                         table, 
                                         value, 
                                         isSelected, 
                                         hasFocus, 
                                         row, 
                                         column); 

                         
          // 進(jìn)行渲染
                         if (hasFocus) 
                             
          // 如果獲得焦點(diǎn)則設(shè)置背景色為紅色
                             cell.setBackground(Color.red); 
                             
          //cell.setForeground(Color.black); 
                         }
           else 
                             
          if ((row % 2== 0
                                 
          // 偶數(shù)行設(shè)置為白色
                                 cell.setBackground(Color.white); 
                             }
           else 
                                 
          // 奇數(shù)行設(shè)置為藍(lán)色
                                 cell.setBackground(Color.cyan); 
                             }
           
                         }
           
                         
                         
          return cell; 
                 }
           
          }
           



          package com.sitinspring.view.panel;

          import java.awt.Color;
          import java.awt.Component;
          import java.util.regex.Pattern;

          import javax.swing.JTable;
          import javax.swing.table.DefaultTableCellRenderer;

          /**
           * 大於37顯示紅色的表單元格
           * 
          @author: sitinspring(junglesong@gmail.com)
           * @date: 2008-1-10
           
          */

          public class AgeTableCellRenderer extends DefaultTableCellRenderer 
              
          private static final long serialVersionUID = -334535475639L;

              
          public Component getTableCellRendererComponent( 
                         JTable table, 
                         Object value, 
                         
          boolean isSelected, 
                         
          boolean hasFocus, 
                         
          int row, 
                         
          int column) 
                  
                         
          // 得到單元格
                         Component cell = 
                                 
          super.getTableCellRendererComponent( 
                                         table, 
                                         value, 
                                         isSelected, 
                                         hasFocus, 
                                         row, 
                                         column); 
                         
                         
          // 先把所有單元格設(shè)置為白色
                         cell.setBackground(Color.white); 
                         
                         
          // 進(jìn)行渲染
                         if (table.getColumnName(column).equals("年齡") ) // 如果列名等于“年齡”
                             
          // 取得單元格的文字
                             String strValue=(String)value;
                             
                             
          if(Pattern.matches("\\d+", strValue)){
                                 
          if(Integer.parseInt(strValue)>37){
                                     
          // 如果是數(shù)字且值大于37,將單元格背景設(shè)置為紅色
                                     cell.setBackground(Color.red); 
                                 }
                                 
                             }

                         }
           
                         
                         
          return cell; 
                 }
           
          }
           

          posted @ 2008-02-22 10:06 和風(fēng)細(xì)雨 閱讀(406) | 評(píng)論 (0)編輯 收藏

          Java中參數(shù)傳遞是傳值還是傳址?

          什么是值傳遞?什么是引用傳遞?

          值傳遞是將要傳遞的值作為一副本傳遞.如
               int i=4;
               int j=i;
               這里相當(dāng)于把14復(fù)制了一個(gè)副本給j,結(jié)果是i=4,j=4

          引用傳遞,傳遞的是引用對(duì)象的內(nèi)存地址
               int *p,*p1;
               int j=5; *p=j; //這里是把j在內(nèi)存當(dāng)中的地址賦給了指針p
               p1=p;  //這里是把指針p中保存的地址(就是j的地址)賦給了指針p1
               j=4; //這里改變j的值 輸出結(jié)果是 j=4 , *p=4 , *p1=4 //因?yàn)閜和p1指向的都是j 所以他們的值隨j值改變
          (以上說(shuō)明和代碼來(lái)自http://zhidao.baidu.com/question/31191252.html)


          Java中函數(shù)參數(shù)的傳遞是值傳遞還是引用傳遞?

          Java中參數(shù)傳遞時(shí)傳遞到函數(shù)中的參數(shù)都是原變量的一份拷貝,對(duì)于非類類型如int,float等,這份拷貝自然和原變量脫離了關(guān)系,這不難理解;
          而對(duì)于類的實(shí)例而言,這份拷貝恰巧是實(shí)例引用的拷貝,它(參數(shù))指向的實(shí)例地址和原實(shí)例引用指向的實(shí)例地址都是一樣的,因此對(duì)參數(shù)的修改有時(shí)也會(huì)影響到實(shí)例本身,故此造成了Java傳遞類實(shí)例是傳遞的引用即地址的假象,如下面例子中的changeMemberField函數(shù),但是我們把參數(shù)指向的地址改到別的實(shí)例上時(shí),如changeMember函數(shù),我們會(huì)發(fā)現(xiàn)參數(shù)和原實(shí)例引用再也不會(huì)發(fā)生關(guān)系了,這里證明Java中參數(shù)傳遞是完完全全是傳值而不是傳址。

          例子代碼:

          代碼:
          package com.sitinspring;

          public class ChangeClass{
              
          public void changeInt(int i){
                  i
          =5;
              }
              
              
          public void changeLong(long i){
                  i
          =555;
              }
              
              
          public void changeString(String str){
                  str
          ="5555";
              }
              
              
          public void changeMember(Member member){
                  member
          =new Member("Cindy",35);
              }
              
              
          public void changeMemberField(Member member){
                  member.setAge(
          20);
                  member.setName(
          "Andy");
              }
              
              
          public static void main(String[] args){
                  ChangeClass changeClass
          =new ChangeClass();
                  
                  
          int intValue=10;
                  changeClass.changeInt(intValue);
                  System.out.println(intValue);
                  
                  
          long longValue=10;
                  changeClass.changeLong(longValue);
                  System.out.println(longValue);
                  
                  String stringValue
          ="1234";
                  changeClass.changeString(stringValue);
                  System.out.println(stringValue);        
                  
                  Member member2
          =new Member("Douglas",45);
                  changeClass.changeMember(member2);
                  System.out.println(member2);
                  
                  Member member
          =new Member("Bill",25);
                  changeClass.changeMemberField(member);
                  System.out.println(member);
              }
          }

          package com.sitinspring;

          public class Member{
              
          private String name;
              
          private int age;
              
              
          public Member(String name,int age){
                  
          this.age=age;
                  
          this.name=name;
              }
              
              
          public String toString(){
                  
          return "Member name="+name+" age="+age;
              }

              
          public int getAge() {
                  
          return age;
              }

              
          public void setAge(int age) {
                  
          this.age = age;
              }

              
          public String getName() {
                  
          return name;
              }

              
          public void setName(String name) {
                  
          this.name = name;
              }    
          }

          輸出
          10
          10
          1234
          Member name
          =Douglas age=45
          Member name
          =Andy age=20

          解釋
          第一個(gè)輸出10是因?yàn)閕nt是基本類型,傳遞的參數(shù)是intValue的拷貝,對(duì)拷貝的修改對(duì)原值intValue沒(méi)有影響.
          第一個(gè)輸出10和上面是一個(gè)道理.
          第三個(gè)輸出1234.由于String是類類型, str是stringValue的地址拷貝,參數(shù)str指向的地址和stringValue的一致,但在函數(shù)changeString 中,由于String的特殊性, str=“5555”和str=new String(“5555”)是等價(jià)的, str指向了新的”5555”所在的地址,此句后str就與原來(lái)的stringValue徹底脫離了聯(lián)系.
          第四個(gè)輸出Member?name=Douglas?age=45的道理和上面相同.
          第五個(gè)輸出Member?name=Andy?age=20是因?yàn)閏hangeMemberField函數(shù)中修改了參數(shù)member 的值,也就是修改member指向?qū)嵗闹?而這個(gè)實(shí)例正是member指向的值,因此member就變成了name=Andy 且age=20.

          結(jié)論

          Java中參數(shù)傳遞的都是值,對(duì)應(yīng)基本類型,傳遞的是原值的拷貝;對(duì)于類類型,傳遞的是引用即地址的拷貝.
          對(duì)于函數(shù)對(duì)參數(shù)的改變是否會(huì)影響原值的問(wèn)題:值類型自然不會(huì)影響到原值.而對(duì)于類類型要看改變的是參數(shù)的地址還是值,如果是前者,參數(shù)和原引用指向了不同的地址,它們自然脫離了關(guān)系;如果是后者,修改的實(shí)例就是原引用指向的實(shí)例,這當(dāng)然對(duì)原值進(jìn)行了修改.

          代碼下載
          http://www.aygfsteel.com/Files/sitinspring/PassValueOrReference20080116142420.rar

          posted @ 2008-02-22 09:19 和風(fēng)細(xì)雨 閱讀(5025) | 評(píng)論 (6)編輯 收藏

          反射Reflection綜述

          反射Reflection是Java被視為動(dòng)態(tài)語(yǔ)言的一個(gè)關(guān)鍵性質(zhì).這個(gè)機(jī)制允許程序在運(yùn)行時(shí)通過(guò)Reflection APIs得到任何一個(gè)已知名稱的類的相關(guān)信息,包括其構(gòu)造方法,父類,實(shí)現(xiàn)的接口,成員變量(field)和成員方法(method)的相關(guān)信息,并可在運(yùn)行時(shí)改變成員變量的值或調(diào)用其方法.反射的高度靈活的特性使得它成為Java語(yǔ)言中最具魔力和活力的部分,它是許多流行框架的實(shí)現(xiàn)基礎(chǔ),如Struts,Spring和Hibernate,本篇將列舉一些反射常見(jiàn)的API:

          實(shí)現(xiàn)反射機(jī)制的類
          在JDK中,主要由以下類來(lái)實(shí)現(xiàn)Java反射機(jī)制,這些類都位于java.lang.reflect包中:
          Class類:代表一個(gè)類。
          Field 類:代表類的成員變量(成員變量也稱為類的屬性)。
          Method類:代表類的方法。
          Constructor 類:代表類的構(gòu)造方法。
          Array類:提供了動(dòng)態(tài)創(chuàng)建數(shù)組,以及訪問(wèn)數(shù)組的元素的靜態(tài)方法。

          反射的源頭:Class類
          Java類繼承體系的是一個(gè)單根體系,所有類的都起源于Object類,其內(nèi)聲明了數(shù)個(gè)應(yīng)該在所有Java class中被改寫的methods:hashCode()、equals()、clone()、toString()、getClass()等。其中g(shù)etClass()返回一個(gè)Class object。當(dāng)一個(gè)class被加載,或當(dāng)加載器(class loader)的defineClass()被JVM調(diào)用,JVM 便自動(dòng)產(chǎn)生一個(gè)Class object。
          由于在java.lang.Object 類中定義了getClass()方法,因此對(duì)于任意一個(gè)Java對(duì)象,都可以通過(guò)此方法獲得對(duì)象的類型。
          Class類對(duì)象代表了Java應(yīng)用程序中的各種類和接口.這些類不是程序代碼生成的,而是在Java虛擬機(jī)(JVM)裝入各種類時(shí)生成的.

          Static class forName(String className)
          這個(gè)方法返回以className為名字的Class對(duì)象。
          Object newInstance()
          創(chuàng)建該Class對(duì)象代表的類的一個(gè)實(shí)例,類似調(diào)用一個(gè)無(wú)參數(shù)的構(gòu)造函數(shù)。這個(gè)方法要求類必須具有一個(gè)無(wú)參構(gòu)造函數(shù),如果沒(méi)有時(shí)調(diào)用此方法程序會(huì)拋出一個(gè)java.lang.InstantiationException異常,這也是許多框架要求類具有一個(gè)無(wú)參構(gòu)造函數(shù)的根本原因
          package com.sitinspring;

          public class Member{
            
          private String name;
            
          private int age;
            
          private float salary;
            
            
          public Member(){
              name
          ="Unknown";
              age
          =20;
              salary
          =1.00f;
            }
            
            
          public String toString(){
              
          return "名稱="+name+" 年齡="+age+" 薪水="+salary;
            }
            
            
          public static void main(String[] args){
              
          try{
                Class cls
          =Class.forName("com.sitinspring.Member");
                Member member
          =(Member)cls.newInstance();
                System.out.println(member);
              }
              
          catch(Exception ex){
                ex.printStackTrace();
              }
            }
          }

          Class getSuperclass()
          返回該Class對(duì)象代表的類的父類。如果該Class是Object,接口,基本數(shù)據(jù)類型或void,則返回nulll,如果這個(gè)類對(duì)象是數(shù)組,則返回Object類的類對(duì)象
          public class Member extends Thread implements Comparable{
            
          private String name;
            
          private int age;
            
          private float salary;
            
            
          public Member(){
              name
          ="Unknown";
              age
          =20;
              salary
          =1.00f;
            }
            
            
          public String toString(){
              
          return "名稱="+name+" 年齡="+age+" 薪水="+salary;
            }
            
            
          public int compareTo(Object obj){
              Member another
          =(Member)obj;
              
              
          return this.age-another.age;
            }
            
            
          public static void main(String[] args){
              System.out.println(Member.
          class.getSuperclass());
              System.out.println(Object.
          class.getSuperclass());
              System.out.println(Comparable.
          class.getSuperclass());
              System.out.println(
          int.class.getSuperclass());
              System.out.println(
          void.class.getSuperclass());
              System.out.println(String[].
          class.getSuperclass());
            }
          }
          Class[] getInterfaces()
          返回該Class對(duì)象實(shí)現(xiàn)的接口。
          public class Member implements Comparable,Runnable{
            
          private String name;
            
          private int age;
            
          private float salary;
            
            
          public Member(){
              name
          ="Unknown";
              age
          =20;
              salary
          =1.00f;
            }
            
            
          public String toString(){
              
          return "名稱="+name+" 年齡="+age+" 薪水="+salary;
            }
            
            
          public int compareTo(Object obj){
              Member another
          =(Member)obj;
              
              
          return this.age-another.age;
            }
            
            
          public void run(){
              
            }
            
            
          public static void main(String[] args){
              
          for(Class cls:Member.class.getInterfaces()){
                System.out.println(cls.toString());
              }
            }
          }
          輸出:
          interface java.lang.Comparable
          interface java.lang.Runnable

          Construtor[] getConstructors()
          Construtor[] getDeclaredConstructors()
          Construtor[] getConstructors(Class[] parameterTypes)
          Construtor[] getDeclaredConstructors(Class[] parameterTypes)

          返回構(gòu)造函數(shù),如果有parameterTypes,返回參數(shù)類型為parameterTypes的構(gòu)造函數(shù),Declared是指類中聲明的所有構(gòu)造函數(shù),如果沒(méi)有Declared,則只返回共有構(gòu)造函數(shù)。
          public class Member {
            
          private String name;

            
          private int age;

            
          private float salary;

            
          public Member() {
              name 
          = "Unknown";
              age 
          = 20;
              salary 
          = 1.00f;
            }

            
          public Member(String name, int age, float salary) {
              
          this.name = name;
              
          this.age = age;
              
          this.salary = salary;
            }

            
          public String toString() {
              
          return "名稱=" + name + " 年齡=" + age + " 薪水=" + salary;
            }

            
          public static void main(String[] args) {
              
          for (Constructor cls : Member.class.getConstructors()) {
                System.out.println(cls.toString());
              }

              
          try {
                Class cls 
          = Class.forName("com.sitinspring.Member");
                Constructor con 
          =cls.getConstructor(new Class[]{String.classint.class,float.class});
                Member member 
          = (Member) con.newInstance(new Object[] {
                    
          new String("Sitinspring"), new Integer(30),
                    
          new Float(20000) });
                System.out.println(member); 
              } 
          catch (Exception e) {
                e.printStackTrace();
              }
            }
          }

          Field[] getFields()
          Field[] getDeclaredFields()
          Field getField(String name)
          Field[] getDeclaredFields(String name)

          返回成員變量。如果有name參數(shù),返回名字是name的成員變量,Declared指聲明中所有的成員變量,如果沒(méi)有Declared,則只返回公有成員變量。
          public class Member {
            
          private String name;

            
          private int age;

            
          private float salary;
            
            
          public String field1;
            
          protected String field2;

            
          public static void main(String[] args) {
              
          for (Field field : Member.class.getFields()) {
                System.out.println(field);
              }
              
              
          for (Field field : Member.class.getDeclaredFields()) {
                System.out.println(field.getName());
              }
            }
          }

          輸出:
          public java.lang.String com.sitinspring.Member.field1
          name
          age
          salary
          field1
          field2

          Method[] getMethods()
          Method[] getDeclaredMethods()
          Method getMethod(String name,Class[] parameterTypes)
          Method[] getDeclaredMethods(String name ,Class[] parameterTypes)

          返回類的方法,如果有name和parameterTypes參數(shù),返回名字是name,且有parameterTypes參數(shù)列表的方法、Declared指聲明中所有的方法(包括public,private,protected),如果沒(méi)有Declared,則只返回公有方法。

          Method類有一個(gè)重要方法
          Object invoke(Object obj,Object[] arg),
          通過(guò)它可以進(jìn)行類方法調(diào)用,在后面的例子中會(huì)見(jiàn)到。
          public class Member {
            
          private String name;

            
          private int age;

            
          private float salary;

            
          public Member() {
              name 
          = "Unknown";
              age 
          = 20;
              salary 
          = 1.00f;
            }

            
          public String toString() {
              
          return "名稱=" + name + " 年齡=" + age + " 薪水=" + salary;
            }
            
            
          public int getAge() {
              
          return age;
            }

            
          protected String getName() {
              
          return name;
            }

            
          private float getSalary() {
              
          return salary;
            }
            
            
          public static void main(String[] args) {
              
          for (Method method : Member.class.getMethods()) {
                System.out.println(method);
              }
              System.out.println(
          "--------------");
              
          for (Method method : Member.class.getDeclaredMethods()) {
                System.out.println(method);
              }
            }
          }

          調(diào)用類的方法
          Method類有一個(gè)重要方法
          Object invoke(Object obj,Object[] arg),
          Object代表返回值,obj是類實(shí)例, arg是參數(shù)數(shù)組。

          這個(gè)方法能調(diào)用實(shí)例的一個(gè)方法。如右:
          public class Caculator{
            
          public int add(int op1,int op2){
              
          return op1+op2;
            }
            
            
          public int substract(int op1,int op2){
              
          return op1-op2;
            }
            
            
          public static void main(String[] args){
              
          try{
                Caculator caculator
          =new Caculator();
                
                Method addMethod 
          = caculator.getClass().getMethod(
                    
          "add",
                    
          new Class[] { int.class,int.class });

                Object result1
          =addMethod.invoke(caculator, new Object[] { 1,2 });
                System.out.println(
          "和="+result1);
                
                Method substractMethod 
          = caculator.getClass().getMethod(
                    
          "substract",
                    
          new Class[] { int.class,int.class });
                
                Object result2
          =substractMethod.invoke(caculator, new Object[] { 3,4 });
                System.out.println(
          "差="+result2);
              }
              
          catch(Exception ex){
                ex.printStackTrace();
              }
            }
          }

          通過(guò)Field對(duì)對(duì)象進(jìn)行設(shè)值取值請(qǐng)見(jiàn):http://www.aygfsteel.com/sitinspring/archive/2008/01/03/172455.html

          通過(guò)Method對(duì)對(duì)象進(jìn)行設(shè)值取值請(qǐng)見(jiàn):
          http://www.aygfsteel.com/sitinspring/archive/2008/01/05/172970.html

          posted @ 2008-02-22 09:19 和風(fēng)細(xì)雨 閱讀(214) | 評(píng)論 (0)編輯 收藏

          Tomcat6中JDBC數(shù)據(jù)源(Oracle)的配置

               摘要: 費(fèi)了一番周折,把Tomcat6中JDBC數(shù)據(jù)源配置好了,這里把過(guò)程寫一下。感覺(jué)是某些網(wǎng)上的東西不可全信,還是官方文檔管用。 步驟一:將Oracle的數(shù)據(jù)庫(kù)驅(qū)動(dòng)包c(diǎn)lasses12.jar拷貝到$CATALINA_HOME/lib下,我的Tomcat6庫(kù)位置是C:\Tomcat6\lib,就拷貝到這里。 步驟二:改寫server.xml。 server.xml在$CATALINA_...  閱讀全文

          posted @ 2008-02-22 09:14 和風(fēng)細(xì)雨 閱讀(3533) | 評(píng)論 (0)編輯 收藏

          擴(kuò)展DefaultTreeCellRenderer創(chuàng)建自己的樹節(jié)點(diǎn)渲染器示例。

          通常來(lái)說(shuō),使用下面的方法確實(shí)能改變樹節(jié)點(diǎn)的圖標(biāo),但靈活性不高。
          // 設(shè)定葉節(jié)點(diǎn)圖標(biāo)
          Icon leafIcon = new ImageIcon(TreeViewPanel.class
                  .getResource(
          "/leaf.gif"));
          // 設(shè)定關(guān)閉狀態(tài)節(jié)點(diǎn)圖標(biāo)
          Icon closedIcon = new ImageIcon(TreeViewPanel.class
                  .getResource(
          "/close.gif"));
          // 設(shè)定打開狀態(tài)節(jié)點(diǎn)圖標(biāo)
          Icon openIcon = new ImageIcon(TreeViewPanel.class
                  .getResource(
          "/open.gif"));

          // 取得樹的渲染器
          DefaultTreeCellRenderer renderer = (DefaultTreeCellRenderer) tree
                  .getCellRenderer();

          // 設(shè)定葉節(jié)點(diǎn)圖標(biāo)
          renderer.setLeafIcon(leafIcon);

          // 設(shè)定關(guān)閉狀態(tài)節(jié)點(diǎn)圖標(biāo)
          renderer.setClosedIcon(closedIcon);

          // 設(shè)定打開狀態(tài)節(jié)點(diǎn)圖標(biāo)
          renderer.setOpenIcon(openIcon);

          但這樣靈活性不高,如我想每層的圖標(biāo)都不一樣就不能使用這種方法了,我想要的效果如下:


          這時(shí)我們只有擴(kuò)展DefaultTreeCellRenderer創(chuàng)建自己的樹節(jié)點(diǎn)渲染器,我創(chuàng)建的渲染器代碼如下:
          package com.sitinspring.common.render;

          import java.awt.Component;

          import javax.swing.Icon;
          import javax.swing.ImageIcon;
          import javax.swing.JTree;
          import javax.swing.tree.DefaultMutableTreeNode;
          import javax.swing.tree.DefaultTreeCellRenderer;
          import javax.swing.tree.TreeNode;

          /**
           * 樹節(jié)點(diǎn)渲染器
           * 
          @author: sitinspring(junglesong@gmail.com)
           * @date: 2008-2-12
           
          */

          public class TreeNodeRenderer extends DefaultTreeCellRenderer{
              
          private static final long serialVersionUID = 8532405600839140757L;
              
              
          // 數(shù)據(jù)庫(kù)圖標(biāo),頂層節(jié)點(diǎn)用
              private static final Icon databaseIcon = new ImageIcon(TreeNodeRenderer.class
                      .getResource(
          "/database.gif"));
              
              
          // 表圖標(biāo),第三層節(jié)點(diǎn)用
              private static final Icon tableIcon = new ImageIcon(TreeNodeRenderer.class
                      .getResource(
          "/leaf.gif"));
              
              
          // 表空間關(guān)閉狀態(tài)圖標(biāo),關(guān)閉狀態(tài)的第二層節(jié)點(diǎn)用
              private static final Icon tableSpaceCloseIcon = new ImageIcon(TreeNodeRenderer.class
                      .getResource(
          "/close.gif"));
              
              
          // 表空間關(guān)閉狀態(tài)圖標(biāo),打開狀態(tài)的第二層節(jié)點(diǎn)用
              private static final Icon tableSpaceOpenIcon = new ImageIcon(TreeNodeRenderer.class
                      .getResource(
          "/open.gif"));
              
              
          public Component getTreeCellRendererComponent(JTree tree,
                                                            Object value,
                                                            
          boolean sel,
                                                            
          boolean expanded,
                                                            
          boolean leaf,
                                                            
          int row,
                                                            
          boolean hasFocus){
                   
          super.getTreeCellRendererComponent(tree,   
                                                      value,
                                                      sel,   
                                                      expanded,   
                                                      leaf,   
                                                      row,   
                                                      hasFocus);   
                  
          // 取得節(jié)點(diǎn)
                  DefaultMutableTreeNode node=(DefaultMutableTreeNode)value;
                  
                  
          // 取得路徑
                  TreeNode[] paths = node.getPath();
                  
                  
          // 按路徑層次賦予不同的圖標(biāo)
                  if (paths.length == 3{            
                      setIcon(tableIcon);
                  }
          else if(paths.length == 2){
                      
          // 按展開情況再賦予不同的圖標(biāo)
                      if(expanded){
                          setIcon(tableSpaceOpenIcon);
                      }

                      
          else{
                          setIcon(tableSpaceCloseIcon);
                      }

                  }

                  
          else if(paths.length == 1){
                      setIcon(databaseIcon);
                  }

                  
                  
          return this;        
              }

          }

          使用這個(gè)渲染器使用以下代碼就行了:
          tree.setCellRenderer(new TreeNodeRenderer());

          以上。

          posted @ 2008-02-22 09:12 和風(fēng)細(xì)雨 閱讀(2836) | 評(píng)論 (0)編輯 收藏

          JDBC分頁(yè)示例(Oracle數(shù)據(jù)庫(kù))

               摘要: 實(shí)例一: 效果圖: 頁(yè)面代碼: Code highlighting produced by Actipro CodeHighlighter (freeware) http://www.CodeHighlighter.com/ --><table>          ...  閱讀全文

          posted @ 2008-02-22 09:12 和風(fēng)細(xì)雨 閱讀(459) | 評(píng)論 (0)編輯 收藏

          僅列出標(biāo)題
          共10頁(yè): First 上一頁(yè) 2 3 4 5 6 7 8 9 10 下一頁(yè) 
          主站蜘蛛池模板: 临清市| 安远县| 葫芦岛市| 九龙坡区| 黔江区| 边坝县| 太仓市| 台山市| 巩留县| 海盐县| 紫金县| 两当县| 静海县| 定兴县| 崇义县| 北安市| 明水县| 克拉玛依市| 抚远县| 衡水市| 渭源县| 古浪县| 清新县| 铜山县| 兰州市| 抚州市| 泽库县| 广昌县| 镇安县| 桓台县| 黄陵县| 南开区| 广饶县| 西畴县| 手游| 和林格尔县| 安乡县| 德阳市| 肃北| 新巴尔虎右旗| 永仁县|