Microsoft PowerPoint - SE7ch15.ppt

Size: px
Start display at page:

Download "Microsoft PowerPoint - SE7ch15.ppt"

Transcription

1 第十五章 GUI 設計 (AWT/Swing) 與內部類別 課前指引圖形化程式設計就是設計視窗型態的應用程式, 而 Java 則將圖形化使用者介面 (Graphic User Interface;GUI) 交由 AWT 與 Swing 類別庫來負責 在本章及下一章中, 我們將介紹如何撰寫 Java 的視窗程式, 由於 AWT 與 Swing 類別庫都非常龐大, 因此, 我們只會擇要介紹, 並且將重點放在 Java 視窗程式的原理介紹 至於未示範的視窗元件, 則只需要依樣畫葫蘆即可妥善應用於視窗程式中 而由於視窗程式牽涉到與使用者互動的事件處理, 各種視窗程式語言對於事件處理的語法格式略有不同, 在 Java 中, 最常以內部類別來實作事件處理, 因此, 我們也將在本章的最後來說明何謂 內部類別, 以便讀者能夠順利學習下一章的內容 章節大綱. Java 的視窗元件類別. 收納器內的收納器. Java 視窗應用程式的基礎架構. 內部類別 ( 巢狀類別 ). 版面編排. 本章回顧. Java 的視窗元件類別 Java 的視窗元件類別庫有 AWT 與 Swing 兩種其中 AWT 為早期的設計, 而 Swing 則是基於 AWT 基礎所設計的新視窗元件 在 JDK. 時,Java 就已經提供了 AWT(Abstract Window Tookit) 類別庫, 全名是 java.awt package 而在 JDK.(Java) 之後,Java 則新增了 Swing 類別庫, 全名是 javax.swing package Swing 的按鈕比較美觀. Java 的視窗元件類別 這兩個系列的某些元件具有相同功能, 但 Swing 的元件種類較多 區分的方式非常簡單,Swing 的元件一般都以 J 為開頭, 例如標籤元件在 AWT 中, 以 Label 類別來負責, 而 Swing 則是 JLabel 類別 AWT 的元件是利用作業系統現有的元件, 故與作業系統有關, 並且 AWT 所提供的元件較單調, 也缺乏樹狀元件 目錄元件等功能較複雜的元件 以 AWT 開發的物件 : Heavyweight 以 Swing 開發的物件 : Lightweight 圖 - AWT 與 Swing 元件的外觀

2 . Java 的視窗元件類別 Swing 是針對 AWT 的缺失所發展的類別庫, 因此擁有樹狀元件等較複雜的元件, 並且 Swing 強調是完全由 Java 程式碼仿照視窗元件所開發而成, 故與作業系統無關, 但也因此顯示速度較慢 延伸學習 : 其他的 Java 圖形化元件 除了 Oracle(Sun) 提供的 AWT 與 Swing 圖形化元件之外,IBM 也曾經開發過一套 Java 圖形化元件 SWT(Standard Widget Toolkit), 不過由於在文件說明方面不易讓開發人員了解, 故一直未形成主流. Java 的視窗元件類別 收納器 (Container) AWT 的元件分為一般元件與收納器 (Container) 兩類, 其中收納器元件可以用來容納其他視窗元件例如視窗本身就是一個收納器元件, 所有呈現在視窗中的元件都被收納在視窗元件之中, 這樣的物件稱之為收納器物件以 java.awt.container 類別為基礎的, 都是收納器物件 老師的叮嚀 收納器 就像是盒子一般, 它可以放入元件, 也可以放入另一個收納器, 您可以將外部的收納器看作是較大的盒子, 而內部的收納器看作是放在大盒子中的較小盒子, 兩者都可以收納元件. Java 的視窗元件類別. Java 的視窗元件類別 除了選單 (Menu) 以外,AWT 所有的類別基礎皆為 java.awt.component 類別而 Swing 大部分的類別基礎為 javax.swing.jcomponent, 且 javax.swing.jcomponent 由於繼承自 java.awt.container, 故所有的 Swing 元件幾乎都具有容納其他視窗元件的功能這也使得 Swing 元件看起來比較美觀 圖 - 是 AWT 與 Swing 的部分類別繼承圖 ( 底色部分為 Swing 類別庫 ) 完整的繼承圖請參閱 JDK 說明文件 圖 - AWT 與 Swing 的部分類別繼承圖 省略前方類別庫者皆為 java.awt

3 . Java 視窗應用程式的基礎架構. Java 視窗應用程式的基礎架構 一個視窗基本上是靠 Frame 或 JFrame 物件所構成, 它是視窗程式的基礎, 由於它是一個收納器, 故可將其他視窗元件納入其中, 首先我們先來看幾個陽春的 Java AWT 視窗程式 觀念範例 - : 使用 AWT 的 Frame 類別設計一個陽春的視窗程式 範例 -:ch_0.java( 隨書光碟 myjava\ch\ch_0.java) /* 檔名 :ch_0.java 功能 :AWT Frame- 視窗程式 ( 主類別繼承方式 ) */ package myjava.ch; import java.awt.*; // 載入 AWT 類別庫 public class ch_0 extends Frame public ch_0() this.settitle(" 這是 AWT 視窗 "); // 設定視窗的標題列 this.setsize(00,0); // 設定視窗的寬與高 this.setvisible(true); // 設定視窗是否可被看見 產生視窗類別的實體, 代表 new ch_0(); 產生一個視窗 繼承 Frame 類別就是一個 AWT 視窗類別. Java 視窗應用程式的基礎架構. Java 視窗應用程式的基礎架構 執行結果 高為 0 像素點 暫時無作用, 欲結束請於命令列按下 Ctrl+C () 本範例執行後, 無法按下關閉鈕來關閉視窗, 這是因為我們還沒有設定按下關閉鈕的事件處理方式 若要關閉視窗, 可以於執行 ch_0 類別的 Dos 視窗中, 按下 Ctrl + C 鍵結束執行程式即可 寬為 00 像素點 () 在第 行, 我們宣告了主類別繼承 Frame 類別, 因此, 主類別本身就是視窗類別 () 在第 行, 產生主類別的物件, 也就是產生一個視窗物件, 此時會執行第 ~ 行的建構子, 在當中, 我們設定了視窗物件的屬性, 包括設定視窗的標題列 視窗的寬與高 視窗是否可被看見等等 要設定這些屬性, 都是透過 Frame 類別定義的特殊方法來完成 () 本範例執行後, 在螢幕左上角會出現視窗, 這是因為我們並未設定視窗的位置, 故預設出現在左上角 事實上, 一個 Java 程式可以產生多個視窗, 每一個視窗以 Frame 物件來表示即可, 請見下一個範例 觀念範例 - : 使用 AWT 的 Frame 類別設計一個產生兩個視窗的程式 範例 -:ch_0.java( 隨書光碟 myjava\ch\ch_0.java)

4 . Java 視窗應用程式的基礎架構. Java 視窗應用程式的基礎架構 /* 檔名 :ch_0.java 功能 :AWT Frame- 視窗程式 ( 類別成員與函式變數方式 ) */ package myjava.ch; import java.awt.*; // 載入 AWT 類別庫 public class ch_0 extends Frame static ch_0 frm = new ch_0(); // 類別成員 Frame frm = new Frame(); // 函式變數 frm.settitle(" 這是第一個 AWT 視窗 "); // 設定視窗的標題列 frm.setsize(00,0); // 設定視窗的寬與高 frm.setvisible(true); // 設定視窗是否可被看見 類別內也可以用類別本身當作型態來宣告物件 frm.settitle(" 這是另一個 AWT 視窗 "); // 設定視窗的標題列 frm.setsize(0,00); // 設定視窗的寬與高 frm.setlocation(00,00); // 設定視窗的位置 frm.setvisible(true); // 設定視窗是否可被看見 執行結果 frm 桌面 frm. Java 視窗應用程式的基礎架構 () 在第 行, 我們使用類別成員的方式宣告了一個成員為 ch_0 類別的實體 frm, 由於 ch_0 類別繼承了 Frame 類別, 故也是一個視窗 在第 行, 我們使用物件變數的方式宣告了一個函式的物件變數 ( 區域變數 ) frm, 型態為 Frame 類別, 故也是視窗 ()frm 與 frm 都是視窗, 所以執行結果有兩個視窗 ()frm.setlocation(00,00); 設定了視窗位置, 所以第二個視窗不是位於螢幕左上角 () 第 行的 static 是因為該實體要在 static main 中使用, 故宣告為 static, 若不是在 static 方法中使用, 則成員不需要宣告為 static.. Frame 視窗應用程式的基礎架構 上面兩個程式都可以產生視窗元件, 並且由上一個範例可知, 主類別也不一定就是視窗類別, 我們其實可以另外宣告一個視窗類別, 只要該類別繼承 Frame 即可 由於視窗元件是收納器的一種, 因此, 我們若採用繼承格式宣告視窗類別, 可以將其他元件加入到該視窗之中, 所以整體使用 Frame 的視窗程式碼架構可以整理如下 :

5 .. Frame 視窗應用程式的基礎架構.. Frame 視窗應用程式的基礎架構 import java.awt.*; // 使用 AWT 元件時需載入 import javax.swing.*; // 使用 Swing 元件時需載入 [ 封裝等級 ] class 視窗類別名稱 extends Frame // 類別代表視窗 // 使用類別成員方式宣告視窗內的元件, 例如 Button Label 等等 public 視窗類別名稱 () // 建構子 // 決定版面編排 // 建構各元件的實體 // 設定各元件的屬性, 例如外觀, 大小等等 // 設定各元件對應的事件傾聽機制, 可搭配內部類別 (Inner Class) 完成 // 透過 Frame 的 add() 方法, 將各元件加入本視窗中 // 設定視窗的屬性, 例如位置, 大小等等 // 設定視窗對應的事件傾聽機制, 可搭配內部類別 (Inner Class) 完成 // 顯示視窗, 例如使用 setvisible() [ 封裝等級 ] [ 修飾字 ] 回傳值資料型態方法名稱 ( 參數串宣告 ) // 此處可以出現如建構子的建立元件與設定視窗的程式碼 : // 事件傾聽機制, 採用內部類別 (Inner Class) 完成 : 內部類別於本章最後介紹 架構說明 : () 由於類別即視窗本身, 故在類別內操作視窗時, 可使用 this 作為表示 () 事件傾聽機制是 Java 的事件處理方式, 例如鍵盤或滑鼠的動作發生之時就是一個事件, 我們將在下一章中說明 觀念範例 - : 依照上述格式, 建立 Frame 視窗類別, 並使用多種方式為 Frame 視窗加入元件 範例 -:ch_0.java( 隨書光碟 myjava\ch\ch_0.java).. Frame 視窗應用程式的基礎架構.. Frame 視窗應用程式的基礎架構 /* 檔名 :ch_0.java 功能 :Frame 視窗內加入元件 */ package myjava.ch; import java.awt.*; // 載入 AWT 類別庫 public class ch_0 CMyWindow frm = new CMyWindow(); // 視窗實體 frm.addnewlabel(" 新增標籤 "); class CMyWindow extends Frame // 類別繼承 Frame 類別 // 使用類別成員方式宣告視窗內的元件 Button btn; // 類別成員 Button btn; // 類別成員 0 0 public CMyWindow() // 建構子 this.setlayout(null); // 設定版面編排, 手動指定各元件位置 btn = new Button(); // 建構各元件的實體 btn = new Button(); // 建構各元件的實體 // 設定各元件的屬性, 例如外觀, 大小等等 btn.setlabel(" 按鈕 "); btn.setbounds(,0,0,); // 設定按鈕位置與大小等等 btn.setbounds(,0,0,); // 設定按鈕位置與大小等等 // 設定各元件對應的事件傾聽機制, 暫時省略 // 透過 Frame 的 add() 方法, 將各元件加入本視窗中 this.add(btn); 在視窗產生的建構子中就 this.add(btn); 加入按鈕元件 this.settitle(" 加入元件的 Frame 視窗 "); // 設定視窗的屬性 this.setsize(00,00); // 設定視窗的屬性 // 設定視窗對應的事件傾聽機制, 暫時省略 this.setvisible(true); // 顯示視窗

6 .. Frame 視窗應用程式的基礎架構 0 public void addnewlabel(string str) Label lab = new Label(str); // 產生標籤實體 lab.setbounds(0,,0,0); // 設定標籤位置與大小 this.add(lab); 視窗產生後才加入標籤元件 this.setbackground(color.green); btn.setbackground(color.red); // 事件傾聽機制, 採用內部類別 (Inner Class) 完成, 暫時省略 執行結果 第 行加入 第 行加入.. Frame 視窗應用程式的基礎架構 () 我們仿照之前介紹的格式宣告了一個視窗類別 CMyWindow, 並在其中宣告了兩個成員 btn 與 btn, 這兩個成員是按鈕元件 () 當主程式執行到第 行時, 會產生視窗實體 frm, 並且執行第 ~ 行的建構子 在建構子中, 我們首先產生按鈕的實體 ( 第 行 ), 並設定按鈕的屬性 ( 第 0~ 行 ) 然後透過 add() 方法將按鈕加入到視窗之中 ( 第 行 ), 此時的 this 也就是 frm 視窗 然後設定視窗的標題列與大小 ( 第 0 行 ), 最後將視窗顯示出來 ( 第 行 ) 第 行加入.. Frame 視窗應用程式的基礎架構.. Frame 視窗應用程式的基礎架構 () 當第 行執行完畢時, 事實上, 已經產生了一個視窗, 視窗內包含兩個按鈕 當程式執行到第 行時, 又執行了視窗物件的一個方法 addnewlabel, 這是我們自行撰寫的方法, 可以改變視窗的內容並且加入一個標籤元件 () 第 行執行時會執行第 ~ 行的程式, 同樣地, 我們宣告了一個標籤元件變數 lab, 並透過 add() 方法加入到視窗中 請注意, 由於我們是在函式內宣告該變數, 故此標籤無法被其他的函式或外部程式更動其屬性 () 第 行將視窗的背景設定為綠色, 第 行則將 btn 按鈕的背景設定為紅色 Color 是一個 awt 的類別, 其內使用了眾多欄位替各種顏色取一些代號 ( 如果您查閱了 Color 類別的說明文件, 會發現全部使用大寫也可以 ) () 當第 行執行完畢後, 視窗與 btn 按鈕的背景顏色被改變了, 同時視窗內也增加了一個標籤 由於執行速度過快, 因此, 您可能無法發現第 行與第 行執行完畢, 視窗的改變 我們會在後面章節中, 採用事件方法來撰寫程式, 就可以明顯看出視窗的改變 () 值得注意的是, 視窗內標籤元件與按鈕元件重疊了, 這是因為我們在第 行採用了手動方式配置視窗內的元件 而第 0 行的 setbounds 就是用來設定元件所在位置, 前兩個引數是設定元件對於收納器的左邊界與上邊界的距離, 後兩個引數則是元件的寬與高 ( 即元件的大小設定 ) 由於元件是透過視窗的 add() 方法加入, 故此處的收納器就是視窗本身

7 .. JFrame 視窗應用程式的基礎架構.. JFrame 視窗應用程式的基礎架構 使用 JFrame 的視窗程式碼架構與 Frame 視窗類似 不過由於 JFrame 的視窗內含許多編排層級, 通常我們是將元件加入到 ContentPane 這個層級的收納器中, 故一開始應該取得 JFrame 的 ContentPane 整體使用 JFrame 的視窗程式碼架構可以整理如下 : import javax.swing.*; // 使用 Swing 元件時需載入 import java.awt.*; // 使用 AWT 元件時需載入 [ 封裝等級 ] class 視窗類別名稱 extends JFrame // 類別代表視窗 // 使用類別成員方式宣告視窗內的元件, 例如 JButton JLabel 等等 public 視窗類別名稱 () // 建構子 JFrame 一般會將元件加入到 // 透過 getcontentpane() 取得 JFrame 的 ContentPane ContentPane 層級 // 決定 ContentPane 的版面編排方式 // 建構各元件的實體 // 設定各元件的屬性, 例如外觀, 大小等等 // 設定各元件對應的事件傾聽機制, 可搭配內部類別 (Inner Class) 完成 // 透過 ContentPane 的 add() 方法, 將各元件加入 ContentPane 中 // 設定 ContentPane 的屬性, 例如背景顏色等等 // 設定 JFrame 視窗對應的事件傾聽機制, 可搭配內部類別 (Inner Class) 完成 // 顯示 JFrame 視窗, 例如使用 JFrame 的 setvisible() [ 封裝等級 ] [ 修飾字 ] 回傳值資料型態方法名稱 ( 參數串宣告 ) // 此處可以出現如建構子的建立元件與設定視窗的程式碼 : // 事件傾聽機制, 採用內部類別 (Inner Class) 完成 :.. JFrame 視窗應用程式的基礎架構.. JFrame 視窗應用程式的基礎架構 架構說明 : ()ContentPane 本身是一個收納器, 我們將元件加入到此收納器中, 而非直接加入到 JFrame 視窗中 () 要改變視窗的外觀, 有些屬性是在 ContentPane 中設定, 有些屬性則是在 JFrame 中設定, 您可以把 ContentPane 視為視窗主選單列以下的部分 觀念範例 - : 依照上述格式, 建立 JFrame 視窗類別, 並使用多種方式為視窗加入元件 範例 -:ch_0.java( 隨書光碟 myjava\ch\ch_0.java) 延伸學習 : 視窗元件的屬性與方法 屬性是一個 類別 / 物件 的成員變數 ( 在 Java 中稱之為欄位 ), 方法則是一個 類別 / 物件 的成員方法 而視窗元件是 java.awt package 某類別的物件, 或 javax.swing package 某類別的物件 在前面章節中, 我們曾經說過, 每一個按鈕都是一個物件, 屬於按鈕 (Button) 類別之下所建造出來的物件實體, 但是由於按鈕標題 (label) 的不同, 因此視為不同且獨立的物件 而在本章中, 我們發現到,java 並不讓我們直接設定視窗元件的屬性, 例如想要設定 Button 的標題文字, 應該透過 setlabel() 方法來完成 但事實上, 用來代表 Button 物件的標題文字仍舊是 Button 物件的屬性 ( 欄位 ), 只不過它屬於 package 等級, 故我們無法直接在其他 package 中使用它, 而必須透過 public method 來設定它 如果您觀察 JDK 的原始碼, 可以在 Button.java 原始碼檔中發現,Button 類別的文字使用的是 label 欄位來存放, 該欄位是一個 package 等級的 String 型別變數 但對於其他支援視窗程式的程式語言來說, 有些語言 ( 例如 VB) 允許我們直接設定某個元件的屬性來設定元件的外觀, 而不需要透過函式來間接設定 有些語言甚至將之區分為屬性與欄位兩種 ( 例如 VB.NET) 不同層次的功能, 欄位屬於變數, 而屬性具有函式的效果, 只不過該函式是特別用來設定特定欄位值之用 這樣做的好處在於, 可以於設定欄位值之前, 進行一些檢查, 甚至可以設定成唯讀或唯寫的屬性

8 .. JFrame 視窗應用程式的基礎架構 /* 檔名 :ch_0.java 功能 :JFrame 視窗內加入元件 */ package myjava.ch; import javax.swing.*; // 載入 Swing 類別庫 import java.awt.*; // 載入 AWT 類別庫, 例如 Color 類別為 AWT 類別庫 public class ch_0 CMyJWindow jfrm = new CMyJWindow(); // 視窗實體 jfrm.addnewlabel(" 新增標籤 "); class CMyJWindow extends JFrame // 類別繼承 JFrame 類別 // 使用類別成員方式宣告視窗內的元件 JButton btn; // 類別成員 JButton btn; // 類別成員.. JFrame 視窗應用程式的基礎架構 public CMyJWindow() // 建構子 cp 代表視窗的 ContentPane Container cp = this.getcontentpane(); cp.setlayout(null); // 設定版面編排, 手動指定各元件位置 btn = new JButton(" 按鈕 "); // 建構各元件的實體 btn = new JButton(); // 設定各元件的屬性, 例如外觀, 大小等等 btn.setbounds(,0,0,); // 設定按鈕位置與大小等等 btn.setbounds(,0,0,); // 設定按鈕位置與大小等等 btn.setfont(new Font("Serif",Font.BOLD,)); // 設定字型 // 設定各元件對應的事件傾聽機制, 暫時省略 // 透過 Frame 的 add() 方法, 將各元件加入本視窗中 cp.add(btn); 加入按鈕到 cp 中 cp.add(btn); cp.setbackground(color.yellow); // 設定 ContentPane 的背景顏色 this.settitle(" 加入元件的 JFrame 視窗 "); // 設定視窗的屬性 this.setsize(00,00); // 設定視窗的屬性 // 設定視窗對應的事件傾聽機制, 暫時省略 this.setvisible(true); // 顯示視窗 0.. JFrame 視窗應用程式的基礎架構.. JFrame 視窗應用程式的基礎架構 cp 代表視窗的 ContentPane 執行結果 0 public void addnewlabel(string str) JLabel lab = new JLabel(str); // 產生標籤實體 lab.setbounds(0,,0,0); // 設定標籤位置與大小 lab.setfont(new Font("Serif",Font.BOLD,)); // 設定字型 Container cp = this.getcontentpane(); cp.add(lab); 加入標籤到 cp 中 cp.setbackground(color.green); btn.setbackground(color.red); // 事件傾聽機制, 採用內部類別 (Inner Class) 完成, 暫時省略 第 行加入 第 0 行加入 第 行加入 () 本範例的流程與前一個範例差不多, 不過使用 JFrame 時, 我們是將元件加入到 cp 中, 它是 JFrame 的 ContentPane, 使用 getcontentpane() 即可取得, 由於它會回傳一個 Container 類別的物件, 故我們在第 行使用 Container 類別來宣告並接收它 並且由此處可知, 它是一個收納器

9 .. JFrame 視窗應用程式的基礎架構.. JFrame 視窗應用程式的基礎架構 () 第 行, 我們透過.setFont() 來設定字型, 由於它需要傳入一個 Font 型態的引數, 故我們產生一個 Font 實體傳送給它, 事實上,Font 類別也是 AWT 的類別之一 () 本範例看似改用 Swing 元件完成與上一個範例相同功能的視窗程式, 但事實上, 兩者還是有一些差異, 由於使用 Frame 是將元件直接加入到視窗中, 因此視窗是元件的收納器,setBounds() 設定的邊界是以收納器為準, 故 btn 與視窗邊界距離為 (,0) 而 JFrame 是將元件加入到 ContentPane 中, 因此 ContentPane 是元件的收納器,setBounds() 設定的邊界是以收納器為準, 故 btn 與 ContentPane 邊界距離為 (,0) 下圖為兩者的差異 圖 - Frame 與 JFrame 的差異.. 視窗的層次 視窗層次在前面兩個範例中, 我們已經知道 Frame 與 JFrame 的視窗有些許不同, 事實上,JFrame 比 Frame 複雜許多, 首先我們先由 Java 視窗的結構來進行說明 Java 的視窗包含 標題列 主選單列 (Menu Bar) 內容面板 等三大區塊, 如下圖 標題列主選單列 內容面板.. 視窗的層次 標題列 : 包含放大 縮小 關閉鈕的那一列區域, 它還包括視窗標題文字, 它的高度約有 個像素 主選單列 : 包含功能表選單的一列部分, 也可以包含子選單, 不展開子選單時, 它的高度約有 個像素 內容面板 : 放置元件的區域 對於 Frame 視窗而言,Frame 本身是一個收納器, 並且包含上述三大區域由於我們將元件直接加入在 Frame 之中, 所以至少應該距離上邊界 像素, 否則會被覆蓋若視窗設計了主選單列, 則應該距離上邊界 0 像素才不會被覆蓋 圖 - Java 視窗結構

10 .. 視窗的層次.. 視窗的層次 對於 JFrame 來說, 情況變得非常複雜 之前提過 Swing 大部分的元件都是繼承自 JComponent 類別, 但有四個例外, 分別是 JFrame JDialog JWindow 與 JApplet 這些元件由於必須在作業系統顯示視窗, 故需要使用作業系統的資源, 而無法完全由 Java 程式碼設計 事實上,JFrame 是繼承 AWT 的 Frame 類別, 而不是繼承 JComponent 類別 而這四種元件在 Swing 中, 稱之為最上層 (Top-Level) 元件, 所有的 Swing 元件都必須依附在其中之一才能顯示出來 而這四種元件都實作了 RootPaneContainer 介面, 該介面定義了各種收納器的設定與取得的方法 這些收納器包括 RootPane Glass Pane Layered Pane 和 Content Pane 等四種 在 Java Swing 的說明網頁中, 可以發現下列一張圖, 它說明了 JFrame 包含了上述四種 Pane 圖 - JFrame 層次圖 節自 Java Tutorial 文件 參考 視窗的層次 上圖中的各種類別可透過下圖的架構來說明 其中,RootPane 並非真實的收納器 ( 可視為虛擬的收納器 ), 它是由 Glass Pane 與 Layered Pane 所組成而 Layered Pane 則包含了 Content Pane( 內容面板 ) 與 Menu Bar( 功能表列 ).. 視窗的層次 事實上,Layered Pane 分為許多層,Content Pane 與 Menu Bar 只是其中一層, 該層為 Frame- Content Layer 由於超出本書範圍, 若有興趣者, 可參閱筆者合著的 精通 Java Swing 程式設計 一書的第三章與第五章 在本書中, 我們只要了解, 使用 JFrame 視窗時, 元件是加入在 Content Pane 即可 0

11 . 版面編排 如果手動控制各元件在收納器版面中的位置, 為了防止元件產生重疊狀況, 因此要仔細計算各元件的絕對位置與大小 而 Java 提供了面版管理員 (Layout Manager), 可以讓元件有秩序的擺放在適當位置, 當視窗大小更動時, 也會自動更新版面以配合視窗的大小, 而不會因此出現紊亂的畫面 在 AWT 中, 共提供了五種面版管理員如下 :. 版面編排. BorderLayout. FlowLayout. GridLayout. CardLayout. GridBagLayout 上述五項面版管理員, 都是 AWT 提供的面版管理員, 並且在 Swing 中仍可使用 事實上, 除了上述五種之外,Swing 還提供了 SpringLayout 與 BoxLayout, 以及較不需管理的 ScrollPaneLayout ViewportLayout 與 OverlayLayout 等等 由於篇幅所限, 在本節中, 我們將只示範 BorderLayout FlowLayout 與 GridLayout 等面版管理員, 若讀者有興趣了解其他面版管理員, 可參閱 精通 Java Swing 程式設計 一書.. BorderLayout BorderLayout 是以邊界 (border) 作為版面配置依據 它將版面分割為東 (EAST) 西(WEST) 南(SOUTH) 北(NORTH) 中(CENTER) 五個區域, 這些區域內的元件會填滿區域當收納器的大小改變時, 也會自動調整收納器內的元件的尺寸, 調整目標主要為中 (CENTER) 區域的大小一旦中區域大小確定後, 東西區域的高度會與中央的邊界 (border) 對齊, 而南北的寬度會與收納器的邊界對齊, 以此為原則自動調整各區域的元件大小.. BorderLayout 收納器要使用 BorderLayout 作為版面管理員 只要在 setlayout() 中傳入一個 BorderLayout 類別的物件引數即可 而 Frame 與 JFrame 的 ContentPane 預設都使用 BorderLayout 作為版面管理員, 因此省略此步驟也可以 觀念範例 - : 使用 BorderLayout 作為版面管理員, 並觀察當視窗大小變動時, 元件的變化 範例 -:ch_0.java( 隨書光碟 myjava\ch\ch_0.java)

12 .. BorderLayout.. BorderLayout /* 檔名 :ch_0.java 功能 :BorderLayoout 版面管理員 */ package myjava.ch; import java.awt.*; // 載入 AWT 類別庫 public class ch_0 Frame frm=new Frame(); // 視窗實體可省略, 因為預設也是使用 BorderLayout 來配置版面 frm.setlayout(new BorderLayout()); frm.settitle(" 使用 BorderLayout 版面管理員 "); frm.add(new Button(" 東按鈕 "),BorderLayout.EAST); frm.add(new Button(" 西按鈕 "),BorderLayout.WEST); frm.add(new Button(" 南按鈕 "),BorderLayout.SOUTH); frm.add(new Button(" 北按鈕 "),BorderLayout.NORTH); frm.add(new Label(" 中央標籤 ",Label.CENTER), BorderLayout.CENTER); frm.setsize(00,00); frm.setvisible(true); 執行結果 拉動視窗大小, 各區域也會隨之縮放, 並且區域內的元件也會跟著縮放 () 第 行使用 setlayout() 方法設定要使用 BorderLayout 作為版面管理員 第 ~ 行分別加入四個按鈕, 加入時指定加入到哪一個區域 例如加入到西區域, 則將區域引數設定為 BorderLayout.WEST.. BorderLayout.. BorderLayout () 第 行, 加入標籤到中央區域, 事實上, 省略 BorderLayout.CENTER 結果也相同, 因為區域預設參數值為 BorderLayout.CENTER 本行中的 Label.CENTER 是設定標籤文字置於標籤中央 ( 即置中對齊效果 ) () 請讀者自行將視窗拉大縮小, 將會發現所有的元件都會跟著自動調整大小 觀念範例 - : 使用 BorderLayout 作為版面管理員, 並在某些區域不加入元件, 觀察其變化 範例 -:ch_0.java( 隨書光碟 myjava\ch\ch_0.java) /* 檔名 :ch_0.java 功能 :BorderLayoout 版面管理員 */ package myjava.ch; import java.awt.*; // 載入 AWT 類別庫 public class ch_0 Frame frm=new Frame(); // 視窗實體 frm.setlayout(new BorderLayout()); 使用 BorderLayout 配置 frm.settitle(" 使用 BorderLayout 版面管理員 "); Button btn = new Button(" 東按鈕 "); 版面時, 設定按鈕元件的位 btn.setbounds(,0,0,); 置與大小不會產生作用 frm.add(btn,borderlayout.east); frm.add(new Button(" 南按鈕 "),BorderLayout.SOUTH); frm.add(new Button(" 北按鈕 "),BorderLayout.NORTH); frm.add(new Label(" 中央標籤 ",Label.CENTER), BorderLayout.CENTER); frm.setsize(00,00); frm.setvisible(true);

13 .. BorderLayout.. FlowLayout 執行結果 西區域是空的, 所以中央區域會自動往西放大延伸 FlowLayout 採用的是一個一個排下去的流程編排方式 由上而下, 由左而右, 只有在上方已無法加入元件時, 才會往下一列排放 () 我們未在西區域加入元件, 此時, 中央區域會自動補上西區域欠缺的地方, 並將中央區域內的元件自動往西放大 () 第 行,btn 透過 setbounds() 方法並不能改變該按鈕的配置位置與大小, 因為該方法只在手動配置版面時有效, 要手動配置版面應該使用 setlayout(null) 來設定 Frame 觀念範例 - : 使用 FlowLayout 作為版面管理員, 並設定元件間的距離為 0, 並且置中排放 範例 -:ch_0.java( 隨書光碟 myjava\ch\ch_0.java) 0.. FlowLayout.. FlowLayout /* 檔名 :ch_0.java 功能 :FlowLayoout 版面管理員 */ package myjava.ch; import java.awt.*; // 載入 AWT 類別庫 public class ch_0 Frame frm=new Frame(); // 視窗實體 frm.setlayout(new FlowLayout(FlowLayout.CENTER,0,0)); frm.settitle(" 使用 FlowLayout 版面管理員 "); frm.add(new Button(" 按鈕 ")); 對齊方式, 水平距離, 垂直距離 frm.add(new Button(" 按鈕 ")); frm.add(new Button(" 按鈕 ")); frm.add(new Button(" 按鈕 ")); frm.add(new Button(" 按鈕 ")); frm.setsize(0,0); frm.setvisible(true); 執行結果 拉寬視窗 () 第 行透過 setlayout() 方法設定要使用 FlowLayout 作為版面管理員 我們在產生 FlowLayout 實體時, 傳入了三個引數, 若您查閱 FlowLayout 類別的建構子, 就會發現第一個參數為對齊方式, 後兩個為元件的水平距離與垂直距離 () 這個範例加入了 個按鈕, 執行時第一列最多放得下三個按鈕, 故剩餘兩個按鈕被安排到下一列, 並且由執行結果可以發現它們都是置中排列的 當您將視窗的寬度拉大時, 由於第一列可以放下更多按鈕了, 故按鈕 也被移到第一列的末端, 使得第二列只剩下一個按鈕, 並且仍舊是置中排列的

14 .. GridLayout GridLayout 需要指定欄與列, 如此形成一個 表格般 的配置方式 若產生 GridLayout 實體時, 不輸入引數, 則內定為一列一欄 同樣地,GridLayout 與 FlowLayout 類似, 也是必須在第一列的所有格子填滿後, 才會填入第二列的第一個格子內 而且 GridLayout 會將所填入的元件大小設為相同大小, 因為我們無法設定不同高度或寬度的格子.. GridLayout 若我們不確定之後加入的元件有幾個, 而因此無法在程式撰寫時設定正確的列數以容納所有的元件, 此時可以將列數設定為 0 如此將形同 不限列數 的格子 ( 會自動計算列數以填滿收納器 ) 當每一列的格子被填滿時, 會自動產生新的一列以存放新增的元件 ( 其他列會縮小高度 ) 而若我們指定了列數與欄數, 但加入了超過 列數 欄數 的元件此時會自動增加欄數以容納所有的元件, 這樣就可能與預期的有所不同並且根據測試, 有時元件不足以填入最後一列時, 也可能會縮減欄數因此, 使用 GridLayout 編排版面時, 最好將列數設定為 0 或仔細計算元件數量來設計欄數與列數 觀念範例 - : 使用 GridLayout 作為版面管理員, 並且設定為三欄, 不設定列數, 元件間無距離 範例 -:ch_0.java( 隨書光碟 myjava\ch\ch_0.java).. GridLayout.. GridLayout /* 檔名 :ch_0.java 功能 :GridLayoout 版面管理員 */ package myjava.ch; import java.awt.*; // 載入 AWT 類別庫 public class ch_0 Frame frm=new Frame(); // 視窗實體 frm.setlayout(new GridLayout(0,)); frm.settitle(" 使用 GridLayout 版面管理員 "); frm.add(new Button(" 按鈕 ")); frm.add(new Button(" 按鈕 ")); frm.add(new Button(" 按鈕 ")); frm.add(new Button(" 按鈕 ")); frm.add(new Button(" 按鈕 ")); frm.setsize(00,00); frm.setvisible(true); 欄數為, 不限定列數 執行結果 小試身手 第 行透過 setlayout() 方法設定使用 GridLayout 作為版面管理員, 並且為 欄不限定列數 由於我們有五個按鈕, 因此會自動產生第二列 請將範例 的按鈕減少兩個 ( 留下三個 ), 然後重新編譯與執行, 看看會有什麼結果?

15 . 收納器內的收納器 如果您在上一節的版面管理員中多加幾個元件測試的話, 就會發現 BorderLayout 的一個區域只能加入一個元件, 如果加入第二個元件, 則第一個元件會不見 而 GridLayout 也無法在一格內加入兩個元件, 因此, 每個元件的大小都是一樣的, 這對於我們來說並不是很方便不過, 如果您在置放元件處, 放入一個內部收納器 ( 收納器也是元件的一種 ), 則我們又可以在內部收納器中進行版面配置, 如此就可以產生更多的變化, 以符合我們的需求 請看下面這個範例. 收納器內的收納器 觀念範例 - : 透過收納器中的收納器技巧, 使得 GridLayout 每一列的按鈕數不同 範例 -:ch_0.java( 隨書光碟 myjava\ch\ch_0.java) /* 檔名 :ch_0.java 功能 : 收納器中的收納器 */ package myjava.ch; import java.awt.*; // 載入 AWT 類別庫 public class ch_0 Frame frm = new Frame(); // 視窗實體 frm.setlayout(new GridLayout(0,)); // 欄數為, 不限定列數 pn 當作內部收納器 Panel pn = new Panel(); pn.setlayout(new GridLayout(,)); // 列 欄 pn.add(new Button(" 按鈕 a")); pn.add(new Button(" 按鈕 b"));. 收納器內的收納器. 收納器內的收納器 0 執行結果 frm.settitle(" 收納器中的收納器 "); frm.add(new Button(" 按鈕 ")); frm.add(pn); frm.add(new Button(" 按鈕 ")); frm.add(new Button(" 按鈕 ")); frm.add(new Button(" 按鈕 ")); frm.add(new Button(" 按鈕 ")); frm.setsize(00,00); frm.setvisible(true); 把 pn 內部收納器加入外部收納器 frm 之中 這裡有一個 Panel () 第 行, 我們宣告了一個 Panel 物件 pn, 它是一個收納器, 因此, 我們可以在第 行設定它的版面管理員為 GridLayout(,), 代表 列 欄 () 在第 ~ 行中, 為 pn 加入了兩個按鈕 () 對於視窗 frm 而言, 我們採用的是 GridLayout(0,) 的版面管理 ( 第 行 ), 並且在第 ~ 行中陸續加入元件, 其中, 第 行加入的是 Panel 元件, 也就是一個內部的收納器 () 在執行結果中, 您可以發現, 第一列中間的欄位出現了兩個按鈕, 這是因為這兩個按鈕都屬於 pn 收納器所有, 故出現在 pn 元件應該出現的格子中 0

16 . 收納器內的收納器 從上述範例來看, 在 Java 的視窗程式設計中, 時常以多層的收納器作為設計基礎, 這使得視窗元件的配置可以有更多樣的變化 但事實上, 要一次就完成所希望的配置並非易事, 因此, 通常在設計 Java 的視窗介面時, 我們可以利用各種開發 Java 的 IDE 來為我們安排元件的配置, 如此, 我們就可以專注於開發程式的邏輯以及事件處理的程式碼 在下一章中, 我們將介紹 Java 的事件處理方式, 如此本章所介紹的各個按鈕按下後, 就可以執行某些程式, 完成更多的需求. 內部類別 ( 巢狀類別 ) 在說明下一章的內容之前, 我們先來說明一項關於類別宣告的技術 : 巢狀類別, 也就是內部類別 內部類別由於較為複雜, 故而在第七章中並未提及, 但內部類別卻是 Java 視窗程式常見的技術, 因此本書將之移到此處來做說明. 內部類別 ( 巢狀類別 ) 首先我們回顧過往所學習到的技術, 我們可以在類別內宣告一些變數, 這些變數除了是原始資料型態之外, 也可以是類別型態 ( 代表該變數是物件變數 ) 例如下列範例 : class CMyClass... class CMyClass CMyClass var,var; class CMyClass... 上述範例中的 var var 是 CMyClass 的成員變數 ( 欄位 ), 並且 CMyClass 也可以被其他的類別用來當作一種資料型態, 例如 CMyClass. 內部類別 ( 巢狀類別 ) 而如果我們有一個類別, 它只想要讓某一個類別使用, 則我們可以利用 巢狀類別 來完成 例如, 假設 CMyClass 只想要被 CMyClass 使用, 則可以將 CMyClass 類別的定義移到 CMyClass 的定義之內, 如此一來,CMyClass 就不能使用 CMyClass 類別了 如下範例 : class CMyClass private class CMyClass... CMyClass var,var; class CMyClass... 不能使用 CMyClass 類別... CMyClass 定義於 CMyClass 之內, 只有 CMyClass 可以取用, 而 CMyClass 不能取用它

17 . 內部類別 ( 巢狀類別 ) 所謂巢狀類別 (Nested Class), 代表類別定義內還有其他類別的定義, 當然這樣的層次不僅止於兩層, 還可以定義更多層的巢狀類別 不過, 為了簡化問題, 我們暫時只討論兩層的巢狀類別 兩層的巢狀類別之外層類別可以稱為外部類別 (outer class), 由於它將內部的類別包圍, 因此也稱為外圍類別 (Enclosing Class) 而內層的類別則分為三種一種是有名字的成員內部類別 (member inner class) 第二種是有名字的區域內部類別 (local inner class) 最後一種則是沒有名字的匿名類別 (anonymous class). 內部類別 ( 巢狀類別 ) 外部類別如同一般定義類別的方式, 並且 外部類別可以使用內部類別當作資料型態來宣告物件變數, 而在本節中, 我們將分別介紹內部類別與匿名類別的規範 延伸學習 : 靜態巢狀類別 事實上巢狀類別除了上述的三種類型之外, 還有一種靜態巢狀類別 (Static Nested Class), 不過為了簡化討論, 我們暫時不介紹靜態巢狀類別.. 成員內部類別 (member inner class) 在介紹 Java 的視窗程式設計時, 我們可能會實作事件傾聽者的 adapter 類別 ( 例如範例 -), 而它使用的就是內部類別 在此, 我們先介紹如何定義成員內部類別 定義內部類別必須在外部類別之內, 並將之定義為其中一個成員, 一般我們將成員內部類別 (member inner class) 簡稱為內部類別 (inner class), 語法如下 : 定義內部類別語法 :.. 成員內部類別 [ 封裝等級 ] [ 修飾字 ] class 外部類別名稱 [ 封裝等級 ] [ 修飾字 ] 外部類別成員 ; : [ 封裝等級 ] [ 修飾字 ] class 內部類別名稱 [ 封裝等級 ] [ 修飾字 ] 內部類別成員 ; 語法說明 : () 成員內部類別也可以宣告封裝等級, 不過我們暫時省略此欄位 ( 在本節的最後, 我們會討論一個被宣告為 private 的內部類別 )

18 .. 成員內部類別 () 內部類別也可以宣告修飾字, 但僅限於 final 與 abstract () 內部類別的名稱可以和外部類別或其他一般類別相同, 因為完整的類別名稱是 Package 名稱. 外部類別名稱. 內部類別名稱 () 內部類別經由定義之後, 可以在宣告外部類別成員時, 將內部類別當作一種資料型態來宣告 但若僅宣告物件變數的話, 則只是宣告了一個內部類別的物件參考而已 當外部類別產生物件實體時, 並不會產生內部類別的物件實體 如果想要產生內部類別的物件實體來做應用的話, 應該在外部類別的函式中, 使用 new 來產生 () 內部類別可以取用外部類別的成員, 但請勿使用 this 來讀取外部類別的成員, 因為外部類別與內部類別在產生物件實體時, 各自擁有屬於自己的 this.. 成員內部類別 () 內部類別的 private 等級成員也可以在外部類別中使用 () 內部類別編譯後, 也會產生類別檔 同時檔名會出現完整的巢狀檔名, 也就是外部類別 $ 內部類別.class () 若內部類別非宣告為 static 類別, 則不可以宣告或定義 static 類別成員 當我們定義了內部類別之後, 就可以透過完整的類別名稱來宣告物件變數, 語法如下 : 一般類別宣告內部類別之物件變數語法 : 外部類別名稱. 內部類別名稱物件變數 ; 0.. 成員內部類別 語法說明 : () 上述語法是在外部類別以外的其他類別中使用內部類別的宣告語法, 所以必須記載完整的類別名稱 ( 包含外部類別以及巢狀層次關係 ) () 如果是在外部類別中宣告變數, 則可以減少前面一層的 外部類別名稱. () 如果內部類別被宣告為 private, 則其他的一般類別就無法使用它來宣告物件變數 () 上述語法只產生了一個內部類別物件的參考 要產生實體, 則必須使用下列語法 :.. 成員內部類別 一般類別宣告內部類別之物件變數並產生物件實體語法 : 外部類別名稱. 內部類別名稱物件變數 = (new 外部類別名稱 ( 引數串 )).new 內部類別名稱 ( 引數串 ); 語法說明 : 上述語法是將之前的語法合併, 不過這樣做的結果, 我們將只有一個內部類別的物件變數名稱, 而沒有外部類別的物件變數名稱 而雖然我們沒有外部類別的物件變數名稱, 但記憶體中仍將產生外部類別的物件實體 觀念範例 - : 外部程式存取內部類別及內部類別存取外部類別 範例 -:ch_.java( 隨書光碟 myjava\ch\ch_.java)

19 .. 成員內部類別.. 成員內部類別 物件 outy 宣告並產生外部類別 /* 檔名 :ch_.java 功能 : 外部程式存取內部類別 */ package myjava.ch; public class ch_ // 主類別 CMyOutClass.CMyInnerClass innerx = (new CMyOutClass()).new CMyInnerClass(); CMyOutClass outy = new CMyOutClass(0); CMyOutClass.CMyInnerClass innery = outy.new CMyInnerClass(0); 這樣也可以產生內部類別的物件 innerx.innershow(" 第 行的呼叫 "); innery.innershow(" 第 行的呼叫 "); 宣告並產生內部類別物件 0 class CMyOutClass private int outvar; 內部類別的定義 public CMyOutClass() public CMyOutClass(int i)outvar=i; class CMyInnerClass // 內部類別的定義 private int innervar; public CMyInnerClass() // 內部類別建構子 public CMyInnerClass(int i)innervar=i;// 內部類別建構子 public void innershow(string str) 內部類別可讀取外部類別的成員 System.out.println(str + ",run 內部類別函式 outvar=" + outvar); System.out.println(str + ",run 內部類別函式 innervar=" + innervar);.. 成員內部類別 執行結果 : 第 行的呼叫,run 內部類別函式 outvar= 第 行的呼叫,run 內部類別函式 innervar= 第 行的呼叫,run 內部類別函式 outvar=0 第 行的呼叫,run 內部類別函式 innervar=0 () 第 ~ 行是內部類別 CMyInnerClass 的定義, 它被包含在外部類別 CMyOutClass 定義之內.. 成員內部類別 () 第 行, 可以在內部類別直接存取外部類別的成員 outvar, 因為您可以將內部類別看作是外部類別的成員之一, 而成員之間原本就能夠互相存取, 並且不受 private 等級的限制 () 第 行是宣告內部類別物件的方式之一 這樣的方式, 並沒有外部類別物件名稱可以作其他的應用 () 第 行是宣告內部類別物件的方式之二 它是先產生外部類別物件 outy, 然後再由外部類別物件 outy 產生內部類別物件 這樣的方式, 不但有內部類別物件名稱可以使用, 也有外部類別物件名稱 outy 可以作其他的應用

20 .. 成員內部類別.. 成員內部類別 觀念範例 - : 外部類別存取內部類別成員 範例 -:ch_.java( 隨書光碟 myjava\ch\ch_.java) /* 檔名 :ch_.java 功能 : 外部類別存取內部類別成員 */ package myjava.ch; public class ch_ // 主類別 CMyOutClass outy = new CMyOutClass(); // 產生外部類別物件 outy.outshow(" 第 行的呼叫 "); outy.changeinnervar(" 第 行的呼叫 "); 0 class CMyOutClass 內部類別定義 class CMyInnerClass // 內部類別的定義 內部類別的成員 public int innervar; public CMyInnerClass()innerVar=;// 內部類別建構子 public void innershow() 內部類別的成員 System.out.println("run 內部類別函式執行中 innervar=" + innervar); public int outvar; public CMyOutClass()outVar=; // 外部類別建構子 public void outshow(string str) System.out.println(str +",run 外部類別函式 outvar=" + outvar); //innervar=0; // 錯誤的敘述, 因為沒有內部類別的物件實體.. 成員內部類別 0 public CMyInnerClass objinner; public void changeinnervar(string str) objinner = new CMyInnerClass(); System.out.print(str); System.out.println(",run 外部類別函式, 執行結果 : objinner.innervar=0; objinner.innershow(); 以內部類別作為資料型態宣告物件變數 產生內部類別的物件實體 準備修改內部類別物件實體的資料 "); 因為有內部類別的物件實體, 所以可存取內部類別的成員 第 行的呼叫,run 外部類別函式 outvar= 第 行的呼叫,run 外部類別函式, 準備修改內部類別物件實體的資料 run 內部類別函式執行中 innervar=0.. 成員內部類別 () 第 ~ 行是內部類別 CMyInnerClass 的定義 () 第 行, 宣告外部類別的一個成員 objinner, 它的資料型態是一個物件參考, 未來將指向內部類別 CMyInnerClass 物件 不過初始值為 null () 第 行呼叫時, 在第 行不能存取內部類別的成員, 因為當時並未產生任何的內部類別物件實體 (objinner 當時為 null, 尚未指向任何一個物件實體 ) () 第 行呼叫時, 在 changeinnervar 函式內產生了內部類別的實體, 故可以透過 objinner 存取內部類別物件的成員 ( 第 行 ) 在上面的兩個範例中, 我們建立了三個觀念如下 : () 內部類別可以視為外部類別的成員, 所以存取權限並不會被 private 所限制, 且可以相互存取 0

21 .. 成員內部類別 () 外部類別要存取內部類別的物件成員, 必須已經產生了內部類別的物件實體 () 如果內部類別未被宣告為 private 等級, 則一般類別的外部程式也可以將它視為類別來使用, 只不過在產生內部類別物件實體時, 必須包含產生外部類別物件實體與產生內部類別物件實體等兩個步驟 針對第 () 點, 我們可以將產生內部類別的物件實體放在外部類別的建構子中執行, 如此可以確保每一個外部類別的函式都可以取用內部類別物件的成員.. 成員內部類別 針對第 () 點, 我們思考如何利用該特點, 加強內部類別的封裝性 ( 內部 ) 類別可以被宣告為 private 等級, 如果我們將類別宣告為 private 等級, 則一般類別不能取用該類別 但雖然內部類別被宣告為 private 等級, 由於它仍是外部類別的成員之一, 故外部類別仍可以取用它 如此, 對於一般類別而言, 想要取用內部類別, 就如同要存取其他 private 等級的成員一般, 一定要透過外部類別的其他成員來完成, 而無法直接取用它, 這樣子一來, 就加強了內部類別的封裝性 請見下一個範例.. 成員內部類別 觀念範例 - : 將內部類別多加一層封裝 範例 -:ch_.java( 隨書光碟 myjava\ch\ch_.java) /* 檔名 :ch_.java 功能 : 將內部類別多加一層封裝 */ package myjava.ch; public class ch_ // 主類別產生外部類別實體時, 會執行建 構子, 在建構子中以敘述產生內 部類別的物件實體 CMyOutClass outx = new CMyOutClass(); //CMyOutClass.CMyInnerClass innerx = outx.new CMyInnerClass(); outx.runinnermethod(); // 將產生執行結果第一行的輸出 outx.changeinnervar(); // 將改變內部類別物件成員 outx.printinnervar(); // 將產生執行結果第二行的輸出 outx.runinnermethod(); // 將產生執行結果第三行的輸出 0 0 class CMyOutClass private 等級的內部類別定義 private class CMyInnerClass public int innervar; public CMyInnerClass()innerVar=; public void innershow() System.out.println(" 內部類別函式執行中 innervar=" + innervar); public CMyInnerClass objinner; // 以內部類別作為資料型態宣告物件變數 public CMyOutClass() 在外部類別的建構子中, 先產生內部類 別的物件實體, 則只要產生外部類別的 objinner = new CMyInnerClass(); 物件實體, 就一定包含一個內部類別的 物件實體 public void printinnervar() System.out.println(" 外部類別函式執行中 innervar=" + objinner.innervar); public void changeinnervar() // 因為有內部類別的物件 objinner 的實體, 所以可讀取內部類別的成員 objinner.innervar=0;

22 .. 成員內部類別 0 public void runinnermethod() // 因為有內部類別的物件 objinner 的實體, 所以可執行內部類別的成員 objinner.innershow();// 正確的敘述 執行結果 : 內部類別函式執行中 innervar= 外部類別函式執行中 innervar=0 內部類別函式執行中 innervar=0.. 成員內部類別 () 第 ~0 行是內部類別 CMyInnerClass 的定義 它被宣告為 private 等級, 由於仍是外部類別的一個成員, 故外部類別可正確存取它 但一般類別則無法存取它, 例如第 行是錯誤的敘述 雖然內部類別的成員全部全都被宣告為 public 等級, 但由於一般類別無法產生內部類別的物件, 故仍無法讀取這些成員 () 第 ~ 行, 外部類別的其他成員, 由於都宣告為 public, 所以一般類別可以存取 () 第 ~ 行, 為了要讓外部類別的成員函式可以正確存取內部類別物件的成員, 故我們在外部類別的建構子中, 先產生內部類別的物件實體 由於建構子一定會先被執行, 故所有的成員函式都有內部類別的物件實體可以取用.. 成員內部類別 () 第 ~ 行, 由於內部類別被封裝起來了, 故我們要存取內部類別, 只能夠過外部類別的 public 函式來完成, 如此就等於進一步對於內部類別進行封裝了 下圖是本範例封裝示意圖 圖 - private 內部類別封裝示意圖.. 成員內部類別 static 外部類別成員函式存取內部類別的解決方案 method 若被宣告為 static, 就無法存取非 static 的成員, 而如果一個 method 被宣告為 static( 例如 main 函式 ), 要如何存取內部類別的成員呢? 方法有兩個, 第一是將內部類別宣告為 static( 加上修飾字 ), 但由於我們並未介紹何謂 static class, 故採用第二個方法也就是在外部類別的建構子內建立內部類別的物件 ( 因為建構子並非 static method, 故不受影響 ), 然後在 static method 中, 產生一個外部類別物件 ( 產生時會自動執行外部類別的建構子 ), 並透過 外部類別物件. 內部類別物件. 成員 來存取即可, 可請見下列範例

23 .. 成員內部類別.. 成員內部類別 觀念及實用範例 - : 透過外部類別的建構子存取內部類別的成員以解決 static 的問題 範例 -:ch_.java( 隨書光碟 myjava\ch\ch_.java) /* 檔名 :ch_.java 功能 : 透過外部類別的建構子存取內部類別的成員 */ package myjava.ch; public class ch_ // 主類別 ch_ obj = new ch_(); 建立主類別的物件實體, 會自動呼叫建構子 obj.objinner.innervar=0; // 存取內部類別物件實體成員 obj.objinner.innershow(); // 呼叫內部類別物件實體成員 public ch_() 在建構子內產生內部類別的物件實體, 而建構子不是 static objinner = new CMyInnerClass(); public CMyInnerClass objinner; //objinner 外部類別的一個欄位 class CMyInnerClass 內部類別不必被宣告為 public int innervar; static public CMyInnerClass()innerVar=; public void innershow() System.out.println(" 內部類別函式執行中 innervar=" + innervar); 執行結果 : 內部類別函式執行中 innervar=0 0.. 成員內部類別 在 static main() 內建立主類別的物件實體, 此時會呼叫主類別的建構子, 而在建構子內建立內部類別的物件實體 所以當外部類別物件實體 obj 被產生後, 內部類別物件實體 objinner 也已被產生, 此時,obj 物件會有一個欄位稱為 objinner, 該欄位也是一個物件, 所以也可以透過傳統語法存取物件成員 故只要透過兩層的. 即可完成我們的需求 ( 如第 行 ) 在許多物件中包含更小物件的設計中 ( 小物件為大物件的欄位 ), 也時常看到這樣的語法.. 區域內部類別 (local inner class) 區域內部類別相對於成員內部類別定義於外部類別之內, 並將之視為外部類別的一個成員 ; 區域內部類別 則是定義於某一個方法 (method) 之內, 並將之視為方法內的一個區域類別, 故生命週期與可見度僅限於該方法內 區域內部類別的實際應用極少 ( 後面要介紹的匿名類別比較多 ), 以下我們僅透過一個範例來解說 觀念範例 - : 區域內部類別的練習 範例 -:ch_.java( 隨書光碟 myjava\ch\ch_.java)

24 .. 區域內部類別 /* 檔名 :ch_.java 功能 : 區域內部類別 */ package myjava.ch; public class ch_ // 主類別 CMyOutClass outx = new CMyOutClass(); // 宣告並產生外部類別物件 outx.runoutclassmehtod(); // CMyOutClass.CMyInnerClass innerx // = (new CMyOutClass()).new CMyInnerClass();.. 區域內部類別 0 0 class CMyOutClass public void runoutclassmehtod() class CMyInnerClass public int innervar; 定義區域內部類別 public CMyInnerClass()innerVar=; public void innershow() System.out.println(" 區域內部類別函式執行中 innervar=" + innervar); CMyInnerClass objinner = new CMyInnerClass(); System.out.println(" 外部類別函式執行中 innervar=" + objinner.innervar); objinner.innervar=0; objinner.innershow(); System.out.println(" 外部類別函式執行中 innervar=" + objinner.innervar); //CMyInnerClass objinner; public void runoutclassmehtod() //CMyInnerClass objinner; 錯誤, 不能宣告區域內部類別的物件變數 錯誤, 不能宣告區域內部類別的物件變數.. 區域內部類別.. 匿名類別 (anonymous class) 執行結果 : 外部類別函式執行中 innervar= 區域內部類別函式執行中 innervar=0 外部類別函式執行中 innervar=0 () 第 ~ 行的內部類別定義於 runoutclassmehtod 函式內, 所以是一個區域內部類別 () 第 ~ 行, 在 runoutclassmehtod 函式內可以存取區域內部類別 () 對於非同類別的程式而言, 不能存取區域內部類別 例如第 行是不合法的語法 () 對於非同函式的程式而言, 即使與該函式位於同一個類別, 仍舊不能存取區域內部類別 例如第 行是不合法的語法 因為區域內部類別的可見度 (scope) 僅限於該函式內 匿名類別 完整名稱為匿名內部類別 (anonymous inner class), 它代表的是一個沒有名字的內部類別 嚴格來說, 它應該屬於一種 區域內部類別, 只不過它沒有名字 因此, 它也必須定義於某個方法之內, 如下語法 : Method 名稱 ( 參數串 ) 類別名稱物件名稱 = new [ 類別名稱 ( 引數串 )] 其實是父類別的名稱 匿名類別的實作區 ; 記得加上 ; // 其他 Method 的程式 定義 ( 區域 ) 匿名類別

25 .. 匿名類別 語法說明 : 通常使用匿名類別都是為了要將某個類別補足相關的函式, 或要實作某個介面的相關函式, 甚至是改寫某個函式, 但卻又不想讓這些新增與改寫的函式影響範圍超過該物件, 換句話說, 您可以把它看作是一種繼承或實作, 只不過影響力只及於該物件而已 事實上, 上述的類別名稱, 其實是匿名類別的父類別, 如果沒有父類別, 就使用 Object 當作父類別 以下我們透過範例來示範如何定義匿名類別 觀念範例 - : 定義匿名類別 範例 -:ch_.java( 隨書光碟 myjava\ch\ch_.java).. 匿名類別 /* 檔名 :ch_.java 功能 : 匿名類別 */ package myjava.ch; public class ch_ // 主類別 CB objx = new CB(); objx.runmehtod(); class CA // 類別定義 public int Var; public CA()Var=; public void show() System.out.println(" 類別 CA 的 show 執行中,Var=" + Var); public void show() System.out.println(" 類別 CA 的 show 執行中,Var=" + Var);.. 匿名類別.. 匿名類別 class CB public void runmehtod() // 匿名類別開始 CA obj = new CA() public void show() System.out.print(" 這是由匿名類別改寫的 show 函式 "); System.out.println(",Var=" + Var); 在匿名類別內新增 show() public void show() System.out.print(" 這是由匿名類別新增的 show 函式 "); System.out.println(",Var=" + Var); ; // 匿名類別結束 obj.var=0; obj.show(); obj.show(); //obj.show(); 匿名類別的影響力僅及於 obj, 而非 CA 類別的所有物件 執行第 行 在匿名類別內改寫 show() 無法執行新增的 show 函式, 下一個範例解決此問題 0 執行結果 : CA obj = new CA(); System.out.println(" "); obj.var=0; obj.show(); obj.show(); //obj.show(); 執行第 行無法執行新增的 show 函式 這是由匿名類別改寫的 show 函式,Var=0 類別 CA 的 show 執行中,Var= 類別 CA 的 show 執行中,Var=0 類別 CA 的 show 執行中,Var=0 第 行的輸出 第 0 行的輸出 第 行的輸出 0

26 .. 匿名類別 () 第 ~ 行, 這是一個類別 CA 的定義, 它包含了一個成員變數 Var, 以及兩個成員函式 show,show () 第 ~0 行, 這是一個類別 CB 的定義, 其中包含一個 runmehtod 函式, 我們在函式內定義了區域匿名類別 ( 第 ~ 行 ) () 第 ~ 行的匿名類別, 只會對物件 obj 產生作用 在匿名類別中, 則定義了兩個成員函式,show 與 show 事實上,CA 是匿名類別的父類別 ()obj obj 都是 CA 類別的物件 不過由於匿名類別改寫了 show 函式, 故第 行所執行的函式, 是改寫後的 show 函式 而匿名類別對於 obj 並不產生作用, 故第 行執行的仍是原本的 show 函式 () 第 行的 obj 無法執行 show 函式是很正常的, 因為匿名類別不對 obj 產生作用 但第 行的 obj 也無法執行新增的 show 函式 我們會在下一個範例解決這個問題.. 匿名類別 執行匿名類別新增的函式在上一個範例中, 我們得知, 如果原本類別中不存在該函式, 則透過匿名類別新增的函式, 也無法被執行 但如果修改一下語法, 則可以執行匿名類別新增的函式, 語法如下 : Method 名稱 ( 參數串 ) 定義 ( 區域 ) 匿名類別 ( new [ 類別名稱 ( 引數串 )] 匿名類別的實作區 新增的函式宣告 ). 新增的函式名稱 ; 其他 Method 的程式 記得加上 ; new 會回傳一個物件參考, 外面用 () 包裝起來, 就可以用. 來執行新增的函式, 正如同 (obj).method;.. 匿名類別.. 匿名類別 語法說明 : 我們可以取消原語法中接收的物件名稱, 此時, 整個匿名類別由於 new 運算子仍會回傳一個可視為隱藏的物件參考, 故透過該物件參考就可以執行新增的函式 不過要記得將全部的匿名類別定義使用 () 包裝起來, 再執行新增的函式, 並且原本的 ; 也應該移動到敘述的最後 若我們將上述語法中的不必要空白省略, 則可以形成下列語法格式 : Method 名稱 ( 參數串 ) (new [ 類別名稱 ( 引數串 )] // 定義 ( 區域 ) 匿名類別 匿名類別的實作區 新增的函式宣告 ). 新增的函式名稱 ; 語法說明 : 這個語法格式與上一個具有相同效力, 差別在於我們將 new 往上移到 ( 之後, 也把 ) 移到 之後, 最後再把. 新增的函式名稱 ; 移到) 之後 下列範例我們將採用如上的格式, 如果讀者覺得怪怪的, 可以自行修改成第一種格式語法 觀念範例 - : 執行匿名類別新增的函式 範例 -:ch_.java( 隨書光碟 myjava\ch\ch_.java) 其他 Method 的程式

27 .. 匿名類別.. 匿名類別 /* 檔名 :ch_.java 功能 : 執行匿名類別新增的函式 */ package myjava.ch; public class ch_ // 主類別 CB objx = new CB(); objx.runmehtod(); class CA // 類別定義 public int Var; public CA()Var=; 0 class CB public void runmehtod() ( new CA() // 匿名類別開始 public void show() System.out.print(" 這是由匿名類別新增的 show 函式 "); System.out.println(",Var=" + Var); ).show(); // 執行新增的 show 函式 執行結果 : 這是由匿名類別新增的 show 函式,Var= 第 ~ 行是匿名類別的定義, 並且執行新增的 show 函式, 請注意在匿名類別定義的前後必須使用 ( ) 來包裝.. 匿名類別.. 匿名類別 匿名類別的限制 匿名類別將會在視窗程式設計中, 使用作為關閉視窗事件的處理, 例如範例 - 而使用匿名類別還有許多限制, 整理如下 : () 在匿名類別內, 可以讀取外部類別的成員 () 匿名類別內不能宣告 static 的成員 () 匿名類別只能讀取在原隸屬函式中被宣告為 final 的區域變數, 無法讀取非 final 的區域變數 觀念範例 - : 匿名類別的限制 範例 -:ch_.java( 隨書光碟 myjava\ch\ch_.java) /* 檔名 :ch_.java 功能 : 匿名類別的限制 */ package myjava.ch; public class ch_ // 主類別 CB objx = new CB(); objx.runmehtod(); class CA // 類別定義 public int Var; public CA()Var=;

28 .. 匿名類別.. 匿名類別 0 0 class CB public int Var=; public void runmehtod() int localvar=0; // 非 final 變數 final int localvar=0; //final 變數 ( new CA() // 匿名類別開始 public int a=; 不能宣告 static 變數 //public static int b=; public void show() System.out.println(" 這是由匿名類別新增的 show 函式 "); System.out.println("Var=" + Var); 不能讀取 runmethod 函式 System.out.println("a=" + a); 中被宣告為 final 的區域變 //System.out.println(localVar); 數 System.out.println("localVar=" + localvar); ).show(); // 執行新增的 show 函式 執行結果 : 這是由匿名類別新增的 show 函式 Var= a= localvar=0 () 第 行可讀取外部類別的成員 Var () 第 0 行可讀取函式的 final 區域變數 第 行不可讀取函式的非 final 區域變數 Coding 偷撇步 由於巢狀類別的語法很複雜, 因此能夠不使用就盡量不要使用巢狀類別 本書在此介紹是為了方便下一章要介紹的視窗事件處理 我們可能會使用內部類別實作一個事件傾聽者, 如此一來, 傾聽者可以直接存取視窗元件, 而不必透過引數的傳遞, 因為內部類別可以直接取用外部類別的成員. 本章回顧 在本章中, 我們介紹了 Java 視窗程式的架構, 它主要是依靠 Frame 與 JFrame 類別來完成 其中 Frame 為 AWT 所提供,JFrame 則是 Swing 所提供 設計視窗程式, 可以設計一個視窗類別, 只要繼承 Frame 或 JFrame 即可 如果不想額外設計類別, 也可以直接透過 new 產生 Frame 或 JFrame 的實體來操作. 本章回顧 因為每一個元件都是一個物件, 因此視窗程式的設計, 是透過執行特定的方法設定屬性來完成 另一部分則為下一章要介紹的事件處理 收納器是可以容納其他元件的一種特殊元件, 以 java.awt.container 類別為基礎的元件就是收納器, 並且視窗本身就是一個收納器, 因此可以容納其他元件 在 Frame 視窗中, 我們將元件直接透過 Frame 實體的 add() 方法加入到 Frame 視窗中而在 JFrame 視窗中, 我們則是將元件加入到 JFrame 的 ContentPane 中而取得 JFrame 的 ContentPane 可以透過 getcontentpane() 方法來達成

29 . 本章回顧 關於版面的管理, 我們應該執行收納器元件的 setlayout() 方法來設定版面的管理如果想要手動設定各元件的位置與大小, 則可以設定為 setlayout(null) 如果要使用 Java 提供的版面管理員, 則可產生版面管理員類別的實體, 並將其參考作為引數傳入 setlayout() 方法在本章中, 我們示範了三種簡單的版面管理員, 包括 BorderLayout, FlowLayout 與 GridLayout. 本章回顧 收納器中也可以容納其他的收納器, 這些收納器可以視為內部的收納器, 而內部的收納器也可以容納元件, 因此, 可以造就更多種類的版面編排方式, 但通常更方便的方法是透過 IDE 直接來配置元件 由於我們並不打算詳細介紹每一個視窗元件, 只有在使用到某個視窗元件時才進行說明 欲了解 Java 的視窗元件外觀與對應的類別, 可以連到下列網址, 該網址中會顯示各種 Swing 元件的外觀 本章回顧 在本章的最後, 我們補充說明了巢狀類別, 也就是內部類別 內層的類別分為三種 第一種是有名字的成員內部類別 (member inner class) 第二種是有名字的區域內部類別 (local inner class) 最後一種則是沒有名字的匿名類別 (anonymous class) 其中, 匿名類別的主要作用是作為補充某個類別未實作的部分, 並且新增或改寫的函式內容之影響範圍只限制在某個物件, 這種方式將會在下一章的事件處理中常常出現所以讀者務必理解範例 -, 才有助於繼續下一章的學習 本章結束 Q&A 討論時間

PowerPoint 簡報

PowerPoint 簡報 Paint 繪圖板 JAVA 程式設計 指導老師 : 鄞宗賢 組員 : 4A3G0901 劉彥佐 4A3G0907 韓偉志 畫面預覽 匯入參數 package paint; import java.awt.*; import java.awt.event.*; import javax.swing.*; 主程式 public class paint{ public static void main(string[]

More information

18_GUI

18_GUI 圖形使用者介面 什麼是圖形使用者介面? 圖形使用者介面 (Graphics User Interface, GUI) 以圖像方式與使用者互動 : 程式顯示訊息 程式顯示資訊 操介界面 例子 : 電視遊樂器 電腦遊戲 Yung-Chen Chou 1 圖形使用者介面 要讓 Java 在 MS Windows 作業系統下或 Linux/Unix 下的 X windows 環境下以圖形方式呈現必須靠 Java

More information

Microsoft PowerPoint - 13_ClassAndObj.ppt

Microsoft PowerPoint - 13_ClassAndObj.ppt Visual Basic 2005 (VB.net 2.0) 程式設計 講師 : 戴志華 hana@arbor.ee.ntu.edu.tw 國立台灣大學電機工程研究所 第十三章 物件與類別 物件與類別 物件導向程式設計 物件與類別的建立 物件與類別 物件 (object) Ex. 人 屬性 (property) 身高 體重 血型 方法 (method) 走路 跑步 訊息 (message) 交談 事件

More information

0 0 = 1 0 = 0 1 = = 1 1 = 0 0 = 1

0 0 = 1 0 = 0 1 = = 1 1 = 0 0 = 1 0 0 = 1 0 = 0 1 = 0 1 1 = 1 1 = 0 0 = 1 : = {0, 1} : 3 (,, ) = + (,, ) = + + (, ) = + (,,, ) = ( + )( + ) + ( + )( + ) + = + = = + + = + = ( + ) + = + ( + ) () = () ( + ) = + + = ( + )( + ) + = = + 0

More information

Microsoft PowerPoint - P766Ch06.ppt

Microsoft PowerPoint - P766Ch06.ppt PHP5&MySQL 程式設計 第 6 章物件導向 6-1 認識物件導向 物件 (object) 或 案例 (instance) 屬性 (property) 欄位 (field) 或 成員變數 (member variable) 方法 (method) 或 成員函式 (member function) 事件 (event) 類別 (class) 物件導向程式設計 (OOP) 具有下列特點 : 封裝

More information

Swing-02.pdf

Swing-02.pdf 2 J B u t t o n J T e x t F i e l d J L i s t B u t t o n T e x t F i e l d L i s t J F r a m e 21 2 2 Swing C a n v a s C o m p o n e n t J B u t t o n AWT // ToolbarFrame1.java // java.awt.button //

More information

輕鬆學 Dreamweaver CS5 網頁設計..\Example\Ch0\ \.html..\example\ch0\ \mouse.txt..\example\ch0\ \ _Ok.html 學習重點 JavaScript 複製程式碼 mouse.txt Ctrl+C Ctrl+C 0-4

輕鬆學 Dreamweaver CS5 網頁設計..\Example\Ch0\ \.html..\example\ch0\ \mouse.txt..\example\ch0\ \ _Ok.html 學習重點 JavaScript 複製程式碼 mouse.txt Ctrl+C Ctrl+C 0-4 JAVA Extension 0..\Example\Ch0\ \ T.html..\Example\Ch0\ \ T.txt T.txt..\Example\Ch0\ \ T_Ok.html 提示 :. Marquee Marquee Font Color #FFFFFF BG Color #867bf Width 90 Height 50. T.txt Ctrl+C your scrolling

More information

任務二 : 產生 20 個有炸彈的磚塊, 放在隨機的位置編輯 Block 類別的程式碼 import greenfoot.; // (World, Actor, GreenfootImage, Greenfoot and MouseInfo) Write a description of class

任務二 : 產生 20 個有炸彈的磚塊, 放在隨機的位置編輯 Block 類別的程式碼 import greenfoot.; // (World, Actor, GreenfootImage, Greenfoot and MouseInfo) Write a description of class 踩地雷遊戲 高慧君南港高中 開啟專案 MineSweep 任務一 : 產生 30X20 個磚塊編輯 Table 類別的程式碼 import greenfoot.; // (World, Actor, GreenfootImage, Greenfoot and MouseInfo) import java.util.arraylist; Write a description of class MyWorld

More information

10-2 SCJP SCJD 10.1 昇陽認證 Java 系統開發工程師 的認證程序 Java IT SCJD

10-2 SCJP SCJD 10.1 昇陽認證 Java 系統開發工程師 的認證程序 Java IT SCJD 10 SCJD 簡介 Java 10-2 SCJP SCJD 10.1 昇陽認證 Java 系統開發工程師 的認證程序 Java IT SCJD 10 SCJD 10-3 Java Java SCJD 7 Swing RMI 10.1.1 The Assignment The Essay 9 10 10-4 SCJP SCJD 90 10.1.2 SCJP Java 90 120 Swing 10

More information

主程式 : public class Main3Activity extends AppCompatActivity { ListView listview; // 先整理資料來源,listitem.xml 需要傳入三種資料 : 圖片 狗狗名字 狗狗生日 // 狗狗圖片 int[] pic =new

主程式 : public class Main3Activity extends AppCompatActivity { ListView listview; // 先整理資料來源,listitem.xml 需要傳入三種資料 : 圖片 狗狗名字 狗狗生日 // 狗狗圖片 int[] pic =new ListView 自訂排版 主程式 : public class Main3Activity extends AppCompatActivity { ListView listview; // 先整理資料來源,listitem.xml 需要傳入三種資料 : 圖片 狗狗名字 狗狗生日 // 狗狗圖片 int[] pic =new int[]{r.drawable.dog1, R.drawable.dog2,

More information

CU0594.pdf

CU0594.pdf 8 SOHO 1 3 003 SOHO SOHO Coder Programmer HTML CSS PHP JavaScrip 009 LECTURE 1-1 1 048 PART 2 LECTURE 1-1 1 049 SOHO Landing Page Landing 050 PART 2 LECTURE 1-1 1 SEO SEO P.093 SEO SEO SEO SEO SEO 051

More information

Microsoft Word - JAVA Programming Language Homework I ans

Microsoft Word - JAVA Programming Language Homework I ans JAVA Programming Language Homework I - OO concept Student ID: Name: 1. Which of the following techniques can be used to prevent the instantiation of a class by any code outside of the class? A. Declare

More information

Chapter 9: Objects and Classes

Chapter 9: Objects and Classes (Swing) AWTEvent Font LayoutManager 1 Classes in the javax.swing package Heavyweight FontMetrics Object Color Panel Applet JApplet Graphics Component Container Window Frame JFrame * Dialog JDialog JComponent

More information

基于CDIO一体化理念的课程教学大纲设计

基于CDIO一体化理念的课程教学大纲设计 Java 语 言 程 序 设 计 课 程 教 学 大 纲 Java 语 言 程 序 设 计 课 程 教 学 大 纲 一 课 程 基 本 信 息 1. 课 程 代 码 :52001CC022 2. 课 程 名 称 :Java 语 言 程 序 设 计 3. 课 程 英 文 名 称 :Java Programming 4. 课 程 类 别 : 理 论 课 ( 含 实 验 上 机 或 实 践 ) 5. 授

More information

The Embedded computing platform

The Embedded computing platform 嵌入式系統及實驗 Embedded System and Experiment 詹曉龍 長庚大學電機系 Java 的類別與物件 : 宣告類別 建構子 public class Customer { private String name; private String address; // Customer 類別宣告 // 成員資料 public int age; // 建構子 : 使用參數設定成員資料初始值

More information

投影片 1

投影片 1 資料庫管理程式 ( 補充教材 -Part2) 使用 ADO.NET 連結資料庫 ( 自行撰寫程式碼 以實現新增 刪除 修改等功能 ) Private Sub InsertButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles InsertButton.Click ' 宣告相關的 Connection

More information

Microsoft PowerPoint - SE7ch07.ppt

Microsoft PowerPoint - SE7ch07.ppt 第七章物件導向設計 : 類別與物件 課前指引在本章中, 我們將正式進入物件導向程式設計的領域, 雖然我們在前面章節, 已經使用過某些 Java 類別庫的類別或物件 ( 例如 :Math 類別 String 物件 ), 但卻未曾學習如何建立一個物件 ( 事實上建立物件必須先宣告類別 ) 在本章中, 我們將從頭教您如何使用 Java 並以物件觀點設計程式, 逐漸體驗物件導向程式設計帶來的好處, 尤其是在發展中大型專案時,

More information

Microsoft PowerPoint - Chap03.ppt [相容模式]

Microsoft PowerPoint - Chap03.ppt [相容模式] 本章目的 2D / 3D 遊戲程式設計入門使用 XNA 3.0 與 C# 探討 XNA 遊戲程式內部的基本架構與遊戲開發流程 示範如何完成一個簡單的 XNA 遊戲方案 第三章 XNA 遊戲程式基本架構 1 2 新增 XNA 專案 新增 XNA 專案 3 4 XNA 相關的命名空間 Game1.cs 程式中的六個函數 using Microsoft.Xna.Framework; // 和 XNA 架構相關的型別

More information

第1章

第1章 第 10 章 類別的進階 - 繼承 抽象類別 介面與類別庫 1 本章提要 10.1 前言 10.2 繼承 10.3 改寫 10.4 Object 類別是類別之源 10.5 抽象類別 10.6 介面 10.7 內部類別 10.8 類別庫 10.9 綜合練習 10.10 後記 2 10.1 前言 本章將進ㄧ步來探討類別的進階應用, 包括以下主題 : 繼承 (Inheritance) 改寫 (Overriding)

More information

第1章

第1章 第 9 章 類別 1 本章提要 9.1 前言 9.2 物件導向程式設計基礎 9.3 類別的基本認識 9.4 公有成員與私有成員 9.5 類別變數與類別方法 9.6 進一步認識方法 9.7 進一步認識建構元 9.8 其它 9.9 綜合練習 9.10 後記 2 9.1 前言 物件導向程式設計的特性主要有 : 分而治之 (Divide and Conquer) 資訊隱藏 (Information Hiding)

More information

第1章

第1章 第 8 章 函式 1 本章提要 8.1 前言 8.2 如何定義函式 8.3 函式的呼叫和返回 8.4 傳遞陣列 8.5 方法多載 8.6 遞迴 8.7 綜合練習 8.8 後記 2 8.1 前言 每一種高階程式語言都有提供函式 (Function)( 或稱函數 ) 的功能, 以便將經常使用到的程式功能包裝成函式的形式, 如此一來便能反覆地呼叫該函式來完成某件特定工作在高階程式語言中, 副程式 (Subroutine)

More information

untitled

untitled 1 Outline 料 類 說 Tang, Shih-Hsuan 2006/07/26 ~ 2006/09/02 六 PM 7:00 ~ 9:30 聯 ives.net@gmail.com www.csie.ntu.edu.tw/~r93057/aspnet134 度 C# 力 度 C# Web SQL 料 DataGrid DataList 參 ASP.NET 1.0 C# 例 ASP.NET 立

More information

投影片 1

投影片 1 計算機程式及實習 期末報告 題目 : 六宿炒翻天 班級 : 奈米一乙姓名 : 陳洋翼學號 :4A514050 老師 : 謝慶存 程式說明 設計結帳系統, 選擇數量後, 在按下計算, 將會顯示總金額 若是老人或小孩, 將可享 8 折或 9 折的優惠 程式畫面 填選數量 在火腿蛋炒飯的數量選擇 1, 並按下計算, 可得總金額 50 元 程式畫面 打折 填選完後, 若客人是小孩或老人, 選擇欲打折項目,

More information

第二節 研究方法 本論文第一章 緒論 說明研究動機與目的 研究方法及研究的範圍及限制 並對 飲食散文的義界 作一觀念的釐清 第二章 文獻探討 就將本研究的理 論建構中的概念作釐清 分別為 現代文學 飲食文學的重要論著 等兩個部 分來描述目前文獻的研究成果 並探討其不足待補述的地方 本研究以 文化研 究 為主要研究基礎 統攝整個研究架構 在不同章節裡 佐以相關研究方法進 行論述 茲圖示如下 研究方法

More information

運算子多載 Operator Overloading

運算子多載 Operator Overloading 多型 Polymorphism 講師 : 洪安 1 多型 編譯時期多型 ( 靜態多型 ) function overloading 如何正確呼叫同名的函數? 利用參數個數與型態 operator overloading 其實同 function overloading 執行時期多型 ( 或動態多型 ) 如何正確呼叫不同物件的相同名稱的成員函數 利用繼承與多型 2 子類別與父類別物件間的指定 (assignment)

More information

2009年3月全国计算机等级考试二级Java语言程序设计笔试试题

2009年3月全国计算机等级考试二级Java语言程序设计笔试试题 2009 年 3 月 全 国 计 算 机 等 级 考 试 笔 试 试 卷 二 级 Java 语 言 程 序 设 计 ( 考 试 时 间 90 分 钟, 满 分 100 分 ) 一 选 择 题 ( 每 题 2 分, 共 70 分 ) 下 列 各 题 A) B) C) D) 四 个 选 项 中, 只 有 一 个 选 项 是 正 确 的 请 将 正 确 选 项 填 涂 在 答 题 卡 相 应 位 置 上,

More information

Chapter 9: Objects and Classes

Chapter 9: Objects and Classes What is a JavaBean? JavaBean Java JavaBean Java JavaBean JComponent tooltiptext font background foreground doublebuffered border preferredsize minimumsize maximumsize JButton. Swing JButton JButton() JButton(String

More information

Microsoft Word - 投影片ch11

Microsoft Word - 投影片ch11 Java2 JDK5.0 教學手冊第三版洪維恩編著博碩文化出版書號 pg20210 第十一章抽象類別與介面 本章學習目標認識抽象類別學習介面的使用認識多重繼承與介面的延伸 抽象類別與介面 11-2 11.1 抽象類別 抽象類別的目的是要依據它的格式來修改並建立新的類別 11.1.1 定義抽象類別 定義抽象類別的語法如下 : abstract class 類別名稱 { 宣告資料成員 ; // 定義抽象類別

More information

1: public class MyOutputStream implements AutoCloseable { 3: public void close() throws IOException { 4: throw new IOException(); 5: } 6:

1: public class MyOutputStream implements AutoCloseable { 3: public void close() throws IOException { 4: throw new IOException(); 5: } 6: Chapter 15. Suppressed Exception CH14 Finally Block Java SE 7 try-with-resources JVM cleanup try-with-resources JVM cleanup cleanup Java SE 7 Throwable getsuppressed Throwable[] getsuppressed() Suppressed

More information

單步除錯 (1/10) 打開 Android Studio, 點選 Start a new Android Studio project 建立專案 Application name 輸入 BMI 點下 Next 2 P a g e

單步除錯 (1/10) 打開 Android Studio, 點選 Start a new Android Studio project 建立專案 Application name 輸入 BMI 點下 Next 2 P a g e Android Studio Debugging 本篇教學除了最基本的中斷點教學之外, 還有條件式中斷的教學 條件式中斷是進階的除錯技巧, 在某些特定情況中, 我們有一個函數可能會被呼叫數次, 但是我們只希望在某種條件成立時才進行中斷, 進而觀察變數的狀態 而條件式中斷這項技巧正是符合這項需求 本教學分兩部分 單步除錯 (Page2~11, 共 10) 條件式中斷點 (Page12~17, 共 6)

More information

Microsoft Word - 投影片ch23

Microsoft Word - 投影片ch23 Java2 JDK5.0 教學手冊第三版洪維恩編著博碩文化出版書號 pg20210 第二十三章認識 Swing 本章學習目標 Swing 概述認識 JFrame 類別學習 Swing 的基本物件學習 Swing 物件之間的互動 認識 Swing 23-2 23.1 Swing 概述 Swing 提供了豐富的物件 更美觀的圖形介面, 以及更高的執行效率 幾乎每一個 AWT 物件都有一個相對應的 Swing

More information

Microsoft PowerPoint - SE7ch02.ppt

Microsoft PowerPoint - SE7ch02.ppt 第二章 Java 從零開始 (Java 程式的基本結構 ) 課前指引在本章中, 我們將透過一個非常簡單的 Java 程式來說明 Java 的程式結構 章節大綱 2.1 最簡單的 Java 程式範例 2.2 註解 (comment) 2.6 Java 程式的進入點 main( ) 2.7 Java 的敘述 2.3 package 區 2.4 import 區 2.8 println() 輸出方法的簡易使用法

More information

Microsoft Word - 04_object_Boxing_property_indexer.doc

Microsoft Word - 04_object_Boxing_property_indexer.doc C# 程式設計人員參考 object 型別是.NET Framework 中,System.Object 的別名 您可以將 任何型別的值指派給 object 型別的變數 所有的資料型別, 包括預先定義的和使用者定義的, 都繼承自 System.Object 類別 object 資料型別是物件 Box 目標或來源的型 別 範例下列範例顯示 object 型別的變數如何接受任何資料型別的值, 以及 object

More information

Microsoft PowerPoint - 11_Templates.ppt

Microsoft PowerPoint - 11_Templates.ppt 1 1. 上機考 20% 期末考 6/23( 四 ) 晚 6:30~8:30 範圍 : 第 7, 8, 9, 10 章實習內容 按座位坐, 隨機抽兩題 2. 紙上測驗 20% 6/21( 二 ) :9:30~11:00 課本 7-11, 13 章內容 2 第 11 章樣版 (Templates) 11.1 簡介 11.2 函式樣版 11.3 多載函式樣版 11.4 類別樣版 11.5 類別樣版與無型

More information

Mac Java import com.apple.mrj.*;... public class MyFirstApp extends JFrame implements ActionListener, MRJAboutHandler, MRJQuitHandler {... public MyFirstApp() {... MRJApplicationUtils.registerAboutHandler(this);

More information

[Short Essay:] 1. (5 points) Use state-of-memory diagram to describe the differences between x and y declared as follows: double[] x = new double[4];

[Short Essay:] 1. (5 points) Use state-of-memory diagram to describe the differences between x and y declared as follows: double[] x = new double[4]; Introduction to Programming (II) Spring 2008, Final Exam Name: ID Number: [True/False:] (5 points each) If your answer is "false", you have to provide correct reasons. Otherwise, no points will be given.

More information

Microsoft Word - Mail2000_SecurityPatch_

Microsoft Word - Mail2000_SecurityPatch_ Mail2000 安全性加強程式 網擎資訊軟體股份有限公司謹呈 1 Mail2000 安全性加強程式 Introduction Mail2000 安全性加強程式, 是針對 Mail2000 V4.0 以上版本, 包括 V4.0 及 V4.5 版本所提供, 以加強系統的安全性, 減少因惡意信件而引起的安全性問題 版本名稱 Mail2000 版本作業系統檔案名稱 V4.0 單一網域版本 V4.0 SDSS

More information

投影片 1

投影片 1 Chap 9 巢狀類別 多形與套件 9-1 巢狀類別 9-2 匿名內層類別 9-3 多形的基礎 9-4 多形的實作 9-5 套件 9-1 巢狀類別 9-1-1 巢狀類別 9-1-2 內層類別的使用 9-1-1 巢狀類別 - 說明 巢狀類別是在類別中擁有其他類別的宣告, 在外面的類別稱為 外層類別 (Enclosing Class); 內層的成員類別稱為 內層類別 (Inner Classes) 巢狀類別強調類別之間的關聯性,

More information

Chapter 3 Camera Raw Step negative clarity +25 ] P / Step 4 0 ( 下一頁 ) Camera Raw Chapter 3 089

Chapter 3 Camera Raw Step negative clarity +25 ] P / Step 4 0 ( 下一頁 ) Camera Raw Chapter 3 089 Photoshop CC Camera Raw Photoshop Camera Raw Step 1 3 1 2 3 SCOTT KELBY Step 2 B Camera Raw 088 Chapter 3 Camera Raw Chapter 3 Camera Raw Step 3-4 -100 negative clarity +25 ] P / -75-50 Step 4 0 ( 下一頁

More information

視窗程式設計

視窗程式設計 視窗程式設計 Windows Programming 視窗元件二 大綱 清單 (List) 下拉式選單 (Combo Box) 功能表 (Menu) 功能表處理事件 面板 (Panel) 捲軸 (Scroller) JList( 清單 ) 清單 是用來製作一連串的選項, 供使用者可以從清單中挑出所要選項, 所挑出可以有幾種方式, 例如 : JList( 清單 ) 清單的建立 使用 DefaultListModel

More information

CC213

CC213 : (Ken-Yi Lee), E-mail: feis.tw@gmail.com 9 [P.11] : Dev C++ [P.12] : http://c.feis.tw [P.13] [P.14] [P.15] [P.17] [P.23] Dev C++ [P.24] [P.27] [P.34] C / C++ [P.35] 10 C / C++ C C++ C C++ C++ C ( ) C++

More information

Microsoft Word - ACI chapter00-1ed.docx

Microsoft Word - ACI chapter00-1ed.docx 前言 Excel Excel - v - 財務管理與投資分析 -Excel 建模活用範例集 5 相關 平衡 敏感 - vi - 前言 模擬 If-Then 規劃 ERP BI - vii - 財務管理與投資分析 -Excel 建模活用範例集 ERP + BI + ERP BI Excel 88 Excel 1. Excel Excel 2. Excel 3. Excel - viii - 前言 1.

More information

雲端 Cloud Computing 技術指南 運算 應用 平台與架構 10/04/15 11:55:46 INFO 10/04/15 11:55:53 INFO 10/04/15 11:55:56 INFO 10/04/15 11:56:05 INFO 10/04/15 11:56:07 INFO

雲端 Cloud Computing 技術指南 運算 應用 平台與架構 10/04/15 11:55:46 INFO 10/04/15 11:55:53 INFO 10/04/15 11:55:56 INFO 10/04/15 11:56:05 INFO 10/04/15 11:56:07 INFO CHAPTER 使用 Hadoop 打造自己的雲 8 8.3 測試 Hadoop 雲端系統 4 Nodes Hadoop Map Reduce Hadoop WordCount 4 Nodes Hadoop Map/Reduce $HADOOP_HOME /home/ hadoop/hadoop-0.20.2 wordcount echo $ mkdir wordcount $ cd wordcount

More information

投影片 1

投影片 1 Chap 8 繼承 抽象類別與介面 8-1 類別的繼承 8-2 介面 8-3 介面的繼承 8-4 抽象類別 8-5 抽象類別與介面 8-6 常數類別 8-1 類別的繼承 8-1-1 類別架構 8-1-2 類別的繼承 8-1-3 覆寫和隱藏父類別的方法 8-1-4 隱藏父類別的成員變數 8-1-5 使用父類別的建構子 8-1-1 類別架構 - 繼承關係 類別的繼承關係可以讓我們建立類別架構, 在 UML

More information

Photoshop CS3 影像創造力 基礎講堂 8 學習流程 學習重要性 學習難度 必學指令工具 實作應用範例 創造舞台燈光的漸層繪圖 延伸學習 雜訊與半透明漸層 8-1 Photoshop Photoshop 8 136

Photoshop CS3 影像創造力 基礎講堂 8 學習流程 學習重要性 學習難度 必學指令工具 實作應用範例 創造舞台燈光的漸層繪圖 延伸學習 雜訊與半透明漸層 8-1 Photoshop Photoshop 8 136 漸層填色與圖樣填色 08 8-1 漸層填色 8-2 漸層填色編輯 8-3 油漆桶填色 8-4 編輯圖樣 Photoshop CS3 影像創造力 基礎講堂 8 學習流程 學習重要性 學習難度 必學指令工具 8-1 8-2 8-3 8-4 實作應用範例 創造舞台燈光的漸層繪圖 延伸學習 雜訊與半透明漸層 8-1 Photoshop 8-1-1 Photoshop 8 136 漸層填色與圖樣填色 漸層填色

More information

第一篇文概說第七章公文的用語及標點符號公本篇內容 第一章 緒論 第二章 公文的意義 第三章 公文與高 普 特各類考試 第四章 公文程式之意義及演變 第五章 公文之分類及其行文系統 第六章 公文之結構與行款 第一篇 第一章緒論 003 第一章緒論 等 等 004 最新應用公文 第一篇 第二章公文的意義 005 第二章公文的意義 第一節 一 須為公務員製作之文書 二 須為公務員 職務上 製作之文書 006

More information

用手機直接傳值不透過網頁連接, 來當作搖控器控制家電 ( 電視遙控器 ) 按下按鍵發送同時會回傳值來確定是否有送出 問題 :1. 應該是使用了太多 thread 導致在傳值上有問題 2. 一次按很多次按鈕沒辦法即時反應

用手機直接傳值不透過網頁連接, 來當作搖控器控制家電 ( 電視遙控器 ) 按下按鍵發送同時會回傳值來確定是否有送出 問題 :1. 應該是使用了太多 thread 導致在傳值上有問題 2. 一次按很多次按鈕沒辦法即時反應 專題進度 老師 : 趙啟時老師 學生 : 陳建廷 2013/10/13 用手機直接傳值不透過網頁連接, 來當作搖控器控制家電 ( 電視遙控器 ) 按下按鍵發送同時會回傳值來確定是否有送出 問題 :1. 應該是使用了太多 thread 導致在傳值上有問題 2. 一次按很多次按鈕沒辦法即時反應 程式碼 : package com.example.phone; import java.util.arraylist;

More information

Microsoft PowerPoint ppt

Microsoft PowerPoint ppt Java 程式設計基礎班 (8) 莊坤達台大電信所網路資料庫研究室 Email: doug@arbor.ee.ntu.edu.tw Class 8 1 回顧 Java Data Structure Class 8 2 Java AWT package Component: 一些 GUI 元件, 如 : Button Label 等 Container: 用來放置 GUI 元件的地方 Container

More information

D C 93 2

D C 93 2 D9223468 3C 93 2 Java Java -- Java UML Java API UML MVC Eclipse API JavadocUML Omendo PSPPersonal Software Programming [6] 56 8 2587 56% Java 1 epaper(2005 ) Java C C (function) C (reusability) eat(chess1,

More information

詞 彙 表 編 號 詞 彙 描 述 1 預 約 人 資 料 中 文 姓 名 英 文 姓 名 身 份 證 字 號 預 約 人 電 話 性 別 2 付 款 資 料 信 用 卡 別 信 用 卡 號 信 用 卡 有 效 日 期 3 住 房 條 件 入 住 日 期 退 房 日 期 人 數 房 間 數 量 入

詞 彙 表 編 號 詞 彙 描 述 1 預 約 人 資 料 中 文 姓 名 英 文 姓 名 身 份 證 字 號 預 約 人 電 話 性 別 2 付 款 資 料 信 用 卡 別 信 用 卡 號 信 用 卡 有 效 日 期 3 住 房 條 件 入 住 日 期 退 房 日 期 人 數 房 間 數 量 入 100 年 特 種 考 試 地 方 政 府 公 務 人 員 考 試 試 題 等 別 : 三 等 考 試 類 科 : 資 訊 處 理 科 目 : 系 統 分 析 與 設 計 一 請 參 考 下 列 旅 館 管 理 系 統 的 使 用 案 例 圖 (Use Case Diagram) 撰 寫 預 約 房 間 的 使 用 案 例 規 格 書 (Use Case Specification), 繪 出 入

More information

第1章

第1章 第 15 章 標準類別 1 本章提要 15.1 前言 15.2 基本資料類別介紹 15.3 Integer 類別 15.4 Double 類別 15.5 Float 類別 Long 類別 Short 類別 15.6 數學相關類別 Math 15.7 後記 2 15.1 前言 不同基本資料型別可以互相轉換, 但也只予許由小轉大的情況, 例如 1. byte 轉為 short int long float

More information

(京)新登字063号

(京)新登字063号 教 育 部 职 业 教 育 与 成 人 教 育 司 推 荐 教 材 Java 程 序 设 计 教 程 ( 第 二 版 ) 沈 大 林 主 编 沈 昕 肖 柠 朴 曾 昊 等 编 著 内 容 简 介 Java 是 由 美 国 SUN 公 司 开 发 的 一 种 功 能 强 大 的, 具 有 简 单 面 向 对 象 分 布 式 可 移 植 等 性 能 的 多 线 程 动 态 计 算 机 编 程 语 言

More information

ActiveX Control

ActiveX Control ActiveX Control For Visual Basic 2005.NET [ 版本 : 1.0] 1 安裝 Windows 驅動程式 請依照下列步驟 : 1. 執行 Windows 驅動程式安裝程式 ( 此範例為 PIO-DIO) 驅動程式位置 : CD:\NAPDOS\PCI\PIO-DIO\dll_ocx\Driver http://ftp.icpdas.com/pub/cd/iocard/pci/napdos/pci/pio-dio/dll_ocx/driver/

More information

建立Android新專案

建立Android新專案 經濟部工業局 Android 智慧型手機程式設計實務應用班 Android WebService 建國科技大學資管系 饒瑞佶 2012/4 WebService 需要 ksoap2-android-assembly-2.5.2-jar-withdependencies.jar 或 ksoap2-android-assembly-2.5.2-jar-withdependencies_timeout1.jar

More information

投影片 1

投影片 1 數位相片基礎編修 Photoshop,,,, 2 ,, 3 / 4 3-1,...,, Photoshop,,, 5 5 6 ,,..., 5,,, 7 3-2,...,,, 8 , Photoshop,,, / 9 10 ,,,,,, 03-02.jpg,,,,, Photoshop " ", Photoshop 11 12 / /, Photoshop, 13 14 ,,, " " " " 6

More information

Microsoft PowerPoint - ch04_AEL0080.ppt

Microsoft PowerPoint - ch04_AEL0080.ppt 4 選擇 在正常的情況下, 電腦程式的執行是以敘述的排列次序逐步處理的 使用控制架構 (control structures) 可以改變這種既定的先後次序, 讓程式得以進行更複雜的運算, 或以更簡潔的指令來實現演算法 1/42 選擇 4.1 演算法的描述方式 4.2 變數的運用範圍 (Scope of variables) 4.3 if- 敘述 4.4 巢狀 if- 敘述 (Nested if statements)

More information

<A4E2BEF7B4FAB8D5B3F8A F52322E786C7378>

<A4E2BEF7B4FAB8D5B3F8A F52322E786C7378> 製表日期 : 2008 年 9 月 17 日 Mobile Java Applet 手機安裝測試報告表 已完成測試機型數量 :317 台 ; 無問題 ( 可安裝 / 可執行 ) 機型 :315 台無法使用 :2 台 ; 特殊註記機型 :2 台 廠牌 機型 測試狀況 OK 不 OK 安裝資料夾 ( 目錄 ) 備註 NOKIA N95 應用程式 NOKIA 6110 應用程式 NOKIA 3120 應用程式

More information

第一章 簡介

第一章  簡介 數 數 數 HLOOKUP VLOOKUP LOOKUP VLOOKUP VLOOKUP(,, 欄, 不 ) =Vlookup(lookup_vaule, table_array, col_index_num, [range_lookup]) 欄 欄 列 欄 行 料 列 欄 不 邏 TRUE 省略 不 數 FALSE 不 #N/A 金 不 例 金 例 數 0 0 300,000 300,000 不

More information

Chapter V.S. PC

Chapter V.S. PC Chapter 14 14-1 V.S. PC 14-2 14-3 14-4 14-1 V.S. PC PC PC Yahoo! PC (https://tw.yahoo.com/) Yahoo! (https:// tw.mobi.yahoo.com/) Yahoo! a b a PC b PC PC Flash HTML5 CSS3 PC 14-2 14-3 PC PC Yahoo! PC https://tw.yahoo.com/

More information

Dynamic Layout in Android

Dynamic Layout in Android Dynamic Layout in Android 建國科技大學資管系 饒瑞佶 2013/5 V1 Layout 多半都透過 res/layout/xml 格式設定來達成 Android 是 OOP, 所以可以動態產生 Layout 重點是 Layout 的階層關係 (Hierarchy) 需要處理對應事件 最後一樣用 setcontentview 加入 Layout 一 加入現有 Layout 中

More information

Microsoft PowerPoint - B9-2.pptx

Microsoft PowerPoint - B9-2.pptx 單元名稱 : 9 三角函數的積分 教學目標 : 使學生了解三角函數的積分 三角函數積分的類型及一些積分技巧 學習時數 : 約一小時 教學內容 :. [ 第一類型 ] 六個三角函數本身的積分. [ 第二類型 ] sin n 及 os n 的積分 sin os m n. [ 第三類型 ] 的積分 4. [ 第四類型 ] n 及 ot n 的積分 5. [ 第五類型 ] n 及 s n 的積分 m 6.

More information

<4D F736F F F696E74202D20B5DA37D5C2204A617661B5C4CDBCD0CED3EBD3C3BBA7BDE7C3E62E BBCE6C8DDC4A3CABD5D>

<4D F736F F F696E74202D20B5DA37D5C2204A617661B5C4CDBCD0CED3EBD3C3BBA7BDE7C3E62E BBCE6C8DDC4A3CABD5D> 第 7 章 Java 的图形与用户界面 7.1 概述 7.2 底层容器类 JFrame 和 JApplet 7.3 容器的布局 74 7.4 字体和颜色的使用 7.1 概述 利用 Java 中的图形 图像和重要的图形界面组件 (Componet) p 可以实现不同外观要求的窗口 图形和交互方式 1.java.awt awt 包 AWT 是抽象窗口工具集 Abstract Window Toolkit

More information

46 2011 11 467 數位遊戲式學習系統 7 2011 11 467 47 3 DBGameSys 48 2011 11 467 正規化資料模組 如何配置並儲存電子化資料 以 便減少資料被重覆儲存的程序 DBGameSys的主要功能模組包 學習者 審核評分模組 含 正規化資料模組 審核評分 模組 高分列表模組3大區塊 系統資料庫 在正規化資料模組的執行 高分列表模組 過程中 先要求學習者瀏覽遊戲

More information

untitled

untitled 4.1AOP AOP Aspect-oriented programming AOP 來說 AOP 令 理 Cross-cutting concerns Aspect Weave 理 Spring AOP 來 AOP 念 4.1.1 理 AOP AOP 見 例 來 例 錄 Logging 錄 便 來 例 行 留 錄 import java.util.logging.*; public class HelloSpeaker

More information

<4D F736F F D20B1D0A87CB3A1A7EFB5BDAE76B8EAB867B64FB8C9A7555FABCAADB1>

<4D F736F F D20B1D0A87CB3A1A7EFB5BDAE76B8EAB867B64FB8C9A7555FABCAADB1> 教育部改善師資經費補助 正修科技大學 102 年度教師成果報告 ****************************** 跨平台 APP 開發從零開始 ****************************** 團體 個人 單 位 : 電子工程系 單位主管 : 陳振聲 ( 簽章 ) 職 姓 稱 : 副教授 名 : 林宜賢 執行期間 :102 年 8 月 26 日至 8 月 28 日 教評會審查期間

More information

4. 如下的程式碼中, 宣告了類別 A3 和 B3 由於在兩個類別中都定義了 print() 的方法, 所以依據定義, 總共有兩次的 overloading 以及一次的 overriding public class A3 { public class B3 extends A3 { protect

4. 如下的程式碼中, 宣告了類別 A3 和 B3 由於在兩個類別中都定義了 print() 的方法, 所以依據定義, 總共有兩次的 overloading 以及一次的 overriding public class A3 { public class B3 extends A3 { protect 姓名 : 物件導向程式設計 (II) Spring 2010, 期中考 學號 : 是非題 : ( 每題 5 分 ) 注意 : 若答案為 非, 你必須提供正確的解釋才有分數 ; 否則, 以零分計 若有程式錯誤, 請回答 非 並指出錯誤 1. 如下的程式碼中, 宣告了類別 A1 和 B1 若在其他類別( 如控制類別 ) 執行 B1 b1 = new B1(5);, 則 a1 的值會改成 5 public

More information

EJB-Programming-3.PDF

EJB-Programming-3.PDF :, JBuilder EJB 2.x CMP EJB Relationships JBuilder EJB Test Client EJB EJB Seminar CMP Entity Beans Value Object Design Pattern J2EE Design Patterns Value Object Value Object Factory J2EE EJB Test Client

More information

第1章

第1章 第 16 章 千變萬化的視窗程式 1 本章提要 16.1 前言 16.2 AWT package 介紹 16.3 視窗 (Frame) 16.4 版面管理員 (Layout Manager) 16.5 各種好用的圖形介面元件 16.5.1 勾選元件 Checkbox 16.5.2 文字框 TextField 16.5.3 列示 List 16.5.4 標籤 Label 16.5.5 選單 Menu

More information

書面

書面 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 5.4 互動功能畫面 程式碼請參考附件-程式三 在進入互動頁面時 會執行setAllText()依寵物狀態數值來 設定狀態文字與頭像 並且依心情決定是否要不要播放音效 觸摸的區域 由於是自己寫的 view 所以並未透過xml來設置 而是透過Layut.addview()來動態新增

More information

Microsoft Word - PB_T_ doc

Microsoft Word - PB_T_ doc 建構 WPF Window PowerBuilder.NET 12 可以開發 WPF 應用程式, 你可以利用 XAML 標籤語言設計豐富的使用者介面, 後端程式碼也可以使用你熟悉的 PowerScript, 讓你兼具傳統, 又可開發創新下一代視窗應用程式 而最重要的, 整個開發的技術和觀念, 甚至於開發順序 步驟或畫面, 都幾乎和以往 PowerBuilder Classic 的介面相似, 可以讓既有

More information

OOP with Java 通知 Project 4: 4 月 18 日晚 9 点 关于抄袭 没有分数

OOP with Java 通知 Project 4: 4 月 18 日晚 9 点 关于抄袭 没有分数 OOP with Java Yuanbin Wu cs@ecnu OOP with Java 通知 Project 4: 4 月 18 日晚 9 点 关于抄袭 没有分数 复习 类的复用 组合 (composition): has-a 关系 class MyType { public int i; public double d; public char c; public void set(double

More information

840 提示 Excel - Excel -- Excel (=) Excel ch0.xlsx H5 =D5+E5+F5+G5 (=) = - Excel 00

840 提示 Excel - Excel -- Excel (=) Excel ch0.xlsx H5 =D5+E5+F5+G5 (=) = - Excel 00 Excel - - Excel - -4-5 840 提示 Excel - Excel -- Excel (=) Excel ch0.xlsx H5 =D5+E5+F5+G5 (=) = - Excel 00 ( 0 ) 智慧標籤 相關說明提示 -5 -- Excel 4 5 6 7 8 + - * / % ^ = < >= & 9 0 (:) (,) ( ) Chapter - :,

More information

内 容 简 介 本 书 是 一 本 关 于 语 言 程 序 设 计 的 教 材, 涵 盖 了 语 言 的 基 本 语 法 和 编 程 技 术, 其 中 包 含 了 作 者 对 语 言 多 年 开 发 经 验 的 总 结, 目 的 是 让 初 学 的 读 者 感 受 到 语 言 的 魅 力, 并 掌

内 容 简 介 本 书 是 一 本 关 于 语 言 程 序 设 计 的 教 材, 涵 盖 了 语 言 的 基 本 语 法 和 编 程 技 术, 其 中 包 含 了 作 者 对 语 言 多 年 开 发 经 验 的 总 结, 目 的 是 让 初 学 的 读 者 感 受 到 语 言 的 魅 力, 并 掌 语 言 程 序 设 计 郑 莉 胡 家 威 编 著 清 华 大 学 逸 夫 图 书 馆 北 京 内 容 简 介 本 书 是 一 本 关 于 语 言 程 序 设 计 的 教 材, 涵 盖 了 语 言 的 基 本 语 法 和 编 程 技 术, 其 中 包 含 了 作 者 对 语 言 多 年 开 发 经 验 的 总 结, 目 的 是 让 初 学 的 读 者 感 受 到 语 言 的 魅 力, 并 掌 握 语

More information

SW cdr

SW cdr 1~2 3 4 5~6 7~8 9~10 11 12 13 14 15 16~18 16 16 17 17 18 18 18 19 19 19 20 21 22 23~26 23 24 24 25 26 27 27 27 : 110V 1 110V 110V 15A 2 3 23 24 4 ( ) 5 6 1 2 26 20 l 1 7 3 4 5 15 17 18 12 7~13 6 ~ 8 ~

More information

EJB-Programming-4-cn.doc

EJB-Programming-4-cn.doc EJB (4) : (Entity Bean Value Object ) JBuilder EJB 2.x CMP EJB Relationships JBuilder EJB Test Client EJB EJB Seminar CMP Entity Beans Session Bean J2EE Session Façade Design Pattern Session Bean Session

More information

Microsoft PowerPoint - 第14章.ppt

Microsoft PowerPoint - 第14章.ppt Windows 繪圖的認識 在視窗 Form 表單上, 繪製圖案, 必須要有幾個動作 : Step 1: 定義及取得 Graphics 物件,Graphics 代表 Windows 中的繪圖區域, 範圍為 Form 表單視窗 Step 2: 利用 Graphics 物件來進行各種繪圖 Step 3: 必須釋放 Graphics 物件, 使用 Dispose( ) 釋放 [ 範例 ] 設計一個程式,

More information

Microsoft PowerPoint - ch03

Microsoft PowerPoint - ch03 第三章基礎繪圖 (Basic Graphics) 3 1 簡介 3 2 Graphics Class 3 3 3 直線繪製 3 4 長方形繪製 3 5 橢圓形繪製 3 6 弧線繪製 3 7 多邊形繪製 3 8 圖形剪裁 3 9 圖形複製 3 10 習題 (Exercises) 3 1 簡介 在基礎圖文繪製上, 除了前章所探討的文字繪製之外, 本章將介紹基礎圖形之繪製 類別 Graphics 提供了各類圖形之繪製方法程序,

More information

本章大綱 解剖學與生理學的定義人體組成的層次身體系統介紹恆定 正回饋 負回饋恆定正回饋機轉負回饋機轉解剖語言解剖學姿勢身體剖面體腔背側體腔腹側體腔腹部四象限分法與九分法四象限分法九分法 學習目標 1. 能了解解剖學和生理學的定義及範圍 2. 能了解人體組成的各個階層 3. 能了解人體的基本結構 4.

本章大綱 解剖學與生理學的定義人體組成的層次身體系統介紹恆定 正回饋 負回饋恆定正回饋機轉負回饋機轉解剖語言解剖學姿勢身體剖面體腔背側體腔腹側體腔腹部四象限分法與九分法四象限分法九分法 學習目標 1. 能了解解剖學和生理學的定義及範圍 2. 能了解人體組成的各個階層 3. 能了解人體的基本結構 4. 第一章 本章大綱 解剖學與生理學的定義人體組成的層次身體系統介紹恆定 正回饋 負回饋恆定正回饋機轉負回饋機轉解剖語言解剖學姿勢身體剖面體腔背側體腔腹側體腔腹部四象限分法與九分法四象限分法九分法 學習目標 1. 能了解解剖學和生理學的定義及範圍 2. 能了解人體組成的各個階層 3. 能了解人體的基本結構 4. 能了解人體恆定的機轉 5. 知道人體的解剖語言 6. 能明白人體各項解剖面的定義 7. 能清楚了解人體的主要體腔及重要器官位置的敘述方式

More information

第1章

第1章 第 18 章 Swing 1 本章提要 18.1 前言 18.2 Swing 介紹 18.3 視窗元件 18.3.1 JFrame 18.3.2 Content Pane 18.3.3 Menu Bar 18.4 Swing 元件 18.4.1 JCheckBox JRadioButton JComboBox 18.4.2 JTextField JPasswordField 18.4.3 JTable

More information

Microsoft PowerPoint - 09.Android 程式設計-SQLite

Microsoft PowerPoint - 09.Android 程式設計-SQLite 計劃名稱 : 104 年度教育部資通訊軟體創新人才推升推廣計畫跨校資源中心 : 雲端運算 ( 國立中山大學 ) 課程名稱 : 網路及平台服務 Part1- 課程教材 教材名稱 :Android 程式設計 -SQLite 國立高雄大學資訊工程學系張保榮教授 大綱 SQLite execsql() 函式 rawquery() 函式 insert() 函式 delet() 函式 update() 函式 query()

More information

Chapter 9: Objects and Classes

Chapter 9: Objects and Classes Java application Java main applet Web applet Runnable Thread CPU Thread 1 Thread 2 Thread 3 CUP Thread 1 Thread 2 Thread 3 ,,. (new) Thread (runnable) start( ) CPU (running) run ( ) blocked CPU sleep(

More information

... 03... 10 2... 15...20... 26... 30... 34

... 03... 10 2... 15...20... 26... 30... 34 99 ... 03... 10 2... 15...20... 26... 30... 34 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 認知概念發展教具 概念類 1. 理解概念 2. 空間概念 3. 速度概念 4. 專注力 5. 記憶力 6. 數概念 理解概念 空間概念 認知概念發展教具

More information

Microsoft PowerPoint - C-Ch11.ppt

Microsoft PowerPoint - C-Ch11.ppt 各式各樣的資料型態 11-1 結構的基礎知識 決定新的型態 關於結構 結構資料型態可以將不同資料型態的值整合成新的型態 結構型態的宣告語法 : struct 結構型態 { 資料型態識別字 ; 資料型態識別字 ; }; 加上 struct 進行宣告 宣告結構變數 語法 : 結構型態結構變數名稱 ; 範例 : struct Car car1; 對成員進行存取 使用結構型態的成員時, 必須使用成員選擇運算子

More information

Microsoft PowerPoint - EmbSys101_Java Basics.ppt [相容模式]

Microsoft PowerPoint - EmbSys101_Java Basics.ppt [相容模式] Java Basics Hi Hsiao-Lung Chan, Ph.D. Dept Electrical Engineering Chang Gung University, Taiwan chanhl@maili.cgu.edu.twcgu 執行環境 - eclipse 點選 eclipse 軟體執行檔 設定工作路徑 eclipse 開啟 2 建置 Java 專案 File New project

More information

Microsoft PowerPoint - 18_Event.pptx

Microsoft PowerPoint - 18_Event.pptx 第十八章事件處理 認識 Java 的委派事件模式認識並學習使用各種事件處理學習各種物件的事件處理 1 18.1 委派事件模式 委派事件 指當事件發生時, 產生事件的物件會把 訊息 轉給 事件傾聽者 (event listener) 處理 下圖說明 委派事件模式 的運作流程 : 2 簡單的範例 18.1 委派事件模式 視窗內加入按鈕, 尚未加入事件的處理之程式 : 視窗內有一按鈕, 當此按鈕按下時,

More information

Microsoft PowerPoint - chap07.ppt

Microsoft PowerPoint - chap07.ppt 第七章類別類別與物件 資訊科技系 林偉川 類別的定義語法 修飾字 class 類別名稱 { // 類別的標頭 // 屬性宣告 // 建構子定義 // 方法定義 2 1 類別的修飾字 public- 公開類別, 宣告成此種類別可以被任何類別所使用 無修飾字 (default) 類別, 此種類別僅能被同一套件 (package) 內的類別使用 final- 此種類別不可被繼承 abstract- 此為抽象類別的修飾字

More information

Microsoft Word - ok翁志文、張佳音...doc

Microsoft Word - ok翁志文、張佳音...doc 1 壹 研究動機 一般而言 傳統大三弦琴碼的擺放位置 圖 1 大約在琴鼓下方 由下往 上三分之一的地方 約 8.5 公分 但是這種擺法 學生在初學大三弦時 左手 常伴隨著指距較大 音準較難以掌握的困擾 為解決這個技巧上的問題 必須不 斷練習將手指指距撐開 並在琴桿上做記號來加以輔助 圖 1 傳統琴碼三分之一的擺放位置 8.5 公分 目前 北京中央音樂學院談龍建教授 採取將琴碼位置 往上移至 五度音

More information

References

References 第四章模擬實驗與結果分析 4.1 模擬實驗的設計與假設本實驗使用 NS-2(Network Simulater ver. 2.29) 進行模擬, 我們另外使用 WiMAX_v2.3 module[13], 這是一個 NS-2 的 WiMAX 模組 由於 WiMAX_v2.3 module 為目前 NS-2 上有支援 WiMAX QoS 設計的模組, 因此我們將利用它來做為我們實驗的環境, 最後我們將在本章比較驗證實驗的結果

More information

The golden pins of the PCI card can be oxidized after months or years

The golden pins of the PCI card can be oxidized after months or years Q. 如何在 LabWindows/CVI 編譯 DAQ Card 程式? A: 請參考至下列步驟 : 步驟 1: 安裝驅動程式 1. 安裝 UniDAQ 驅動程式 UniDAQ 驅動程式下載位置 : CD:\NAPDOS\PCI\UniDAQ\DLL\Driver\ ftp://ftp.icpdas.com/pub/cd/iocard/pci/napdos/pci/unidaq/dll/driver/

More information

星星排列 _for loop Protected Sub Page_Load(ByVal sender As Object, ByVal e As Dim h As Integer = 7 'h 為變數 ' Dim i, j As Integer For i = 1 To h

星星排列 _for loop Protected Sub Page_Load(ByVal sender As Object, ByVal e As Dim h As Integer = 7 'h 為變數 ' Dim i, j As Integer For i = 1 To h 資訊系統與實習 製作 : 林郁君 一 2009.09.28 9X9 'button 被按下後 ' Dim i, j As Integer For i = 1 To 9 'i 從 1 到 9' For j = 1 To 9 'j 從 1 到 9' If j * i < 10 Then ' 如果 j 乘上 i 是為個位數 ' Response.Write(i & "*" & j & " =" & i *

More information

第七章 繼承

第七章 繼承 繼承概念的優點 類別再使用 ( 程式碼再使用 ) 抽象化概念再使用 類別關係階層化 1 2-3 簡介繼承 Q: Q: 人 黑猩猩與猴子的有哪些共同屬性? 繼承 靈長類特徵 (( 屬性 )) -- 手 足 脊椎 大拇指型態行為 :: -- 育兒 :: 哺乳 -- 使用工具 人類 黑猩猩 彌猴 人類是靈長類的一種 人類繼承了靈長類應有的特徵及行為 人類繼承了靈長類 2 繼承的概念 員工 (employee)

More information

<img>

<img> 04 圖片 4-1 4-2 4-3 4-4 網頁程式設計 4-1 網頁多媒體 Flash Java Applets HTML 8 4-1-1 圖片 JPEG Joint Photographic Experts Group 非失真模式 (lossless) 基本模式 (baseline standard) 1 2 12 JPEG 6 JPEG.jpg.jpe.jpeg GIF (graphic

More information

Chapter 9: Objects and Classes

Chapter 9: Objects and Classes Fortran Algol Pascal Modula-2 BCPL C Simula SmallTalk C++ Ada Java C# C Fortran 5.1 message A B 5.2 1 class Vehicle subclass Car object mycar public class Vehicle extends Object{ public int WheelNum

More information

Chapter 19 視窗架構 (Frame Structures) 前述各章資料均顯示於 Dos ( 或命令提示字元 ) 視窗, 為了操作方便 本章將引導 圖型介面視窗之設計, 以為爾後各章節結合網路串流資訊 設計更為方便的操作介 面 圖型介面 (Graphic User Interface GU

Chapter 19 視窗架構 (Frame Structures) 前述各章資料均顯示於 Dos ( 或命令提示字元 ) 視窗, 為了操作方便 本章將引導 圖型介面視窗之設計, 以為爾後各章節結合網路串流資訊 設計更為方便的操作介 面 圖型介面 (Graphic User Interface GU PART 4 圖型介面 (GUI) 與網路應用 前 述各章資料均顯示於 Dos ( 或命令提示字元 ) 視窗, 為了操作方便 本章將引導圖型介面視窗之設計, 以為爾後各章節結合網路串流資訊 設計更為方便的操作介面 圖型介面 (Graphic User Interface GUI) 是使用者與系統執行功能之介面, 使用者依照圖型介面視窗的種類與位置 以滑鼠或鍵盤驅動系統功能作執行 Chapter 19

More information

T2 楊輝三角塔 說明 : 請在視窗上配置二文字方塊及一按鈕, 在二文字方塊上分別輸入一楊暉三角塔之階數 a 及 b, 按上述按鈕後, 輸出該第 a 階到第 b 階之楊暉三角塔 ( 或稱巴斯卡三角型 ) 請注意 : 三角塔之排列須對偁, 不可為倒三角或倒梯形, 否則不予計分 輸入的數值範圍為 0 ~

T2 楊輝三角塔 說明 : 請在視窗上配置二文字方塊及一按鈕, 在二文字方塊上分別輸入一楊暉三角塔之階數 a 及 b, 按上述按鈕後, 輸出該第 a 階到第 b 階之楊暉三角塔 ( 或稱巴斯卡三角型 ) 請注意 : 三角塔之排列須對偁, 不可為倒三角或倒梯形, 否則不予計分 輸入的數值範圍為 0 ~ T1 算術式之求解 說明 : 請在視窗上配置一文字方塊及一按鈕, 在文字方塊上輸入一數學運算式, 按上述按鈕後, 輸出該數學運算式的最後結果值 該運算式的運算元皆介於 0~10000, 而運算子僅含 +, 且該運算式的字元總個數 ( 即運算元的個數加上運算子的個數 ) 最多為 30, 程式中必須有須有判斷範圍的程式, 若是超出題目所訂定的字串長度則要求重新輸入 文字方塊文字 :80+123456 輸出

More information

Microsoft Word - GUI design.doc

Microsoft Word - GUI design.doc GUI 程式設計 壹 圖形元件 一 認識圖形元件 hndlgraf 指令 Handle graph 的縮寫 說明 二 認識圖形元件的 handle 指令 get(h, 'pr') get(h) set(h, 'pr1', 'val1', 'pr2', 'val2') set(h) 說明取得 handle h 的某屬性 (properity) 之數值取得 handle h 的所有屬性之數值設定 handle

More information

Microsoft PowerPoint - chap08.ppt

Microsoft PowerPoint - chap08.ppt 第八章繼承 資訊科技系 林偉川 類別繼承使用 extends 關鍵字 修飾字 class 子類別 extends 父類別 1 { // 區塊內的程式敘述 類別以 final 宣告時, 不能做為父類別 extends 關鍵字之後只能接一個父類別 2 1 例子 : class A{ class B extends A { class C extends A { class D extends B { final

More information

Microsoft Word - ACL chapter02-5ed.docx

Microsoft Word - ACL chapter02-5ed.docx 第 2 章神奇的質數 2.1.1 什麼是質數 1 1 1 打下好基礎 - 程式設計必修的數學思維與邏輯訓練 1 1 0 10 2 3 5 7 4 6 8 9 10 4 10000 1229 1000 168 2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97 101 103 107 109 113 127 131

More information

JavaIO.PDF

JavaIO.PDF O u t p u t S t ream j a v a. i o. O u t p u t S t r e a m w r i t e () f l u s h () c l o s e () public abstract void write(int b) throws IOException public void write(byte[] data) throws IOException

More information