利用Rational Application Developer Visual Editor實(shí)現(xiàn)Sw -電腦資料

電腦資料 時(shí)間:2019-01-01 我要投稿
【m.clearvueentertainment.com - 電腦資料】

利用 Rational Application Developer Visual Editor 實(shí)現(xiàn) Swing 可視化組件與數(shù)據(jù)的綁定

引言

Java™可視化編輯器允許用戶以圖形化的方式編輯 Java 用戶界面,

利用Rational Application Developer Visual Editor實(shí)現(xiàn)Sw

。在 IBM Rational Application Developer for WebSphere® Software V6 中,這一功能得到了進(jìn)一步的增強(qiáng)。因?yàn)?V6 支持可視化組件與不 同來(lái)源的數(shù)據(jù)快速綁定,比如,這些數(shù)據(jù)可以來(lái)源于 Web 服務(wù),也可以來(lái)源于 EJB 組件。這篇文章講述了如何利用數(shù)據(jù)綁定的優(yōu)秀特性,用一種快速而強(qiáng)大的 方法,來(lái)定義用戶界面的數(shù)據(jù)讀取和數(shù)據(jù)寫入。

Swing 概覽

如同 許多其它部件一樣,AWT(抽象窗口工具)和 Swing 圖形界面組件均被包括在 JAVA 基礎(chǔ)類庫(kù)(JFC)中,它們提供了一個(gè)框架,可以輕松的構(gòu)造圖形用戶界面 (GUI),為 JAVA 應(yīng)用程序添加豐富的圖形化功能性和互操作性。Swing 是一個(gè) 功能豐富的通用工具包,它提供了很多非常實(shí)用的功能。但出于我們的目標(biāo)需要 ,在這里我們只集中描述兩個(gè)重要的功能,因?yàn)檫@兩個(gè)功能對(duì)于理解可視化編輯 器的綁定模型和綁定操作是最為重要的。

使用 Swing 的數(shù)據(jù)模型

大部分的 Swing 組件均有一些模型,利用這些模型,您可以靈活地決定 如何存儲(chǔ)和檢索應(yīng)用程序中的數(shù)據(jù)。其中,在 Rational Application Developer(以下簡(jiǎn)稱為Application Developer)的數(shù)據(jù)綁定工具中就有兩個(gè)這 樣的模型,它們是文檔和表格模型,下面讓我們看看這兩個(gè)模型:

圖 1 :文擋模型

在文檔模型中(如圖 1),使用文本組件從它的數(shù)據(jù)視圖中分離出數(shù) 據(jù)(稱為模型),該模型實(shí)現(xiàn)了 javax.swing.text.Document 接口,并提供以 下的服務(wù):

包含文本。文檔把文本內(nèi)容存儲(chǔ)在 javax.swing.text.Element 對(duì)象中,同時(shí)還可表示任意文本邏輯結(jié)構(gòu),比如段 落、共享樣式文本等等。

通過(guò) remove(String aString) 和 insertString(int position, String aString, AttributeSet anAttributeSet) 來(lái)提供對(duì)文本編輯的支持。

將文本的改動(dòng)通知給文檔 并使編輯 可撤銷改動(dòng)。

管理 Position 對(duì)象。當(dāng)文本內(nèi)容 被更改時(shí),Position 對(duì)象會(huì)跟蹤文本中的特定位置。

使您能夠獲取文本 的相關(guān)信息(例如它的長(zhǎng)度),以及文本片段。

下面是在文本域中設(shè)置 一個(gè)文檔的例子:

Document doc = new MyDocument();
...
textfield = new JTextField();
textfield.setDocument (doc);

圖 2:表格模型

在表格模型中(圖 2),圖形化組件使您可以列出行和列的數(shù)據(jù),同 時(shí)有滾動(dòng)條來(lái)提供分頁(yè)功能。每一個(gè)表格都從實(shí)現(xiàn) javax.swing.table.TableModel 接口的對(duì)象中獲取數(shù)據(jù)。通常,您可以將表格 模型作為 javax.swing.table.AbstractTableModel 類的子類來(lái)實(shí)現(xiàn)。

您的表格模型可以用 array、list、或 hash map 來(lái)存儲(chǔ)數(shù)據(jù),或者可以從外部 數(shù)據(jù)源(比如數(shù)據(jù)庫(kù))獲取內(nèi)容。在某些情況下,模型可以在執(zhí)行期間實(shí)際生成 數(shù)據(jù)。

我們可以用 JTable 顯示任意數(shù)據(jù)模型,并通過(guò)下面的代碼來(lái)實(shí) 現(xiàn) TableModel 接口:

TableModel myData = new MyTableModel ();
JTable table = new JTable();
table.setModel (myData);

使用 Swing 操作

當(dāng)有兩個(gè)或更多執(zhí)行相同功能 的組件時(shí),我們通常使用操作對(duì)象將功能封裝起來(lái),并實(shí)現(xiàn) javax.swing.Action 接口。操作對(duì)象是一種操作 ,它提供操作--事件的 處理。使用 setAction 方法將操作添加到組件中,就會(huì)產(chǎn)生以下效果:

組件的狀態(tài)被更新以匹配操作的狀態(tài)。例如,如果設(shè)置了操作的文本和圖標(biāo)的值 ,組件的文本和圖標(biāo)就會(huì)更新,以反映這種變化。

在組件中,操作對(duì)象 被注冊(cè)為操作

如果操作的狀態(tài)發(fā)生改變,組件的狀態(tài)會(huì)被更新以 匹配該操作。例如,如果您改變了操作的啟用狀態(tài),所有與之關(guān)聯(lián)的組件都會(huì)改 變各自的啟用狀態(tài),以匹配操作的改變。

這里有一個(gè)為按鈕設(shè)置操作的 例子:

Action myAction = new MyAction();
...
button = new JButton();
button.setAction (myAction);

Swing 可視化組件的數(shù)據(jù)綁定

Eclipse 中的 可視化編輯器使用 AWT/Swing 組件來(lái)支持可視化結(jié)構(gòu)。設(shè)計(jì)選項(xiàng)板包含了常用 的組件、容器、菜單及控件,并使用可擴(kuò)展、壓縮和打開(kāi)的 drawer 將它們組織 起來(lái)。

如果在綁定 Swing 可視化組件時(shí)不使用 Application Developer binder, 那么就是一種手動(dòng)操作處理,這就要求我們?cè)谠O(shè)計(jì)代碼編輯器(design source editor)中加入正確的代碼。然而,如果我們使用 binder,就可以使用數(shù)據(jù)源 、數(shù)據(jù)對(duì)象以及 Swing binder 助手類的組合,并利用可視化反饋,從而可以更 加快速、更加簡(jiǎn)便的進(jìn)行可視化組件的數(shù)據(jù)綁定。

Application Developer 中支持的缺省 Swing 可視化組件包括文本域、表格 、按鈕。如果需要,您還可以通過(guò)實(shí)現(xiàn)所提供的接口,為其它組件編寫 binder 。Visual Editor 提供的對(duì)話框可以幫助您創(chuàng)建數(shù)據(jù)對(duì)象和數(shù)據(jù)源,您可以使用 它們來(lái)綁定可視化組件。然而,如果不使用這些對(duì)話框,您還可以通過(guò)選項(xiàng)板添 加基本數(shù)據(jù)對(duì)象、數(shù)據(jù)源數(shù)據(jù)對(duì)象及數(shù)據(jù)源,并使用 Properties 視圖對(duì)它們進(jìn) 行配置?紤]到將來(lái)可能要支持其它選件(widget)庫(kù),數(shù)據(jù)源和數(shù)據(jù)對(duì)象類均 完全獨(dú)立于可視化組件。

當(dāng)您將可視化組件綁定到數(shù)據(jù)源和數(shù)據(jù)對(duì)象時(shí),binder 代碼會(huì)根據(jù)需要被生 成到您的項(xiàng)目源文件目錄中。在缺省情況下,所生成的類會(huì)被添加到項(xiàng)目的 jve.generated 包中。然后,您可以自由地?cái)U(kuò)展、替換、或重寫數(shù)據(jù)綁定邏輯。 倘若您更改了 jve.generated 類并添加一些自定義的業(yè)務(wù)邏輯,它們將不會(huì)被 Visual Editor 改寫。

Swing binder

Binder 將可視化組件連接到數(shù)據(jù)對(duì)象?梢暬M件和它的 binder 之間是一 對(duì)一的關(guān)系。但數(shù)據(jù)對(duì)象和同它發(fā)生交互的 binder 之間則是一對(duì)多關(guān)系。換句 話說(shuō),就是可以將多個(gè)可視化組件綁定到一個(gè)給定的數(shù)據(jù)對(duì)象,但每個(gè)可視化組 件都需要它自己的 binder。

數(shù)據(jù)源

數(shù)據(jù)源如同數(shù)據(jù)工廠,它的目的是為數(shù)據(jù)對(duì)象提供數(shù)據(jù),以及獲取原始數(shù)據(jù) 。Application Developer 的可視化編輯器支持的數(shù)據(jù)源包括 J2EE 會(huì)話 bean 、Web 服務(wù)以及JavaBean。數(shù)據(jù)源可以看作是虛包(facade)工廠,它提供了各 種配置屬性,從而可以實(shí)現(xiàn)數(shù)據(jù)源虛包的實(shí)例化和初始化。虛包是包含一套方法 的類,利用它,你可以從后臺(tái)創(chuàng)建數(shù)據(jù)對(duì)象,或提供一些其它的業(yè)務(wù)功能。當(dāng)然 ,這需要數(shù)據(jù)源實(shí)現(xiàn)者正確地實(shí)例化虛包。

數(shù)據(jù)對(duì)象

數(shù)據(jù)對(duì)象代表本地可用數(shù)據(jù)的對(duì)象。利用它,客戶端組件可以進(jìn)行交互;它 也是對(duì)象的封裝器,可以管理該對(duì)象的屬性變更事件。

圖 3 顯示的是 Application Developer 中的設(shè)計(jì)選項(xiàng)板,包括可視化組件 的 drawer,以及數(shù)據(jù) binder。

圖 3:Rational Application Developer 設(shè)計(jì)選項(xiàng)板

MyBooks 應(yīng)用程序范例

這里,我們對(duì) MyBooks 程序做了一些改動(dòng),以便我們能更好地關(guān)注 Application Developer visual editor for data binding 所支持的三個(gè) Swing 可視化組件:JTextField、JTable 和 JButton。圖 4 顯示了 MyBooks 應(yīng)用程序的一個(gè)屏幕截圖,該程序?qū)?XML 數(shù)據(jù)顯示在 JTable 中,XML 文件名 顯示在 JTextField 里,同時(shí)還有一個(gè)名為 SAVE 的 JButton。

圖 4 MyBooks 應(yīng)用程序表格模型

MyBooks 采用了一個(gè)參數(shù):XML 文件的名稱,它包含了所有在表格中顯示的 書籍清單。當(dāng)我們按下了 SAVE 按鈕后,表格中的內(nèi)容將被保存在文本域中指定 的 XML 文件里。

為了創(chuàng)建 MyBooks 應(yīng)用程序,我們?cè)?A 部分中設(shè)計(jì)好基本 GUI,然后在 B 部分中使用 Application Developer 可視化地將 GUI 與數(shù)據(jù)綁定起來(lái)。

A 部分:構(gòu)建用戶界面和 JAVA 數(shù)據(jù)工廠

為了構(gòu)建 MyBooks 的用戶界面,我們將使用可視化編輯器:

創(chuàng)建一個(gè) JAVA 項(xiàng)目

在 Application Developer 中,選擇 File => New => Project。

選擇 Java Project 并按下 Next 按鈕。

為項(xiàng)目輸入名稱 MyBooks ,然后按下 Next 按鈕。

從 Application Developer 安裝程序中將 xsdbeans.jar 添加到 Java 構(gòu)建 路徑中,這個(gè) JVR 文件位于:

/SDP/6.0/rwd/eclipse/plugins/com.ibm.etools.xsd.codegen.xsdbeans_6.0.0\jars\xsdbeans.jar。

按下 Finish 按鈕。

創(chuàng)建包 ve.eclipse 和 ve.rad。

添加主要的可視類

在 Package Explorer 中,右鍵單擊項(xiàng)目并選擇 New => Other。

選擇 Visual Class 然后按下 Next 按鈕。

指定壓縮包的名稱為 ve。

指定類的名稱為 MyBooksApp。

確保超類 Superclass 是 javax.swing.JFrame,并且 public static void Main(String[] args) 被選中。

按下 Finish 按鈕。

定制 JFrame

將私有變量 filename 添加到該類中,數(shù)據(jù)類型為 String。

修改構(gòu)造函數(shù) MyBooksApp() 的結(jié)構(gòu),使其如下所示:

public MyBooksApp(String f) {
  super();
  filename = f;
  initialize();
}

修改 main(),使其如下所示: public static void main(String[] args) {
  MyBooksApp app = new MyBooksApp(args[0]);
  app.show();
}

在可視化編輯器窗口中選擇文本 JFrame,并在彈出的可編輯文本框中,輸入 MyBooks。

在可視化編輯器窗口中選擇 JFrame. 組件,并確保當(dāng)前處于 Properties 視 圖。

從 Properties 視圖中,將屬性 defaultCloseOperation 設(shè)置為 EXIT,然 后按下 Enter 按鈕。

從 Properties 視圖中,將屬性 size 設(shè)置為 400,200,然后按下 Enter 按 鈕。

添加一個(gè)文本域

功能:這一可視化組件將顯示 XML 文件名。

在選項(xiàng)板的 Swing Containers 部分中選擇 JPanel。 然后把它拖放到可視 化編輯器中 JFrame. 組件之外的位置。

在選項(xiàng)板的 Swing Containers 部分中選擇 JLabel,然后把它拖放到 JPanel 中。

從 Properties 視圖中,將 JLabel 的 text 屬性設(shè)為 XML filename:,然 后按下 Enter。

在選項(xiàng)板的 Swing Containers 部分中選擇 JTextField,然后把它拖放到 JPanel 中。

將 JPanel 放置在 JFrame. 的 North 部分。

添加一個(gè)按鈕

功能:這個(gè)可視化組件可以將表格中的數(shù)據(jù)保存到指定的 XML 文件中。

在選項(xiàng)板的 Swing Components 部分中選擇 JButton,并將它放置在 JFrame. 的 South 部分。

從 Properties 視圖中,將 JButton 的 text 屬性設(shè)為 SAVE,然后按 Enter。

添加一個(gè)表格

功能:該可視化組件將顯示 XML 文件的內(nèi)容

在選項(xiàng)板的 Swing Containers 部分中,選擇 JScrollPane 上的 JTable, 并把它放置到 JFrame. 的 Center 部分。

按下 CTRL-S 以保存可視類,然后關(guān)閉編輯器。

將類復(fù)制到 ve.eclipse 和 ve.rad 中。

這個(gè)練習(xí)的用戶界面部分現(xiàn)在已經(jīng)完成:我們創(chuàng)建了一個(gè) JAVA 項(xiàng)目以存儲(chǔ) 可視類 JFrame, 可視類由三個(gè)關(guān)鍵的 Swing 組件構(gòu)成,即 JTextField、 JButton 和 JTable.

不過(guò),我們只是完成了第一部分工作的一半,下一步就要編寫業(yè)務(wù)邏輯。利 用這些業(yè)務(wù)邏輯,我們可以在可視類和數(shù)據(jù)源之間進(jìn)行數(shù)據(jù)的讀取或?qū)懭搿T谶@ 個(gè)案例中,我們的數(shù)據(jù)源就是 XML 文本。此時(shí),可視化編輯器中的 GUI 如圖 5 所示。

圖 5:MyBooks GUI

Java 數(shù)據(jù)工廠的主要功能在于讀取 XML 文件的內(nèi)容。不過(guò),在我們創(chuàng)建 Java 數(shù)據(jù)工廠以前,我們得先創(chuàng)建 XML 文件和兩個(gè)數(shù)據(jù)類型:

創(chuàng)建 XML 文件

在 MyBooks 項(xiàng)目中新建一個(gè)文件,命名為 books.xml ,然后把下面的這些 內(nèi)容復(fù)制到所生成的文件中:

  
     VisualAge for Java for Non-Programmers
    Parkin, Burrus, Pullin
     2002
  

  
    Bird Life & Behavior
     Sibley
     2001
  

創(chuàng)建 book 數(shù)據(jù)類型

XML 文件的每個(gè)條目都會(huì)存儲(chǔ)在 book 對(duì)象中。新建一個(gè) JAVA 類,并把它 命名為ve.book,然后把下面的代碼粘貼到文件內(nèi)容中: =package ve;
import com.ibm.etools.xmlschema.beans.*;
public class book extends ComplexType {
  public book() {
  }
  public void setTitle(String title) {
    setElementValue("title", title);
  }
  public String getTitle() {
    return getElementValue("title");
  }
  public boolean removeTitle() {
    return removeElement("title");
  }
  public void setAuthor(String author) {
    setElementValue("author", author);
  }
  public String getAuthor() {
    return getElementValue("author");
  }
  public boolean removeAuthor() {
    return removeElement("author");
  }
  public void setCopyrightDate(String copyrightDate) {
     setElementValue("copyrightDate", copyrightDate);
  }
   public String getCopyrightDate() {
    return getElementValue ("copyrightDate");
  }
  public boolean removeCopyrightDate () {
    return removeElement("copyrightDate");
  }
}

創(chuàng)建 books 的數(shù)據(jù)類型

books 對(duì)象存儲(chǔ) book 的條目清單,

電腦資料

利用Rational Application Developer Visual Editor實(shí)現(xiàn)Sw》(http://m.clearvueentertainment.com)。新建一個(gè) JAVA 類,并把它命名為 ve.books ,將內(nèi)容設(shè)置為: package ve;
import com.ibm.etools.xmlschema.beans.*;
public class books extends ComplexType {
  public books() {
  }
  public void setBook(int index, book book) {
    setElementValue(index, "book", book);
  }
  public book getBook(int index) {
     return (book) getElementValue("book", "book", index);
  }
  public int getbookCount() {
    return sizeOfElement ("book");
  }
  public boolean removeBook(int index) {
     return removeElement(index, "book");
  }
}

創(chuàng)建 Java 數(shù)據(jù)工廠

新建一個(gè) Java 類,并把它命名為 ve.MyBooksDataSource,其內(nèi)容如下: package ve;
import com.ibm.etools.xmlschema.beans.*;
public class MyBooksDataSource extends Factory {
  public MyBooksDataSource() {
     super();
  }
  public book[] getBooks() {
    books iBooks = (books) loadDocument("books", getXMLFilename());
     book[] result = new book[iBooks.getbookCount()];
    for (int i = 0; i < iBooks.getbookCount(); i++) {
      result[i] = iBooks.getBook(i);
    }
    return result;
  }
  public BaseType loadDocument(String className, String filename) {
    return super.loadDocument(className, filename);
  }
}

如果我們現(xiàn)在運(yùn)行 MyBooks 應(yīng)用程序,會(huì)發(fā)現(xiàn)應(yīng)用程序還沒(méi)有數(shù)據(jù)內(nèi)容,因 為所有的 Swing 組件都尚未和數(shù)據(jù)綁定。在接下來(lái)的這一部分,我們將把數(shù)據(jù) 綁定到可視化組件。

B 部分:使用可視化編輯器綁定 MyBooks 用戶界面

我們繼續(xù)以自頂向下的方式來(lái)構(gòu)建 GUI,各個(gè)組件已經(jīng)被放置好。一旦看上 去沒(méi)什么缺陷,我們現(xiàn)在可以提供邏輯,使組件可以訪問(wèn)并更新數(shù)據(jù)。現(xiàn)在,我 們將可視化組件與對(duì)應(yīng)的數(shù)據(jù)綁定起來(lái)。

打開(kāi) JFrame

在 Application Developer 中,選擇 File => Import。

選擇 Existing Project into Workspace,然后按下 Next 按鈕。

選擇之前已創(chuàng)建的 MyBooks 項(xiàng)目,然后按下 Finish 按鈕。

在可視化編輯器中打開(kāi) ve.rad.MyBooksApp。

綁定文本域

選擇 textfield,這時(shí),在 textfield 的左上方會(huì)出現(xiàn)一個(gè) Bind... 選項(xiàng) 。

選擇 Bind...,會(huì)打開(kāi)一個(gè)對(duì)話框,該對(duì)話框可以讓您指定如何綁定到數(shù)據(jù) 的細(xì)節(jié)。

在 Field Data Bindings 窗口中,選擇 New Data Source Data Object... 。

在 New Data Source Data Object 窗口中,選擇 Java Bean Factory 作為 source type。

選擇 Data source 下拉框后面的 New...。

在 Choose a Bean 窗口中,搜索并選擇 ve.MyBooksDataSource。然后按下 OK 按鈕以添加該數(shù)據(jù)源。

在 Source service 文本框中,選擇 getXMLFilename() ,這是數(shù)據(jù)源虛包 MyBooksDataSource.java 中一個(gè)方法的名稱。

在 Name 文本域中,將 stringObject 改為 xmlFilename,然后按下 OK 按 鈕。

再次按下 OK 按鈕。

綁定表格

選擇表格,在表格的左上方會(huì)出現(xiàn)一個(gè) Bind... 選項(xiàng)

選擇 Bind...。

在 Table Data Bindings 窗口中,選擇 New Data Source Data Object... 。

在 New Data Source Data Object 窗口中,只出現(xiàn)一個(gè) source service 方 法 getBooks(),這是返回?cái)?shù)組數(shù)據(jù)的唯一方法,這些數(shù)據(jù)可以在表格中使用。 按下 OK 按鈕,這時(shí)我們就選用了 getBooks() 方法。

將數(shù)據(jù)對(duì)象屬性 author、copyrightDate及 title 添加到表格的列清單中。

按下 OK 按鈕。

在可視化編輯器中,選擇非可視 bean MyBooksDataSource,打開(kāi)或激活 Properties 視圖。

展開(kāi)屬性 dataSource。

將屬性 encoding 設(shè)為 UTF-8 ,然后按下 Enter 按鈕。

將屬性 encodingTab 設(shè)為 UTF-8 ,然后按下 Enter按鈕。

將屬性 packageName 設(shè)為 ve,然后按下 Enter 按鈕。

將屬性 xmlFilename 設(shè)為 filename ,并按下 Enter. 按鈕,然后在代碼編 輯器中修改生成的代碼, 將

myBooksDataSource1.setXMLFilename("filename");

改為:

myBooksDataSource3.setXMLFilename(filename);.

綁定按鈕

選擇按鈕,在按鈕的左上方會(huì)出現(xiàn)一個(gè)Bind...選項(xiàng)

選擇 Bind... .

在 Component Action Bindings 窗口中,選擇 source service 文本框里的 save(java.lang.String)。

在 Argument 下拉列表框中,選擇 xmlFilename

按下 OK 按鈕。

保存文件。

現(xiàn)在,MyBooks 應(yīng)用程序已完成,圖 6 顯示的是該程序的屏幕截圖。

圖 6:已完成的 MyBooks 應(yīng)用程序

測(cè)試應(yīng)用程序

為了測(cè)試您的應(yīng)用程序,您需要在運(yùn)行配置中提供 XML 文件名作為參數(shù):

在工具條上,選擇 Run 圖標(biāo)旁的箭頭,并選擇 Run...

在 Run 窗口中,選擇 Java Application 作 為啟動(dòng)程序。

按下 New,在窗口中會(huì)彈出一個(gè)新的運(yùn)行配置框,Main 選項(xiàng)卡中,填入您的項(xiàng)目名 MyBooks 和應(yīng)用程序名 ve.rad.MyBooksApp。

選擇 Arguments 選項(xiàng)卡,輸入 XML 文件名的全路徑,當(dāng)應(yīng)用程序啟動(dòng)時(shí),在 Arguments 選項(xiàng)卡中填寫的程序參數(shù)將被傳遞給 main(String[] args) 方法,這就是該應(yīng)用程序獲得參數(shù)值的方法。

選擇 Run。

更改 XML 文件名。

按下 Save 按鈕。檢查表格的內(nèi)容是否被保存到指定的文件和位置。

關(guān)閉 MyBooksApp。

C 部分: 使用 Eclipse 可視化編輯器綁定 MyBooks 用戶界面(可選)

本部分是可選擇,因?yàn)樗枋龅氖鞘褂?Eclipse 可視化編輯器(它沒(méi)有數(shù)據(jù)綁定工具)來(lái)綁定第一部分中創(chuàng)建的用戶界面,本部分的目的是與 Application Developer 提供的綁定工具進(jìn) 行對(duì)比,從而凸顯使用數(shù)據(jù)綁定工具的優(yōu)勢(shì)。

為了使用 Eclipse 可視化編輯器,我們需要以下組件(這些組件可以從 Eclipse 可視化編輯器項(xiàng)目中下載):

Eclipse build eclipse-SDK 3.0.1

Visual Editor 1.0.2

EMF build 2.0.1

GEF build 3.0.1

創(chuàng)建表格模型

為了在運(yùn)行時(shí)顯示表格,你必須為表格模型提供實(shí)際數(shù)據(jù),然后將表格模型和 JTable bean 相關(guān)聯(lián)。表格模 型提供了多種可以被 JTable bean 調(diào)用的方法,利用這些方法,JTable bean 就能獲取一些信息,如表格的行數(shù)和列數(shù),或者是用在特定表格單元的數(shù)據(jù)。您需要在表格模型類中實(shí)現(xiàn)這些方 法,這樣,JTable bean 就可以訪問(wèn)模型中的數(shù)據(jù),并在表格視圖中顯示出來(lái)。

下面,我們新建一個(gè) JAVA 類,并命名為 ve.eclipse.MyBooksTableModel。用下面的代碼代替所生成的文件的內(nèi)容:

package ve.eclipse;
import javax.swing.table.AbstractTableModel;
import ve.*;
public class MyBooksTableModel extends AbstractTableModel {
private MyBooksDataSource iBooksFactory;
private books iBooks;
public MyBooksTableModel() {
super();
}
public MyBooksTableModel(String xmlFile) {
super();
iBooksFactory = new MyBooksDataSource();
iBooksFactory.setPackageName("ve");
iBooksFactory.setEncoding("UTF8");
iBooksFactory.setEncodingTag("UTF-8");
iBooks = (books) iBooksFactory.loadDocument("books", xmlFile);
}
public String getXMLFile() {
return iBooksFactory.getXMLFilename();
}
public void setXMLFile(String filename) {
iBooksFactory.setXMLFilename(filename);
}
public void save(String fname) {
iBooksFactory.save(fname);
}
public int getColumnCount() {
return 3;
}
public int getRowCount() {
return iBooks.getbookCount();
}
public Object getValueAt(int rowIndex, int columnIndex) {
switch (columnIndex) {
case 0: return iBooks.getBook(rowIndex).getTitle();
case 1: return iBooks.getBook(rowIndex).getAuthor();
case 2: return iBooks.getBook(rowIndex).getCopyrightDate();
}
return null;
}
public String getColumnName(int arg0) {
switch (arg0) {
case 0: return "Title";
case 1: return "Author";
case 2: return "Copyright Date";
}
return "";
}
}

綁定表格 table

a.在可視化編輯器中打開(kāi) ve.eclipse.MyBooksApp.java。

b.從選項(xiàng)板中選擇 Choose Bean ,會(huì)彈出 Choose a Bean 對(duì)話框。

c.找到 ve.eclipse.MyBooksTableModel,并按下 OK 按鈕。

d.把非可視 bean 放到可視化編輯器中,注意不要和 JFrame. 重疊,這一操作將生成 getMyBooksTableModel()。

e.修改 getMyBooksTableModel(),使其如下所示:

private MyBooksTableModel getMyBooksTableModel() {
if (myBooksTableModel == null) {
myBooksTableModel = new MyBooksTableModel(filename);
}
return myBooksTableModel;
}

f.在 Java Beans 視圖中,選擇 table。

g.修改 getJTable(),使其如下所示:

private JTable getJTable() {
if (jTable == null) {
jTable = new JTable();
jTable.setModel(getMyBooksTableModel());
}
return jTable;
}

綁定文本域

a.在 Java Beans 視圖中選擇 text field。

b.修改 getJTextField(),使其如下所示:

private JTextField getJTextField() {
if (jTextField == null) {
jTextField = new JTextField();
jTextField.setText(filename);
}
return jTextField;
}

綁定按鈕 button

a.右鍵單擊 SAVE 按鈕,并選擇 Events => actionPerformed.

b.修改 getJButton(),如下所示:

private JButton getJButton() {
if (jButton == null) {
jButton = new JButton();
jButton.setText("SAVE");
jButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent e) {
getMyBooksTableModel().save(getJTextField().getText());
}
});
}
return jButton;
}

c.保存文件。

5.測(cè)試應(yīng)用程序

為了測(cè)試您的應(yīng)用程序,您需要在運(yùn)行配置中提供 XML 文件名作為參數(shù):

a.在工具條上,選擇 Run 圖標(biāo)旁的箭頭,然后選擇 Run...

b.在 Run 窗口中,選擇 Java Application 作為啟動(dòng)程序。

c.按下 New 按鈕,在窗口中會(huì)彈出一個(gè)運(yùn)行配置框,然后在 Main 選項(xiàng)卡中,填寫項(xiàng)目名 MyBooks,及應(yīng)用程序名 ve.eclipse.MyBooksApp。

d.選擇 Arguments 選項(xiàng)卡,輸入 XML 文件名的全路徑,當(dāng)應(yīng)用程序啟動(dòng)時(shí),在 Arguments 選項(xiàng)卡中輸入的程序參數(shù)將被傳遞給 main(String[] args) 方法, 這就是該應(yīng)用程序獲得參數(shù)值的方法。

e.選擇 Run。

f.更改 XML 文件名。

g.按下 Save 按鈕。檢查表格內(nèi)容是否被保存到指定的文件和位置。

h.關(guān)閉 MyBooksApp。

這個(gè)練習(xí) 的可選部分也完成了。你會(huì)注意到,許多步驟都需要手工編寫代碼將數(shù)據(jù)綁定到用戶界面,尤其是表格模型。相比之下,Application Developer 的可視化編輯器提供了非常簡(jiǎn)便的用戶界面 ,利用它,絕大部分代碼都可以自動(dòng)生成。

結(jié)束語(yǔ)

Application Developer Visual Editor 為我們提供了很多易于使用的工具。利用它,只需對(duì)生成的代碼作小小的改動(dòng),即可綁定 Swing 可視化組件,如文本域、表格、按鈕。使用文檔模型可以自動(dòng)設(shè)置文本域中的文本;且表格模型也是自動(dòng)生成并被添加到表格組件中;操作被自動(dòng)設(shè)置到按鈕中。相比之下,用 Eclipse 完成同樣的任務(wù),則需要更多的手工處理。您必須創(chuàng)建自己的表格模型,并編寫相關(guān)原代碼,設(shè)置文本域中的文本,為按鈕添加操作 ,并在表格上設(shè)置表格模型,F(xiàn)在, Application Developer 的價(jià)值已經(jīng)很清晰了;您可以馬上用它來(lái)簡(jiǎn)化 J2EE 應(yīng)用程序的開(kāi)發(fā)。

最新文章