《JAVA基礎教程》第四章 Java應 用 程 序 的 基 本 框 架_第1頁
《JAVA基礎教程》第四章 Java應 用 程 序 的 基 本 框 架_第2頁
《JAVA基礎教程》第四章 Java應 用 程 序 的 基 本 框 架_第3頁
《JAVA基礎教程》第四章 Java應 用 程 序 的 基 本 框 架_第4頁
《JAVA基礎教程》第四章 Java應 用 程 序 的 基 本 框 架_第5頁
已閱讀5頁,還剩4頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、第 四 章 Java應 用 程 序 的 基 本 框 架 學 習 一 門 新 語 言 最 好 是 先 看 幾 個 簡 單 的 程 序 例 子。 下 面 我 們 將 看 到 幾 個 非 常 基 本 的 程 序 例 子。 4.1 Java應 用 程 序 的 運 行 環(huán) 境Java應 用 程 序 是 指 可 以 獨 立 運 行 在Java虛 擬 機 上 的 程 序, 它 是 一 種 中 間 代 碼(byte-code?copy;。 比 如 你 的 應 用 程 序 叫my.java, 程 序 里 有 一 個 名 稱 為app1的 類, 用Javac或 其 它 編 譯 器, 編 譯 后 將 會 生 成ap

2、p1.class, 則 在 命 令 行 狀 態(tài) 下 輸 入:java app1就 可 以 運 行 此 程 序。 注 意, 用java 命 令 運 行 的 類 必 須 有main函 數, 否 則 不 能 執(zhí) 行。 與 普 通java應 用 程 序 不 同 的 另 一 種 另 一 種Java程 序 叫Java Applet。 我 們 把 它 譯 成Java小 程 序, 這 種 程 序 后 綴 也 是.class, 但 它 不 能 直 接 在java虛 擬 機 上 運 行, 也 就 是 輸 入java *.class不 能 運 行, 這 種 程 序 里 可 以 沒 有main函 數, 它 必 須 由

3、 某 個 瀏 覽 器 來 運 行, 比 如Appletviewer或 Netscape2.02以 上 等。 這 種 程 序 我 們 將 在 后 面 章 節(jié) 中 介 紹。 4.2 最 簡 單 的Java程 序 解 釋 讓 我 們 來 看 一 看 最 簡 單 的Java應 用 程 序 例 子, 來 理 解 一 下 它 的 結 構: Filename:1.java class myfirst public static void main(String args ) System.out,println ("This is my first Java Application");

4、 這 就 是 一 個 完 整 的 Java 應 用 程 序, 將 它 編 譯: Javac 1.java 在 當 前 目 錄 下, 它 將 生 成myfirst.class 文 件, Java myfirst 屏 幕 上 將 會 輸 出:This is my first Java Application 讓 我 們 來 一 步 一 步 分 析 每 句 話 含 義 (1?copy; class myfirst 這 一 行 用 關 鍵 詞class來 定 義 名 為myfirst的 新 類,myfirst是 新 類 的 名 稱, 必 須 是 一 個 有 效 的 標 識 符, 有 效 標 識 符 定

5、 義 請 見 程 序 設 計 基礎章 節(jié)。 類 的 說 明 包 括 數 據 說 明 和 成 員 函 數 說 明, 都 放 在 類 后 面 的 大 括 號 里 面。 一 般 類 定 義 如 下: class 類 名 稱 數 據 定 義; 函 數 定 義; ( 2 )public static void main (String args ) public是 一 個 表 示 訪 問 權 限 的 關 鍵 字, 表 示 此 成 員 函 數 是 公 有 的, 可 以 被 其 他 類 直 接 調 用, 包 括java解 釋 器。 相 對 應 的 關 鍵 字 有private和protected,frien

6、d。private表 示 只 能 被 本 類 訪 問,protected表 示 只 能 被 子 類 訪 問,friend是 缺 省 的 訪 問 權 限, 表 示 能 被 本 包(package)中 任 意 類 訪 問, 對 其 它 包 中 的 類 是 不 可 訪 問 的。 static 表 示main 成 員 函 數 在myfirst類 的 所 有 對 象 中 是 唯 一 的, 因 此 如 果 本 程 序 生 成 另 一 個myfirst類 對 象, 調 用 的 main 函 數 將 是 同 一 個 函 數。 void 表 示 main 函 數 沒 有 返 回 值, 如 果 有 返 回 類 型

7、 值, 則 可 加 上interger 或boolean 諸 如 此 類, 對 于 有 返 回 值 的 函 數, 其 函 數 實 體 的 最 后 應 加 上return語 句。 main 這 個 函 數 是 這 運 行 應 用 程 序 的 入 口 點, 因 此 編 寫 應 用 程 序 是 必 須 有main( )函 數, 且 是 唯 一 的。 (3?copy; System.out.println 一 句 這 一 句 是main函 數 里 的 功 能 語 句, 是 調 用Java里 System 包 里 的out 類 的println成 員 函 數, 是 標 準 輸 入 輸 出。 4.3 Ja

8、va應 用 程 序 參 數 的 傳 遞Java語 言 很 類 似C和C+語 言。 在C語 言 里, 通 過 在 命 令 行 輸 入 參 數,C程 序 可 由main函 數 讀 入 這 ?copy; 參 數,java程 序 也 一 樣, 請 看 下 面 程 序: Filename:2.java class My2 public static void main (String args ) int arc = args.length; if (arc>0) for (int i =0;i ) m = new Memo(args0); else m = new Memo(); m.start

9、(); 將Frame聯 系 起 來 l 熟 悉 的 函 數 paint()和mouseDown(), 看 起 來 有 點 眼 熟。 這 ?copy; 函 數 與applet的 函 數 一 樣。 實 際 上, 一 個frame 包 含 各 種GUI組 件 與applet的 形 式 一 樣。 另 一 個 熟 悉 的 函 數 是start()。 這 個 函 數 并 不 必 要, 因 為 我 們 沒 有 覆 蓋 任 何 已 存 在 的 函 數。 但 你 想 繼 承applet編 程 的 風 格, 你 還 是 可 以 使 用start(),stop(),init()與destroy()等 函 數。 l

10、新 函 數 我 們 熟 悉 的 函 數start()調 用 了show()。show()函 數 是Window類 的 繼 承, 它 顯 示Fame及 其 所 有 組 件。 在mouseDown()函 數 里 我 們 看 到 兩 個 函 數:hide()和dispose()。hide()只 簡 單 地 使Frame不 可 見。 你 可 以 在 任 何 時 候 調 用 它 來 隱 藏 窗 口。 dispose()函 數 釋 放 由Frame占 有 的 系 統(tǒng) 資 源。 只 有 在 你 不 需 要Frame時 才 調 用 它。 l 構 造 函 數 Memo例 子 還 包 含 了 一 個 新 函 數M

11、emo()。 其 實 這 個 類 有 兩 個Memo()函 數! 任 何 與 類 名 相 同 的 函 數 都 是 構 造 函 數。 它 在 創(chuàng) 建 一 個 新 對 象 時 被 調 用。 你 可 以 認 為 它 是 一 個 對 象 的init()初 始 化 函 數。 為 什 么 需 要 兩 個 構 造 函 數 呢? 有 了 兩 個 構 造 函 數, 我 們 可 以 利 用 多 態(tài) 性 的 優(yōu) 點, 有 兩 種 方 法 創(chuàng) 建 一 個 新Memo對 象。 我 們 可 以 簡 單 的 創(chuàng) 建 使 用 缺 省 信 息 的Memo對 象: m = new Memo(); 或 者, 我 們 可 以 自 己

12、 提 ?copy; 信 息: m = new Memo("Our message"); Frame控 制 本 程 序 的 最 后 功 能 是 在main()里 建 立 并 顯 示frame。 它 由 以 下 兩 步 實 現: /Step 1 m = new Memo(); /Step 2 m.start(); 第 一 步 初 始 化memo對 象。 我 們 象 操 作 其 它 對 象 一 樣 操 作m。 為 顯 示frame, 我 們 需 要 調 用 show()。 這 在 第 二 步 里 實 現。 另 一 個 要 注 意 的 是 程 序 的健 壯 性: 我 們 基 本 的

13、frame里 沒 有 包 含 處 理 標 準 WINDOW_DESTROY消 息 的 函 數。 這 樣, 你 將 不 能 在 窗 口 的 控 制 菜 單 里 選 中"Quit"或"Exit"。 為 了 增 加 這 個 功 能, 你 需 要 增 加 以 下 的 處 理 程 序: public boolean handleEvent (Event e) if (e.id = Event.WINDOW_DESTROY) dispose(); System.exit(1); return true; else /Go ahead and do what we n

14、ormally would have done return super.handleEvent(e); 菜 單 圖 形 界 面 依 靠 菜 單 來 指 導 用 戶 操 作。 設 計 獨 立 的Java應 用 程 序 時,Java提 ?copy; 創(chuàng) 建 和 使 用 菜 單 的 直 接 方 法。 象 其 它 組 件 一 樣,new將 創(chuàng) 建 一 個 菜 單: Menu optionMenu; optionsMenu = new Menu("Options"); 菜 單 項 一 ?copy; 你 創(chuàng) 建 了 一 個 菜 單, 你 可 以 使 用add()來 組 建 菜 單 項

15、: optionsMenu.add(new MenuItem("Option1");optionsMenu.add(new MenuItem("Option2"); 菜 單 事 件 當 你 選 中 某 個 菜 單 項 時, 你 創(chuàng) 建 此 菜 單 項 的 字 符 ?reg; 將 在 事 件 中 返 回。 你 可 以 象 測 試 按 鈕 選 擇 一 樣 測 試 菜 單 選 擇: public boolean action (Event e, Object arg) . if (e.target instanceof MenuItem) System.out

16、.println(String) arg); . 其 它 菜 單 項 除 了 上 面 描 述 的 簡 單 菜 單 項 外, 你 還 可 增 加CheckBox菜 單 項, 分 割 線, 以 及 子 菜 單。 下 面 是 一 ?copy; 例 子: Menu m,n; m = new Menu("Examples"); m.add(new MenuItem("Basic"); m.add(new MenuItem("Simple"); /add a separator m.add(new MenuItem("-");

17、 /add a Checkbox item m.add(new CheckboxMenuItem("Check"); /add a submenu n = new Menu("More Examples");n.add(new MenuItem("Sub Basic"); n.add(new MenuItem("Sub Simple"); m.add(n); 菜 單 條 你 創(chuàng) 建 好 菜 單 后, 你 應 將 ?reg; 放 在 應 用 程 序 的 菜 單 條 上: mb = new Menubar(); mb.

18、add(m); mb.add(optionsMenu); 然 后 你 可 為applet設 置 菜 單 條: setMenuBar(mb); 4.5 獨 立 應 用 程 序 例 子 為 了 看 一 個 更 復 雜 的 獨 立 的 圖 形 界 面 應 用 程 序, 下 面 有 一 個 數 字 轉 換 的 例 子: import java.awt.*; public class d2x extends Frame int decimalValue= 0; String baseXValue = new String ("0"); TextField dDisplay,xDisp

19、lay; /d2x constructor public d2x() super("Decimal Converter");/set the title of the frame MenuBar mb = new MenuBar(); Button d2Binary = new Button("Binary"); Button d2Octal = new Button("Octal"); Button d2Hex = new Button("Hex"); Button d2Base36 = new Button(&

20、quot;Base36"); Panel p1 = new Panel(); Panel p2 = new Panel(); Panel p3 = new Panel(); /add a simple menu Menu m = new Menu("Application"); m.add(new CheckboxMenuItem("Base 36 Active"); m.add(new MenuItem("Exit"); /add menu to menubar mb.add(m); setMenuBar(mb);/ins

21、tall this menu bar in the frame /Add buttons to their own panel p3.setLayout(new FlowLayout(); p3.add(d2Binary); p3.add(d2Octal); p3.add(d2Hex); p3.add(d2Base36); /Add text fields Label dLabel = new Label("Enter Deecimal: "); Label xLabel = new Label("Converted Value: "); dDispla

22、y = new TextField(integer.toString(decimalValue),7);xDisplay = new TextField(baseXValue,32); xDisplay.setEditable(false);p1.setLayout(new FlowLayout(FlowLayout.LEFT); p2.setLayout(new FlowLayout(FlowLayout.LEFT); p1.add(dLabel); p1.add(dDisplay); p2.add(xLabel); p2.add(xDisplay); /Add the panels add

23、("North",p1); add("Center",p2); add("South",p3); /end d2x constructor public void start() resize(400,150); show(); public void updateXDisplay() xDisplay.setText(baseXValue); public boolean handleEvent(Event evt) if (evt.targt intanceof MenuItem) if ("Exit".equ

24、als(MenuItem)evt.target).getLabel() hide(); dispose(); System.exit(0); return false; retrun true; else if (evt.target instanceof Button) String whick = (Button)evt.target).getLabel(); if (whick.equals("Binary") decimalValue = Integer.parseInt(dDisplay.getText(); baseXValue = Interger.toString(decimalValue,2); if (whick.equals("Octal") decimalValue = Integer.pa

溫馨提示

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

最新文檔

評論

0/150

提交評論