《Java語言程序設(shè)計》課件第12章_第1頁
《Java語言程序設(shè)計》課件第12章_第2頁
《Java語言程序設(shè)計》課件第12章_第3頁
《Java語言程序設(shè)計》課件第12章_第4頁
《Java語言程序設(shè)計》課件第12章_第5頁
已閱讀5頁,還剩30頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

12.1軟件組件模型

12.2JavaBean的概念及特點

12.3JavaBean的組成

12.4JavaBean的編寫與使用 12.5JavaBean與數(shù)據(jù)庫

12.6小結(jié)

12.7習(xí)題

長期以來,程序開發(fā)人員在應(yīng)用程序開發(fā)中,發(fā)現(xiàn)很多功能類似的程序模塊總是重復(fù)出現(xiàn),為避免這些程序的重復(fù)開發(fā),產(chǎn)生了軟件組件技術(shù)。軟件組件是按照“一次開發(fā),任何地方重復(fù)使用”原則開發(fā)的自包含軟件單元。換句話說,軟件組件是離散的、可重用的軟件單元。

組件技術(shù)具有可以重復(fù)使用、易于替換和升級、可以加快軟件的開發(fā)速度和縮短軟件開發(fā)周期的特點。12.1軟件組件模型

JavaBean就是Java的組件模型。常見的還有COM組件技術(shù),它是Microsoft提出的一種組件模型;還有DCOM和CORBA,是在分布式應(yīng)用上常見的組件模型。

組件分為可視化組件和非可視化組件,可視化組件具有可視的功能,如在VB或Delphi等開發(fā)工具中使用的按鈕、文本輸入框等組件。非可視化組件在后臺工作,不可視,如VB或Delphi使用的定時器,它就是一種非可視化組件。

傳統(tǒng)的JavaBean主要應(yīng)用在可視化領(lǐng)域,如多列的列表框、菜單項等,但隨著JSP等技術(shù)的發(fā)展,JavaBean在非可視化領(lǐng)域的應(yīng)用更為廣泛,特別是在JSP的服務(wù)器端應(yīng)用方面表現(xiàn)出越來越強(qiáng)的生命力。所謂JavaBean,就是在基于Java組件規(guī)范的基礎(chǔ)上,可以在軟件工具上可視化操作的、可重復(fù)使用的、獨立于平臺的軟件組件。

JavaBeanAPI官方文檔中有這樣的定義:“JavaBean是在開發(fā)工具上可視化操作的、可重用的軟件組件(AJavaBeanisareusablesoftwarecomponentthatcanbemanipulatedvisuallyinabuildertool)。”12.2JavaBean的概念及特點

JavaBean它既不是Applet,也不是Aplication,而是一個獨立的、可重用的軟件組件,可以用構(gòu)造工具來直觀地操縱它。

JavaBean具有獨立性、可重復(fù)使用、在可視化工具(如Jbuilder、VisualAge或Visualcofe等)中使用、狀態(tài)可以保存等特點。12.3.1JavaBean的屬性

屬性定義了JavaBean的外觀或者行為特征,在運行時可以通過它們的get和set方法來獲取或設(shè)置它們的值。

JavaBean屬性分為四種屬性:

●單值屬性:它標(biāo)識一個單獨的值,可以使用get和set方法來設(shè)定或獲取。

●索引屬性:表示一個成員數(shù)組,包含幾個類型相同的數(shù)據(jù)元素。12.3JavaBean的組成●綁定屬性:如果屬性值修改,則向其他對象提供通知,一般是給JavaBean注冊一個外部的事件偵聽器,當(dāng)屬性值發(fā)生變化時,產(chǎn)生通信事件。事件偵聽器注冊和取消注冊一般使用addPropertyChangeListener()和removePropertyChangeListener()方法。

●限制屬性:能夠在屬性值被修改的時候給其他對象發(fā)送通知,注冊成限制屬性的偵聽器的對象,其屬性值可以拒絕修改,一般采用addVetoableChangeListener()和removeVetoableChangeListener()方法來注冊和取消注冊。12.3.2JavaBean的事件

事件是在JavaBean之間或JavaBean和容器之間傳送異步消息的機(jī)制。JavaBean用事件通知另一個JavaBean做某個動作或者告訴某個JavaBean狀態(tài)已經(jīng)發(fā)生改變。事件允許JavaBean在發(fā)生某些事件時進(jìn)行通信。通信包含三部分:事件對象、事件監(jiān)聽者和事件源。

JavaBean主要使用繼承了EventListener的事件監(jiān)聽者接口來進(jìn)行通信。JavaBean的開發(fā)者可以使用他們自定義的事件類型和事件監(jiān)聽者接口,并可以使它們的JavaBean作為實現(xiàn)addXXXListener()和removeXXXListener()方法的源,即作為通信中的事件源,其中XXX是事件類型的名稱。然后開發(fā)者可以通過實現(xiàn)XXXListener接口使其他Beans作為事件監(jiān)聽者。調(diào)用sourceBean.addXXXListner(targetBean)方法將sourceBean和targetBean結(jié)合在一起。12.3.3JaveBean的方法

方法是一種用于和JavaBean交互的操作。由合適的事件源方法來調(diào)用JavaBean,可以使它們接收到事件通知。某些方法是特殊的,用來處理屬性和事件。這些方法必須遵循

JavaBean規(guī)范中的命名規(guī)定。其他方法可能和事件或?qū)傩詻]有關(guān)系。JavaBean的所有公共方法對于JavaBean框架是可存取的,且能用來將一個JavaBean連接到其他JavaBean。

JavaBean主要有兩種開發(fā)方式,一種是以手寫代碼的方式來編寫,另一種方式是使用應(yīng)用程序生成器工具來生成JavaBean。

例12-1為JavaBean的編寫過程,并演示了索引屬性值的改變。

首先編寫一個類,使其繼承Beans類,其屬性值設(shè)為private屬性,并使用getXXX和setXXX的方法來獲取或設(shè)置屬性值。例12-1中的ItemName屬性可以由getItemName()方法來獲取,由setItemName()方法來設(shè)置,并且給出了此JavaBean添加注冊偵聽器和移除偵聽器的方法addPropertyChangeListener()和removePropertyChangeListener()。12.4JavaBean的編寫與使用【例12-1】JavaBean文件Items.java。

importjava.beans.*;

importjavax.swing.*;

publicclassItemsextendsBeans

{

privatePropertyChangeSupportsupport;

privateString[]ItemNames={"書法繪畫","文化藝術(shù)","體育運動"};

publicItems()

{support=newPropertyChangeSupport(this);

}

publicStringgetItemName(intindex)

{

returnItemNames[index];

}

publicvoidsetItemName(intindex,StringItemName)throwsArrayIndexOutOfBoundsException

{

this.ItemNames[index]=ItemName;

}publicvoidaddPropertyChangeListener(PropertyChangeListenerl)

{

support.addPropertyChangeListener(l);

}

publicvoidremovePropertyChangeListener(PropertyChangeListenerl)

?{

support.removePropertyChangeListener(l);

}

}例12-2中,創(chuàng)建了剛編寫的JavaBean對象“bean1”,然后調(diào)用“bean1”的setItemName來設(shè)置其屬性值,調(diào)用getItemName()來獲取某個索引index下的值。

【例12-2】JavaBean的調(diào)用示例文件TestBean.java。

importjavax.swing.*;

importjava.awt.*;

publicclassTestBeanextendsJFrame

{

JPaneljp=newJPanel();

Itemsbean1=newItems();

publicTestBean()

{ JTextFieldt1=newJTextField(10);

t1.setText(bean1.getItemName(0));

JTextFieldt2=newJTextField(10);

bean1.setItemName(1,"文學(xué)藝術(shù)");

t2.setText(bean1.getItemName(1));

setLayout(newBorderLayout());

jp.add(t1);jp.add(t2);

add(jp,BorderLayout.CENTER);

}publicstaticvoidmain(Stringargs[])

{

TestBeanf=newTestBean();

f.setTitle("測試JavaBean");

f.pack();

f.show();

f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

}

}程序執(zhí)行結(jié)果如圖12-1所示,以getItemName()獲取索引index=0時的值為“書法繪畫”,顯示在TextField1中;以setItemName來改變index=1時的值,即由“文化藝術(shù)”變?yōu)椤拔膶W(xué)藝術(shù)”,顯示在TextField2中。圖12-1手工編寫JavaBean下面以數(shù)據(jù)庫訪問為例來說明JavaBean的使用。

在db.java源文件中,定義了連接數(shù)據(jù)庫、關(guān)閉數(shù)據(jù)庫連接和運行查詢的方法。在emp.java中emp類繼承db類,并實施了具體的查詢,并將結(jié)果以getXXX()的方式返回,便于其他應(yīng)用程序獲取。在TestBean.java中,創(chuàng)建emp的對象,并通過輸入的empno的值,傳遞給Bean中的查詢方法實施查詢,查詢后的結(jié)果以對象的getXXX()方法獲取,并輸出顯示。運行結(jié)果見圖12-2。12.5JavaBean與數(shù)據(jù)庫圖12-2JavaBean示例【例12-3】db.java文件。

packagedb;

import.*;

importjava.sql.*;

importjava.io.*;

publicclassdb

{

Connectionconn;

Statementstmt;

ResultSetrs;

publicvoidgetConnection(){try

{

Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");

conn=DriverManager.getConnection(

"jdbc:odbc:driver={MicrosoftAccessDriver(*.mdb)};DBQ=D:\\Worker.mdb");

}

catch(Exceptione){System.out.println(e.getMessage());}

}

publicvoidcloseConnection()

{try

{if(conn!=null){conn.close();}

}

catch(Exceptione){System.out.println(e.getMessage());}

}

publicResultSetexecuteQuery(Stringsql)

{rs=null;

try

{

getConnection();

if(conn!=null)

{stmt=conn.createStatement();

rs=stmt.executeQuery(sql);

}

}catch(Exceptione){System.out.println(e.getMessage());}

returnrs;

}

}【例12-4】emp.java文件。

packagedb;

importjava.sql.*;

publicclassempextendsdb

{

privateStringempno;

privateStringename;

privateStringjob;privateStringmgr;

privateStringhiredate;

privateStringsal;

privateStringcomm;

privateStringdeptno;

publicvoidquery()

{try

{

StringsSql="select*fromWorkerwhereempno='"+empno+"'";

ResultSetrs=executeQuery(sSql);

if(rs.next())

{ename=rs.getString("ename");

job=rs.getString("job");

mgr=rs.getString("mgr");

hiredate=rs.getString("hiredate");

sal=rs.getString("sal");

comm=rs.getString("comm");

deptno=rs.getString("deptno");

}

}catch(Exceptione){System.out.println(e.getMessage());}

}publicvoidsetempno(Stringem){empno=em;}

publicStringgetename(){returnename;}

publicStringgetDeptno(){returndeptno;}

publicStringgetHiredate(){returnhiredate;}

publicStringgetJob(){returnjob;}

publicStringgetMgr(){returnmgr;}

publicStringgetSal(){returnsal;}

publicStringgetComm(){returncomm;}

}【例12-5】TestBean.java文件。

packagedb;

importjava.io.*;

importjava.sql.*;

classTestBean

{

publicstaticvoidmain(Stringargs[])

{

Stringempno;

empem;

try{

System.out.print("請輸入工號:");

BufferedReaderbr=newBufferedReader(newInputStreamReader(System.in));

empno=br.readLine();

em=newemp();

em.setempno(empno);

em.query();

System.out.println("姓名:"+em.getename());System.out.println("職位:"+em.getJob());

System.out.println("上級:"+em.getMgr());

System.out.printl

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論