19.1 產品生命週期 在正式開發文字編輯器之前, 先來看看一個應用程式的產品生命週期 (Product Life Cycle, PLC) 的幾個階段, 在程式開發的過程中, 並不是每個階段都要求嚴謹的執行完畢, 哪個階段該採用? 哪個階段該偏重? 都是視應用程式的需求或規模不同而定, 這個小節則先

Size: px
Start display at page:

Download "19.1 產品生命週期 在正式開發文字編輯器之前, 先來看看一個應用程式的產品生命週期 (Product Life Cycle, PLC) 的幾個階段, 在程式開發的過程中, 並不是每個階段都要求嚴謹的執行完畢, 哪個階段該採用? 哪個階段該偏重? 都是視應用程式的需求或規模不同而定, 這個小節則先"

Transcription

1 專題製作 - 文字編輯器 19 在學習完一個程式語言的基本語法 API 的使用之後, 若要驗收學習的成果, 試著自己撰寫一個文字編輯器是個不錯的驗收方式, 在這個章節中將一步步告訴您, 如何組合前面 18 個章節中學習到的語法及 API 功能, 實作出一個具讀取 儲存功能的視窗文字編輯器 在這個章節中, 您也將學到基本的 Swing 視窗程式設計, 了解 Java 的視窗程式中容器 (Container) 元件(Component) 版面管理員 (Layout Manager) 事件(Event) 與傾聽者 (Listener) 的基本觀念

2 19.1 產品生命週期 在正式開發文字編輯器之前, 先來看看一個應用程式的產品生命週期 (Product Life Cycle, PLC) 的幾個階段, 在程式開發的過程中, 並不是每個階段都要求嚴謹的執行完畢, 哪個階段該採用? 哪個階段該偏重? 都是視應用程式的需求或規模不同而定, 這個小節則先對這幾個階段作概略性的認識, 並逐步勾勒出您所要開發的文字編輯器之輪廓 分析 (Analysis) 在程式開發的分析階段, 其目的在於分析應用程式的需求為何? 分析階段在釐清應用程式所想要解決的問題為何? 以即將要開發的文字編輯器為例, 您也許希望這個文字編輯器具有以下的功能 : 具備視窗介面您必須決定使用者將如何操作您的文字編輯器, 這要考量使用者在操作上的習慣, 或是領域 (Domain) 特有的操作需求, 操作介面設計良好與否, 對一個產品是否受歡迎有相當大的影響, 您可以觀察所要開發的程式是否有相類似的產品, 看看該產品是如何設計操作介面的, 對於簡單的文字編輯器之開發, 可以參考 Windows 的 記事本 程式在介面上是如何設計的 您可以在紙上或繪圖軟體上, 先設計出操作介面草稿, 在設計介面的同時, 也會大致勾勒出應用程式的部份功能, 對於您將開發的文字編輯器, 將具備以下的視窗介面 : 19-2

3 專題製作 - 文字編輯器 19 圖 19.1 即將設計的文字編輯器主畫面 應用程式介面上包括選單列, 在選單列上按下各選單項目後, 所出現的選單畫面如下 : 圖 19.2 檔案選單畫面 19-3

4 圖 19.3 編輯選單畫面在檔案選單與編輯選單中還設計有快速鍵提示, 例如您可以按下 Ctrl 鍵加上 O 字鍵來執行開啟舊檔的功能, 而最後一個選單是 關於 選項, 按下該選項後將出現程式版權宣告及程式相關說明 : 圖 19.4 關於選單畫面 基於篇幅的限制, 這邊不列出所有的視窗畫面設計圖, 僅表示一下如何展現視窗介面的設計階段 19-4

5 專題製作 - 文字編輯器 19 檔案的開啟與儲存在按下選單中的 開啟舊檔 後, 會出現對話方塊以供您選取檔案, 選定檔案之後會開啟該檔案並顯示檔案內容於文字編輯區中, 並在標題列中顯示檔案名稱, 如果檔案內容已有更動, 又在此時執行 開啟檔案, 則提示使用者檔案已變動, 請使用者確認是否儲存變更 在按下 儲存檔案 時, 將文字編輯區中的文字儲存至標題列所指定的文件中, 如果是以新檔案編輯文字, 則出現提示儲存的對話方塊, 讓使用者指定檔案名稱並儲存 在按下 另存新檔 時, 將顯示儲存的對話方塊, 讓使用者指定檔案名稱並儲存 儲存完文字之後, 一律在 狀態列 顯示 未修改 字樣 離開應用程式在按下 離開 時, 若檔案已有更動, 則提示使用者檔案已變動, 請使用者確認是否儲存變更, 之後離開應用程式, 若檔案無變動, 則直接離開應用程式 編輯文字在選定文字後執行選單上的 剪下 指令, 可以複製選定的文字並消除編輯區上的文字 執行 複製 指令, 可以複製選定的文字 執行 貼上 指令, 可以將剪下或複製的文字貼至文字編輯區 在文字編輯器有任何的文字編輯動作, 將會在 狀態列 上顯示 已修改 的字樣 以上所列出的是簡單的需求分析草稿, 在實際的應用程式開發中, 需求分析階段會儘可能的詳細, 也會有制式的需求分析表格或需求規格書, 需求分析人員可以一一檢定客戶的需求, 詳盡的列出所有要求的功能, 要完全補獲需求並不是件容易甚至不可能的事, 需求可能會往返修改, 在進入設計階 19-5

6 段之前, 要求的是盡量收集所有的需求, 以降低在往後的階段中, 由於需求變動所帶來的成本負擔 設計 (Design) 在進入設計階段之後將根據先前收集而來的需求分析, 開始為應用程式規劃藍圖, 這個階段將根據需求將應用程式切割出許多模塊, 並設計出需求中所發掘出來的物件, 您要為這些物件設計出交互行為, 以完成應用程式所必須達成的功能, 在設計階段通常還不會考慮到該使用何種語言與技術 在這一個章節中所開發的文字編輯器是個簡單的應用程式, 因而會直接將設計與開發同時併行, 讓您可以從開發中體會設計的重要性 良葛格的話匣子設計與開發同時併行也在實際的產品開發中使用, 然而必須配合不斷的檢討與重構 (Refactor), 甚至配合測試來進行, 這樣的方式避免了設計階段的過度設計, 有許多程式開發人員也喜愛這種方式來開發程式 開發 (Development) 進入開發階段之後, 將決定使用何種語言及技術來開發應用程式, 在這個章節中, 您將使用 Java 程式語言, 並運用 J2SE 技術來開發文字編輯器, 文字編輯器的介面將使用 Swing 視窗元件來開發, 這也是這個章節所要著重的階段 測試 (Testing) 將完成的應用程式進行測試, 以驗收其是否完成所期許的需求, 並檢查程式中是否存在臭蟲 (Bug), 或是效能方面等的問題 測試在現今的軟體開發中是一個日易受到重視的問題, 各種的測試開發理論與實作文件不斷的被提出, 對於這個章節來說, 測試是個超出討論範圍 19-6

7 專題製作 - 文字編輯器 19 的課題, 有興趣的話, 附錄 B 中有關 JUnit 的內容可以讓您初窺一些測試方面的技術與觀念 完成 (Implementation) 在程式開發測試無誤之後, 接下來就是交付程式給客戶了, 或者就是產品上線, 對學生來說, 也就是交給教授打分數了, 無論如何, 對於應用程式的開發人員來說, 無疑是個最令人興奮的階段 維護 (Maintenance) 應用程式在交給客戶之後, 會因為程式臭蟲 需求改變 需求增加 效能 安全問題等, 而必須持續對程式進行維護 修正等工作, 一個應用程式在維護階段的所規劃的時間並不一定, 從一 兩年到幾十年都有可能, 看應用程式的使用期限, 或者是維護合約的簽定期限而定 19.7 結束生命週期 (End-of-life, EOL) 在產品不再符合使用的效益, 或是版本更迭而造成應用程式不再適合等問題, 應用程式都會有結束生命週期的時候, 應用程式結束生命週期表示, 即使可能仍有相當少數的人在使用該應用程式, 但不再有公司 開發人員對其作出維護的工作, 使用者使用結束生命週期的產品, 將必須自行承擔一切的後果 在整個應用程式生命週期中, 這個章節將著重在分析 設計與開發實作的階段上, 讓您知道如何使用 Java Swing 來完成視窗介面, 如何使用 Java 語言及 J2SE 提供的類別來完成文字編輯器 19-7

8 19.2 Swing 入門 若要使用 J2SE 來開發視窗應用程式, 可以有兩種選擇, 一個是使用 AWT (Abstract Window Toolkit), 另一個是使用 JFC(Java Foundation Classes) /Swing 您所要開發的文字編輯器將使用 Swing 技術,Swing 的使用可以很複雜, 是個可以用專書介紹的技術, 而這個小節的目的, 在讓您於開發文字編輯器的介面, 同時也可以掌握 Swing 設計的最基本要素, 也就是容器 (Container) 元件(Component) 版面管理員(Layout Manager) 事件 (Event) 與傾聽者 (Listener) 等基本觀念 Swing 簡介 每一個視窗上所出現的元件在在 J2SE 中, 都是 java.awt.component 或是 java.awt.menucomponent 的子類別,Component 是按鈕 (Button) 標籤 ( Label ) 文字編輯元件(TextComponent ) 等類別的父類別, 而 MenuComponent 則是選單列 (MenuBar) 選單項目(MenuItem) 等的父類別 Component 繼承體系 Component 繼承體系下最重要的一個子類別就是 java.awt.container 類別,Container 類別可以容納其它的 Component 在它之中, 當然也可以容納其它的 Container, 由此組合成更複雜的視窗畫面, 在 J2SE 中 Container 有兩個主要的子類別 :java.awt.window 與 java.awt.panel Window 類別的實例是一個可以獨立存在的視窗, 它包括了兩個重要的類別 :java.awt.dialog 與 java.awt.frame Dialog 可以在螢幕上顯示一個簡單的對話方塊, 沒有工具例, 也不能改變它的大小 Frame 則是個具有標題列 工具列且可以改變大小的視窗元件 Panel 類別的實例必須被容納於其它的 Container 之中, 或是內嵌於瀏覽器之中, 您可以在 Panel 中放入元件, 甚至其它的 Container, 藉由巢狀的組成方式來組合出複雜的視窗, 最後您可以將 Panel 設定至 Window 類別的實例之中來顯示視窗元件 19-8

9 專題製作 - 文字編輯器 19 以下簡單的列出 Component 的繼承體系 : java.awt.component java.awt.container java.awt.panel java.applet.applet java.awt.window java.awt.dialog java.awt.frame java.awt.button java.awt.checkbox java.awt.label java.awt.list java.awt.textcomponent java.awt.menucomponent java.awt.menubar java.awt.mennitem java.awt.menu Swing 繼承體系如果您夠細心, 或許您會發現到之前所介紹的類別都是位於 java.awt 套件之中,AWT(Abstract Window Toolkit) 提供基本的使用者圖型介面元件, 您可以僅基於 AWT 來建立視窗程式, 然而 AWT 所開發出來的視窗程式, 在不同的平台上會呈現不同的外觀 Swing 是以 AWT 為基礎所提出的元件, 使用它所開發出來的視窗元件, 在不同的平台上會有一致的觀感, 由於 Swing 是以 AWT 為基礎, 所以了解 AWT 元件的繼承體系是必要的, 以下則列出 Swing 元件的繼承體系 : java.awt.component java.awt.container javax.swing.jcomponent javax.swing.jpanel javax.swing.jtextcomponent java.awt.window javax.swing.jwindow java.awt.dialog 19-9

10 javax.swing.jdialog java.awt.frame javax.swing.jframe 從繼承體系中可以看出, 無論是 AWT 或是 Swing, 最頂層都是 Component 與 Container, 所以在 Java 中關於視窗元件的撰寫, 都與元件及容器的觀念息息相關, 容器是一種視窗元件, 可以包括其它的視窗元件與容器, 因而可以巢狀的組合下去, 而組成您所想要的視窗畫面 設計主視窗與選單列 Swing 的元件相當的豐富, 若要詳細說明, 實際上可以另外出版一本書來討論, 這個章節的目的不在於詳細介紹所有的 Swing 元件, 而是在藉由開發文字編輯器的過程中, 順便讓您了解 Swing 視窗程式的主要元素, 只要掌握了這些基本要素, 將來進一步詳細了解 Swing 時就能更加容易上手 主視窗您可以繼承 javax.swing.jframe 來撰寫一個可以呈現在螢幕上的視窗, 最基本的動作包括 : 設定視窗元件 設定事件處理 呈現畫面 直接使用範例 19.1 來示範如何呈現一個基本的 Swing 視窗 範例 19.1 JNotePadUI.java package onlyfun.caterpillar; import javax.swing.jframe; public class JNotePadUI extends JFrame { public JNotePadUI() { super(" 新增文字檔案 "); setupuicomponent(); setupeventlistener(); setvisible(true); 19-10

11 專題製作 - 文字編輯器 19 private void setupuicomponent() { setsize(640, 480); private void setupeventlistener() { setdefaultcloseoperation(jframe.exit_on_close); public static void main(string[] args) { new JNotePadUI(); 在範例 19.1 中, 將視窗元件的設置與事件的處理分別交由 setupuicomponent() 與 setupeventlistener() 兩個方法來處理, 這有助於將來程式碼內容增加時的管理 JFrame 擁有一個接受字串引數的建構方法, 被設置的字串將用作視窗的標題文字, 從 JFrame 繼承下來的 setsize() 方法用來設定視窗元件的大小, 程式中設定為 640x480 的像素 (Pixel) 大小 setdefaultcloseoperation() 用來設定視窗右上角的 X 按鈕被按下時所該採取的動作, 預設是 WindowConstants.HIDE_ONE_CLOSE, 也就是按下後隱藏視窗, 但並不會結束程式, 在這邊希望按下 X 按鈕後可以直接結束程式, 因而設定為 JFrame.EXIT_ON_CLOSE 在所有的元件與事件處理都設置完成之後, 可以使用從 JFrame 繼承下來的 setvisible(), 藉由設定其引數為 true 來呈現視窗, 程式的執行結果如下圖所示 : 19-11

12 圖 19.5 範例 19.1 的執行畫面 選單列在 Swing 中, 選單元件被抽象化為按鈕的一種, 與選單相關的三個元件為選單列 (Menu bar) 選單項目(Menu item) 與選單 (Menu), 先來看看它們的繼承架構 : java.awt.component java.awt.container javax.swing.jcomponent javax.swing.jmenubar javax.swing.abstractbutton javax.swing.jmenuitem javax.swing.jmenu JMenuBar 用來建立選單列,JMenu 要被加入選單列之中,JMenu 是 JMenuItem 的子類別,JMenu 當中可以再包括 JMenuItem, 即每一個選單中再包括選單項目 可以使用以下的程式片段來示範如何建立選單列 選單與選單項目 : // 選單列 JMenuBar menubar = new JMenuBar() // 選單 ; JMenu filemenu = new JMenu(" 檔案 "); // 選單項目 19-12

13 專題製作 - 文字編輯器 19 JMenuItem menuopen = new JMenuItem(" 開啟舊檔 "); // 在 JMenu 中加入 JMenuItem filemenu.add(menuopen) // 將 JMenu 加入 JMenuBar; menubar.add(filemenu); // 使用 JFrame 的 setmenubar 設置選單列 setmenubar(menubar); 在之前討論文字編輯器的需求分析時, 要求選單上必須有快速鍵的設置, 這可以藉由 JMenuItem 的 setaccelerator() 方法來設置, 例如要求按下 Ctrl 鍵與 O 字鍵時執行選單項目, 則可以如下撰寫 : menuopen.setaccelerator( KeyStroke.getKeyStroke(KeyEvent.VK_O, InputEvent.CTRL_MASK)); 常數 KeyEvent.VK_O 表示快速鍵之一為 O 字鍵, 而按下 Ctrl 鍵則是由 InputEvent.CTRL_MASK 常數所設置, 您可以查詢線上 API, 從 KeyEvent 與 InputEvent 類別中找到所有的常數所代表的意義 若要在選單項目與項目之間加入分隔線, 則可以使用 JMenu 的 addseparator() 方法, 例如 : filemenu.addseparator(); 結合以上的說明, 可以如範例 19.2 的程式為先前的範例 19.1 加入選單列 選單與選單項目 : 範例 19.2 JNotePadUI.java package onlyfun.caterpillar; import java.awt.event.inputevent; import java.awt.event.keyevent; import javax.swing.jframe; import javax.swing.jmenu; import javax.swing.jmenubar; import javax.swing.jmenuitem; import javax.swing.keystroke; 19-13

14 public class JNotePadUI extends JFrame { public JNotePadUI() { super(" 新增文字檔案 "); setupuicomponent(); setupeventlistener(); setvisible(true); private void setupuicomponent() { setsize(640, 480); // 選單列 JMenuBar menubar = new JMenuBar(); // 設置 檔案 選單 JMenu filemenu = new JMenu(" 檔案 "); JMenuItem menuopen = new JMenuItem(" 開啟舊檔 "); // 快速鍵設置 menuopen.setaccelerator( KeyStroke.getKeyStroke( KeyEvent.VK_O, InputEvent.CTRL_MASK)); JMenuItem menusave = new JMenuItem(" 儲存檔案 "); menusave.setaccelerator( KeyStroke.getKeyStroke( KeyEvent.VK_S, InputEvent.CTRL_MASK)); JMenuItem menusaveas = new JMenuItem(" 另存新檔 "); JMenuItem menuclose = new JMenuItem(" 關閉 "); menuclose.setaccelerator( KeyStroke.getKeyStroke( KeyEvent.VK_Q, InputEvent.CTRL_MASK)); filemenu.add(menuopen); 19-14

15 專題製作 - 文字編輯器 19 filemenu.addseparator(); // 分隔線 filemenu.add(menusave); filemenu.add(menusaveas); filemenu.addseparator(); // 分隔線 filemenu.add(menuclose); // 設置 編輯 選單 JMenu editmenu = new JMenu(" 編輯 "); JMenuItem menucut = new JMenuItem(" 剪下 "); menucut.setaccelerator( KeyStroke.getKeyStroke(KeyEvent.VK_X, InputEvent.CTRL_MASK)); JMenuItem menucopy = new JMenuItem(" 複製 "); menucopy.setaccelerator( KeyStroke.getKeyStroke(KeyEvent.VK_C, InputEvent.CTRL_MASK)); JMenuItem menupaste = new JMenuItem(" 貼上 "); menupaste.setaccelerator( KeyStroke.getKeyStroke(KeyEvent.VK_V, InputEvent.CTRL_MASK)); editmenu.add(menucut); editmenu.add(menucopy); editmenu.add(menupaste); // 設置 關於 選單 JMenu aboutmenu = new JMenu(" 關於 "); JMenuItem menuabout = new JMenuItem(" 關於 JNotePad"); aboutmenu.add(menuabout); menubar.add(filemenu); menubar.add(editmenu); menubar.add(aboutmenu); // 設置選單列 setjmenubar(menubar); 19-15

16 private void setupeventlistener() { setdefaultcloseoperation(jframe.exit_on_close); public static void main(string[] args) { new JNotePadUI(); 程式的執行畫面如下所示 : 圖 19.6 範例 19.2 執行畫面 目前還沒有為每一個選單設置事件處理, 所以您按下每一個選項時都不會有任何的反應 版面管理 在 Container 中的元件的位置跟大小是由版面管理員 (Layout manager) 來決定, 當 Container 需要決定它當中的元件的大小或位置時, 就會呼叫版面管理員來為其執行 19-16

17 專題製作 - 文字編輯器 19 JTextArea 與 JScorllPane 文字編輯器的基本需求, 就是有一個文字編輯區域, 這個文字編輯區域可以使用 javax.swing.jtextarea 類別, 然而 JTextArea 並不具備捲軸, 文字內容多時沒有捲軸對於編輯或瀏覽都不方便, 您可以在 JTextArea 上加上一個 javax.swing.jscrollpane,jscrollpane 會檢驗 JTextArea 的文字內容, 在必要的時候顯示捲軸, 或者是在操作捲軸時, 也會對 JTextArea 進行相對應的位置顯示, 以下是結合 JTextArea JScrollPane 以建立文字編輯區域的程式碼片段 : JTextArea textarea = new JTextArea(); textarea.setfont(new Font(" 細明體 ", Font.PLAIN, 16)); textarea.setlinewrap(true); JScrollPane panel = new JScrollPane(textArea, ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED, ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER); 您可以使用 JTextArea 的 setfont() 方法並指定 java.awt.font 的實例, 以設定文字顯示時的字型, 以上面的程式碼為例, 就是指定細明體 一般 16 點數的字型 setlinewrap() 方法設定為 true 時, 表示在段落文字超出文字區域寬度時, 會自動換行顯示 JScrollPane 在建立時指定三個引數, 一個是所將容納的 JTextArea 實例, 另兩個是顯示垂直捲軸及水平捲軸的時機, 在這邊垂直捲軸設定為 AS_NEEDED, 表示在必要的時候會自動顯示捲軸, 水平捲軸設定為 NEVER, 表示永不顯示捲軸 ( 因為已設定了自動換行, 所以也就不需要水平捲軸了 ) JScrollPane 所採取的版面管理策略預設是 ScrollPaneLayout, 預設的行為是將 JTextArea 填滿整個 JScrollPane, 所以即使您沒有指定 JTextArea 的大小及位置, 在待會的執行畫面中, 您也將看到文字區域佔滿了視窗的中央 ContentPane 設置好 JScrollPane 之後, 接下來要將它加入 JFrame 之中, 在此之前您要了解到,Swing 視窗包括了幾個層次 :RootPane LayoutPane ContentPane 19-17

18 和 MenuBar GlassPane 由前而後每一個層次都包括管理了下一個層次, 在最深層的是 RootPane, 最上層的是 GlassPane 對於初學 Swing 來說, 最常接觸的是 ContentPane 與 MenuBar, 它們位於同一個層次, 在這個層次中如果具有 MenuBar, 也就是若包括選單列的話, 則 ContentPane 的大小為 LayoutPane 的大小減去選單列的大小, 否則由 ContentPane 佔有全部的大小, 基本上, 視窗元件是加入至 ContentPane 中, 在 JFrame 中要取得 ContentPane, 可以使用繼承下來的 getcontentpane() 方法, 例如 : Container contentpane = getcontentpane(); contentpane.add(panel, BorderLayout.CENTER); 如上所示的, 在取得 ContentPane 之後, 您可以使用 add() 方法將元件加入其中,ContentPane 預設上使用 BorderLayout, 會將可容納元件的區域分作為東 西 南 北 中央五個區域, 如下所示 : 圖 19.7 BorderLayout 版面配置在繪製元件位置時,BorderLayout 會先由北至南繪製, 接著由西至東繪製, 在不干擾到其它位置的情況儘可能填滿位置, 所以在上面的程式碼片段中, 由於只有一個 panel 物件被加入至 ContentPane, 所以 panel 將佔滿中央位置 19-18

19 專題製作 - 文字編輯器 19 JLabel 接著製作狀態列, 狀態列只是簡單的顯示 未修改 已修改 文字, 以表示目前編輯中的檔案內容是否已經變數, 顯示文字的工作可以由 javax.swing.jlabel, 可以使用以下的程式碼片段來製作並加入至 ContentPane 中 : // 狀態列 JLabel statebar = new JLabel(" 未修改 "); statebar.sethorizontalalignment(swingconstants.left); statebar.setborder( BorderFactory.createEtchedBorder()); contentpane.add(statebar, BorderLayout.SOUTH); 在 JLabel 中的文字可以置左 置中或置右, 這可以由 sethorizontalalignment() 方法來決定, 使用 SwingContants.LEFT 表示文字將靠左顯示 您可以使用 setborder() 來設置 JLabel 的邊界外觀, 在這邊使用 BorderFactory 建立一個有蝕刻外觀的邊界 最後, 程式將 JLabel 的實例加入至 ContentPane, 並設置在 BorderLayout 的南方 範例 19.3 為加入了文字編輯區域 捲軸及狀態列後的程式碼, 為了節省篇幅, 僅列出部份的程式碼 ( 主要是新增的程式碼部份 ): 範例 19.3 JNotePadUI.java package onlyfun.caterpillar; import java.awt.borderlayout; import java.awt.container; import java.awt.font; import java.awt.event.inputevent; import java.awt.event.keyevent; import javax.swing.borderfactory; import javax.swing.jframe; import javax.swing.jlabel; import javax.swing.jmenu; import javax.swing.jmenubar; import javax.swing.jmenuitem; import javax.swing.jscrollpane; 19-19

20 import javax.swing.jtextarea; import javax.swing.keystroke; import javax.swing.scrollpaneconstants; import javax.swing.swingconstants; public class JNotePadUI extends JFrame { public JNotePadUI() { super(" 新增文字檔案 "); setupuicomponent(); setupeventlistener(); setvisible(true); private void setupuicomponent() { 同範例 19.2 中 setjmenubar(menubar) 前的程式碼, 故略... // 文字編輯區域 JTextArea textarea = new JTextArea(); textarea.setfont(new Font(" 細明體 ", Font.PLAIN, 16)); textarea.setlinewrap(true); JScrollPane panel = new JScrollPane(textArea, ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED, ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER); Container contentpane = getcontentpane(); contentpane.add(panel, BorderLayout.CENTER); // 狀態列 JLabel statebar = new JLabel(" 未修改 "); statebar.sethorizontalalignment(swingconstants.left); statebar.setborder( BorderFactory.createEtchedBorder()); contentpane.add(statebar, BorderLayout.SOUTH); 餘同範例 19.2 的程式碼, 故略

21 專題製作 - 文字編輯器 19 下圖為範例 19.3 撰寫 編譯 執行時, 於當中編輯部份文字後所顯示的結果畫面 : 圖 19.8 範例 19.3 的執行畫面到目前為止, 您已經完成了介面設計的大部份需求, 接下來要實際完成操作上的對應功能, 這就涉及到視窗程式的另一個重要的觀念 : 事件處理 (Event Handling) 這是下一個小節所即將要說明的重點 19.3 事件處理 當使用者在圖形介面上進行一些操作時, 例如移動滑鼠 選取選單項目等, 將會引發相關事件 (Event) 的發生, 在 Java 中事件以具體的物件來表示, 使用者的相關動作會由 JVM 建立相對應的事件, 用以描述事件來源 發生了什麼事 以及相關的訊息, 您要藉由捕捉對應的事件, 以進行對應的操作來完成應用程式的功能 Java 事件模型 Java 對事件的處理採委託事件模型 (Delegation event model), 在這個模型之下, 事件被送至對應的元件, 而元件會將事件傳播至每一個事件傾聽 19-21

22 者 (Event listener), 事件傾聽者中定義了與不同事件相對應的事件處理者 (Event handler), 只有向元件註冊的事件傾聽者才會收到事件, 藉由這種模型, 事件發生時是委託事件處理者進行處理, 事件處理者與元件的設計可以分別獨立 具體來說, 事件傾聽者都實作了 java.util.eventlistener 介面, 不過這個介面只是個標示介面 (Marker interface), 當中並沒有規定必須實作的方法, 對於 J2SE 視窗程式而言, 相對應的事件傾聽者主要位於 java.awt.event 與 javax.swing.event 套件之下, 它們都是 EventListener 的子介面 文字編輯器的事件處理 以選單項目被按下時的事件處理來說, 您要實作 java.awt.event.actionlistener 介面, 例如 : // 開啟舊檔選單項目的事件處理 menuopen.addactionlistener( new ActionListener() { public void actionperformed(actionevent e) { openfile(); ); 這邊採取的是匿名類別的方式實作了 ActionListener 介面, 這個介面定義了 actionperformed() 方法, 這個方法就是事件處理者, 您要在當中實作選單項目被按下時所要進行的處理, 當選單項目被按下時會發出 ActionEvent, 這個事件會傳遞給曾向選單項目元件註冊的事件傾聽者, 並呼叫對應的事件處理者, 向選單項目元件註冊事件傾聽者的方式是使用 addactionlistener() 方法 以上示範的是 JMenuItem 的事件處理, 至於 JTextArea 的事件方面, 由於需求中主要是針對編輯文字時的事件作處理, 編輯文字主要是鍵盤操作, 因而會發生 KeyEvent 事件, 您可以實作 java.awt.event.keylistener 介面來設置相關的事件處理, 這個介面中有三個方法 ( 事件處理者 ) 必須實作 : 19-22

23 專題製作 - 文字編輯器 19 package java.awt.event; public interface KeyListener { public void keypressed(keyevent e) public void keyreleased(keyevent e) public void keytyped(keyevent e) 對您的文字編輯器而言, 您所感興趣的主要是鍵盤被按下進行文字編輯時的事件處理, 所以您可以僅實作 keytyped() 方法, 另兩個方法您可以在實作時保持空白即可, 您也可以繼承 java.awt.event.keyadapter,keyadapter 類別實作 KeyListener 介面, 而對三個方法實作時僅保持空白, 藉由繼承 KeyAdapter, 您可以僅重新定義 keytyped() 方法, 而不用對另兩個方法也進行實作, 撰寫時較為方便且程式碼看來也會比較簡潔, 您可以使用 JTextArea 的 addkeylistener() 方法加入事件傾聽者, 例如 : // 編輯區鍵盤事件 textarea.addkeylistener( new KeyAdapter() { public void keytyped(keyevent e) { processtextarea(); ); 文字編輯區也會有滑鼠事件, 也就是使用滑鼠按右鍵顯示快顯功能表, 以執行剪下 複製 貼上的動作來進行文字編輯, 滑鼠事件傾聽者是實作 java.awt.event.mouselistener 介面, 當中有五個方法必須實作, 如果您覺得麻煩, 則可以繼承 java.awt.event.mouseadapter, 它實作了 MouseListener 介面, 但實作方法時保持空白, 您也可以在繼承 MouseAdapter 後, 對感興趣的事件處理者進行實作即可, 例如 : // 編輯區滑鼠事件 textarea.addmouselistener( new MouseAdapter() { public void mousereleased(mouseevent e) { if(e.getbutton() == MouseEvent.BUTTON3) popupmenu.show(editmenu, e.getx(), e.gety()); 19-23

24 public void mouseclicked(mouseevent e) { if(e.getbutton() == MouseEvent.BUTTON1) popupmenu.setvisible(false); ); 滑鼠處理者接受的是 MouseEvent, 您可以使用 getbutton() 方法取得一個常數, 表示按下的是哪一個滑鼠鍵,MouseEvent.Button1 是指按下滑鼠左鍵,MouseEvent.Button3 則表示滑鼠右鍵, 您使用 JTextArea 的 addmouselistener() 方法加入傾聽者, 程式片段中的 popupmenu 參考至 javax.swing.jpopupmenu 的實例, 這個實例可用編輯選單直接取得, 例如 : JPopupMenu popupmenu = editmenu.getpopupmenu(); 還有一個事件是您要處理的, 就是按下視窗右上角的 X 按鈕時, 希望動作與按下選單中 關閉 具有相同的行為, 所以您刪去原來程式中的這行 : setdefaultcloseoperation(jframe.exit_on_close); 並且改為自行實作 java.awt.event.windowlistener, 這個介面中有 7 個方法必須實作, 如果覺得麻煩, 您可以繼承 java.awt.event.windowadapter, 它實作了 WindowListener, 但在 7 個方法的實作本體上保持空白, 您可以在繼承 WindowAdapter 類別之後, 對感興趣的方法進行實作即可, 例如 : // 按下視窗關閉鈕事件處理 addwindowlistener( new WindowAdapter() { public void windowclosing(windowevent e) { closefile(); ); 您要向 JFrame 註冊 WindowListener, 這可以使用 addwindowlistener() 方法,windowClosing() 方法會在按下 X 按鈕後, 視窗真正關閉前執行 19-24

25 專題製作 - 文字編輯器 19 接下來將所有以上的說明實際套用至文字編輯器的實作中, 先來看一下範例 19.4, 為了節省篇幅, 當中省略了一些前一個小節中已說明講解的, 完整的程式碼可以查看光碟中的範例檔 : 範例 19.4 JNotePadUI.java package onlyfun.caterpillar; 略... public class JNotePadUI extends JFrame { private JMenuItem menuopen; private JMenuItem menusave; private JMenuItem menusaveas; private JMenuItem menuclose; private JMenu editmenu; private JMenuItem menucut; private JMenuItem menucopy; private JMenuItem menupaste; private JMenuItem menuabout; private JTextArea textarea; private JPopupMenu popupmenu; public JNotePadUI() { 略... private void setupuicomponent() { 略... popupmenu = editmenu.getpopupmenu(); 19-25

26 private void setupeventlistener() { // 按下視窗關閉鈕事件處理 addwindowlistener( new WindowAdapter() { public void windowclosing(windowevent e) { closefile(); ); // 選單 - 開啟舊檔 menuopen.addactionlistener( new ActionListener() { public void actionperformed(actionevent e) { openfile(); ); // 選單 - 儲存檔案 menusave.addactionlistener( new ActionListener() { public void actionperformed(actionevent e) { savefile(); ); // 選單 - 另存新檔 menusaveas.addactionlistener( new ActionListener() { public void actionperformed(actionevent e) { savefileas(); ); 19-26

27 專題製作 - 文字編輯器 19 // 選單 - 關閉檔案 menuclose.addactionlistener( new ActionListener() { public void actionperformed(actionevent e) { closefile(); ); // 選單 - 剪下 menucut.addactionlistener( new ActionListener() { public void actionperformed(actionevent e) { cut(); ); // 選單 - 複製 menucopy.addactionlistener( new ActionListener() { public void actionperformed(actionevent e) { copy(); ); // 選單 - 貼上 menupaste.addactionlistener( new ActionListener() { public void actionperformed(actionevent e) { paste(); ); 19-27

28 // 選單 - 關於 menuabout.addactionlistener( new ActionListener() { public void actionperformed(actionevent e) { // 顯示對話方塊 JOptionPane.showOptionDialog(null, " 程式名稱 :\n JNotePad \n" + " 程式設計 :\n 良葛格 \n" + " 簡介 :\n 一個簡單的文字編輯器 \n" + " 可作為驗收 Java 的實作對象 \n" + " 歡迎網友下載研究交流 \n\n" + " " 關於 JNotePad", JOptionPane.DEFAULT_OPTION, JOptionPane.INFORMATION_MESSAGE, null, null, null); ); // 編輯區鍵盤事件 textarea.addkeylistener( new KeyAdapter() { public void keytyped(keyevent e) { processtextarea(); ); // 編輯區滑鼠事件 textarea.addmouselistener( new MouseAdapter() { public void mousereleased(mouseevent e) { if(e.getbutton() == MouseEvent.BUTTON3) popupmenu.show(editmenu, e.getx(), e.gety()); 19-28

29 專題製作 - 文字編輯器 19 ); public void mouseclicked(mouseevent e) { if(e.getbutton() == MouseEvent.BUTTON1) popupmenu.setvisible(false); private void openfile() { private void savefile() { private void savefileas() { private void closefile() { private void cut() { private void copy() { private void paste() { private void processtextarea() { public static void main(string[] args) { new JNotePadUI(); 注意到一些視窗元件為了可以於 setupeventlistener() 方法中使用, 已經將之宣告為類別成員的一部份 ( 記得嗎? 只有在必要時才擴大可視範圍!), 目前事件發生後事件處理者呼叫的方法都是空的, 在下一個小節中會完成這些方法中的邏輯, 在 menuabout 的事件處理上, 主要是顯示一個對話方塊, 直接來看看程式執行時按下 關於 選單項目時的執行畫面 : 19-29

30 圖 19.9 範例 19.4 的執行畫面有關事件處理的方面已經安排完畢, 使用者圖形介面的部份到目前算是大部份完成, 剩下的就是實際完成檔案編輯 儲存等的處理, 這大部份是檔案輸入輸出方面的邏輯組合, 將在下一個小節中進行說明 19.4 文字編輯與儲存 在完成文字編輯器的大部份圖形介面之後, 接下來要為文字編輯器的每一個事件, 完成對應的事件處理, 也就是完成先前的 openfile() savefile() savefileas() 等方法的本體 (Body) 內容 開啟檔案的流程處理 首先定義出當使用者選取選單上的 開啟舊檔 時, 所需的處理流程 : 先檢查目前編輯中的文件是否已儲存, 若是, 則希望出現對話方塊供使用者選取所需的檔案 開啟它然後顯示在文字編輯區 ; 若否, 則出現對話方塊顯示 " 檔案已修改, 是否儲存?" 的訊息, 若選擇 是 則儲存檔案, 若選擇 否 則放棄目前檔案直接開啟舊檔 19-30

31 專題製作 - 文字編輯器 19 上面的流程中, 可以分出幾個子流程, 例如檢查檔案是否儲存 開啟文件 儲存檔案, 這幾個子流程可以先定義為方法, 待會再來實作, 因此可以先實作出以下的程式內容 : private void openfile() { if(iscurrentfilesaved()) { // 文件是否為儲存狀態 open(); // 開啟舊檔 else { // 顯示對話方塊 int option = JOptionPane.showConfirmDialog( null, " 檔案已修改, 是否儲存?", " 儲存檔案?", JOptionPane.YES_NO_OPTION, JOptionPane.WARNING_MESSAGE, null); switch(option) { // 確認檔案儲存 case JOptionPane.YES_OPTION: savefile(); // 儲存檔案 break; // 放棄檔案儲存 case JOptionPane.NO_OPTION: open(); break; private void open() { private boolean iscurrentfilesaved() { return false; JOptionPane.showConfirmDialog() 可以出現一個訊息對話方塊, 設定 JOptionPane.YES_NO_OPTION 會出現 是 否 的按鈕, 而設定 JOptionPane.WARNING_MESSAGE 會出現一個警告圖示, 在確認是否之 19-31

32 後, 會得到一個 int 常數, 與 JOptionPane.YES_OPTION 或 JOptionPane.YES_OPTION 比對, 即可得知使用者按下了哪一個按鈕 圖 顯示是否的對話方塊在判斷檔案是否儲存的方法上, 主要是根據狀態列來進行判斷, 實作出內容如下 : private boolean iscurrentfilesaved() { if(statebar.gettext().equals(" 未修改 ")) { return false; else { return true; 至於開啟檔案時則是使用 javax.swing.jfilechooser 來顯示檔案選取的對話方塊, 這部份的流程說明, 在以下的程式碼片段中直接以註解來表示 : private void open() { // filechooser 是 JFileChooser 的實例 // 顯示檔案選取的對話方塊 int option = filechooser.showdialog(null, null); // 使用者按下確認鍵 if(option == JFileChooser.APPROVE_OPTION) { try { // 開啟選取的檔案 BufferedReader buf = new BufferedReader( new FileReader( filechooser.getselectedfile())); 19-32

33 專題製作 - 文字編輯器 19 // 設定文件標題 settitle(filechooser.getselectedfile().tostring()); // 清除前一次文件 textarea.settext(""); // 設定狀態列 statebar.settext(" 未修改 "); // 取得系統相依的換行字元 String lineseparator = System.getProperty("line.separator"); // 讀取檔案並附加至文字編輯區 String text; while((text = buf.readline())!= null) { textarea.append(text); textarea.append(lineseparator); buf.close(); catch(ioexception e) { JOptionPane.showMessageDialog(null, e.tostring(), " 開啟檔案失敗 ", JOptionPane.ERROR_MESSAGE); 下圖是執行時的檔案對話方塊畫面 : 圖 顯示選取檔案的對話方塊 19-33

34 儲存檔案的流程處理 在選單上有 儲存檔案 及 另存新檔 兩個選項, 但事實上另存新檔只是多了個顯示檔案選擇對話方塊的動作, 在設定好檔案之後, 所使用的仍是儲存檔案的流程 先從 另存新檔 開始, 在執行另存新檔時, 顯示檔案選擇對話方塊, 讓使用者輸入檔案名稱, 在確認後將文字編輯區的內容儲存至指定的檔案中 而在按下 儲存檔案 時, 如果標題列上有指定檔案的路徑, 則直接依該路徑儲存檔案, 否則執行另存新檔的流程 程式實作的片段如下所示 : private void savefile() { // 從標題列取得檔案名稱 File file = new File(getTitle()); // 若指定的檔案不存在 if(!file.exists()) { // 執行另存新檔 savefileas(); else { try { // 開啟指定的檔案 BufferedWriter buf = new BufferedWriter( new FileWriter(file)); // 將文字編輯區的文字寫入檔案 buf.write(textarea.gettext()); buf.close(); // 設定狀態列為未修改 statebar.settext(" 未修改 "); catch(ioexception e) { JOptionPane.showMessageDialog(null, e.tostring(), " 寫入檔案失敗 ", JOptionPane.ERROR_MESSAGE); 19-34

35 專題製作 - 文字編輯器 19 private void savefileas() { // 顯示檔案對話方塊 int option = filechooser.showdialog(null, null); // 如果確認選取檔案 if(option == JFileChooser.APPROVE_OPTION) { // 取得選擇的檔案 File file = filechooser.getselectedfile(); // 在標題列上設定檔案名稱 settitle(file.tostring()); try { // 建立檔案 file.createnewfile(); // 進行檔案儲存 savefile(); catch(ioexception e) { JOptionPane.showMessageDialog(null, e.tostring(), " 無法建立新檔 ", JOptionPane.ERROR_MESSAGE); 關閉檔案的流程處理 關閉檔案之前, 主要必須檢查文字編輯區的內容變動是否已儲存, 如果沒有儲存的話, 則出現對話方塊提示使用者確認是否儲存, 若確認儲存則進行儲存檔案或另存新檔的動作, 否則直接關閉檔案 程式的實作如下所示 : private void closefile() { // 是否已儲存文件 19-35

36 if(iscurrentfilesaved()) { // 釋放視窗資源, 而後關閉程式 dispose(); else { int option = JOptionPane.showConfirmDialog( null, " 檔案已修改, 是否儲存?", " 儲存檔案?", JOptionPane.YES_NO_OPTION, JOptionPane.WARNING_MESSAGE, null); switch(option) { case JOptionPane.YES_OPTION: savefile(); break; case JOptionPane.NO_OPTION: dispose(); 文字區的編輯 剪下 複製 貼上 在文字編輯區進行剪下 複製 貼上的動作, 可以直接呼叫 JTextArea 的 cut() copy() 與 paste() 方法, 另外還特別處理了快顯功能表以及狀態列的問題, 這部份的程式很簡單, 直接以程式碼片段來表示 : private void cut() { textarea.cut(); statebar.settext(" 已修改 "); popupmenu.setvisible(false); private void copy() { textarea.copy(); popupmenu.setvisible(false); 19-36

37 專題製作 - 文字編輯器 19 private void paste() { textarea.paste(); statebar.settext(" 已修改 "); popupmenu.setvisible(false); private void processtextarea() { statebar.settext(" 已修改 "); 到這邊為止, 您的文字編輯器大致上都已經完成, 下圖先列出一個執行時的參考畫面 : 圖 完成的程式參考畫面由於先前已經顯示出相關的程式碼片段, 這邊就不再貼出完整的範例檔, 您可以直接在光碟中找到完整的程式碼 (JNotePad.java), 另一方面, 這個程式還可以加上更多的功能, 在光碟中也有實作出有工具列 有圖示 具列印功能的文字編輯器, 有興趣的話可以自行參考 19-37

38 19.5 接下來的主題 終於到達最後一個章節了, 那還會有所謂 接下來的主題 嗎? 喔! 當然有的, 這本書中的一些主題都可以獨立為一本書來討論, 您也可以開始考慮找一個方向來繼續研究 Java 如果您想要學習資料庫, 可以看看 JDBC; 如果您想要學習網路連結, 可以看看 Networking; 如果您想要撰寫視窗程式, 可以研究 Swing( 這個章節關於 Swing 的部份畢竟只是個快速的介紹 ); 如果您想要撰寫伺服端程式, 可以試試 JSP/Servlet 等等, 怕迷路的話, 別忘了還有 Java 技術概念地圖 (Java Technology Concept Map): 另一方面畢竟書籍的篇幅有限, 可在書中列出的內容經過挑選過的, 如果想獲得更多的資訊, 建議您有時間的話, 將本書每一章後的網路資源索引中列出的文件看一看, 瞭解我是如何從這些文件中擷取資訊的, 從那些文件出發, 您還可以找到更多的資源, 只要您能善用這些資源, 相信您對 Java 這個領域就會有深入的瞭解 19-38

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

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

Microsoft PowerPoint - 18_Event.pptx

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

More information

視窗程式設計

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

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

投影片 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

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

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

輕鬆學 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

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

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

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

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

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

運算子多載 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

投影片 1

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

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

18_GUI

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

More information

untitled

untitled OGRE http://antsam.blogone.net AntsamCGD@hotmail.com OGRE OGRE listener listener target listener target Dispatcher Processor Input Reader Event class view Event Class view Input Event ctrlaltshift ascoll

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

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

雲端 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

[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

java2d-4.PDF

java2d-4.PDF 75 7 6 G r a d i e n t P a i n t B a s i c S t r o k e s e t P a i n t ( ) s e t S t o r k e ( ) import java.awt.*; import java.awt.geom.*; public class PaintingAndStroking extends ApplicationFrame { public

More information

(TestFailure) JUnit Framework AssertionFailedError JUnit Composite TestSuite Test TestSuite run() run() JUnit

(TestFailure) JUnit Framework AssertionFailedError JUnit Composite TestSuite Test TestSuite run() run() JUnit Tomcat Web JUnit Cactus JUnit Java Cactus JUnit 26.1 JUnit Java JUnit JUnit Java JSP Servlet JUnit Java Erich Gamma Kent Beck xunit JUnit boolean JUnit Java JUnit Java JUnit Java 26.1.1 JUnit JUnit How

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

AutoCAD 用戶如何使用 ArchiCAD

AutoCAD 用戶如何使用 ArchiCAD AutoCAD 用戶如何使用 ArchiCAD AutoCAD用戶如何使用ArchiCAD ( 中文版 ) 由 Scott MacKenzie, Simon Gilbert, Geoffrey Moore Langdon, David Byrnes, Ralph Grabowski 編寫 龍庭資訊有限公司 1/73 - 2. 3. 4. -

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

contents 1 4 Chapter 2 Chapter 5 Chapter 管理自動儲存的版本 以文件復原窗格復原檔案 自訂快速工具 自訂快速存取工具列 自訂功能區

contents 1 4 Chapter 2 Chapter 5 Chapter 管理自動儲存的版本 以文件復原窗格復原檔案 自訂快速工具 自訂快速存取工具列 自訂功能區 與 Windows 8 完美結合的 Word 2013 1-1 瀏覽 Word 2013 使用介面...1-2 1-2 操作環境選項與帳戶設定...1-14 contents 1 Chapter 1-3 不可不會的線上求助...1-20 1-4 下載與安裝 Office 2013 評估版...1-24 ( 參考範例光碟的 PDF) 文件內容的基本操作 2-1 文字內容的產生...2-2 2-1-1

More information

第1章

第1章 第 17 章 有來有往 互動式視窗程式 1 本章提要 17.1 前言 17.2 元件 Event 觸發 17.3 Event 監聽者 Listener 17.4 Event 接收者 Adapter 17.5 Event 類別及提供的函式 17.5.1 MouseEvent 17.5.2 KeyEvent 17.5.3 TextEvent 17.5.4 WindowEvent 17.5.5 其他 Event

More information

Microsoft Word - Broker.doc

Microsoft Word - Broker.doc Broker 模式 采用 broker 模式对分布式计算进行简单模拟 系统在一个进程内模拟分布式环境, 因此不涉及网络编程和进程间通信,Broker 通过本地函数调用的方式实现 request 和 response 的转发 采用 broker 模式对分布式计算进行简单的模拟, 要求如下 : 设计四个 server, 一个 server 接收两个整数, 求和并返回结果, 一个 server 接收两个整数,

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 - 投影片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 Word - 01.DOC

Microsoft Word - 01.DOC 第 1 章 JavaScript 简 介 JavaScript 是 NetScape 公 司 为 Navigator 浏 览 器 开 发 的, 是 写 在 HTML 文 件 中 的 一 种 脚 本 语 言, 能 实 现 网 页 内 容 的 交 互 显 示 当 用 户 在 客 户 端 显 示 该 网 页 时, 浏 览 器 就 会 执 行 JavaScript 程 序, 用 户 通 过 交 互 式 的

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

使 用 Java 语 言 模 拟 保 险 箱 容 量 门 板 厚 度 箱 体 厚 度 属 性 锁 具 类 型 开 保 险 箱 关 保 险 箱 动 作 存 取 款

使 用 Java 语 言 模 拟 保 险 箱 容 量 门 板 厚 度 箱 体 厚 度 属 性 锁 具 类 型 开 保 险 箱 关 保 险 箱 动 作 存 取 款 JAVA 程 序 设 计 ( 肆 ) 徐 东 / 数 学 系 使 用 Java 语 言 模 拟 保 险 箱 容 量 门 板 厚 度 箱 体 厚 度 属 性 锁 具 类 型 开 保 险 箱 关 保 险 箱 动 作 存 取 款 使 用 Java class 代 表 保 险 箱 public class SaveBox 类 名 类 类 体 实 现 封 装 性 使 用 class SaveBox 代 表 保

More information

財金資訊-82期.indd

財金資訊-82期.indd / ( ) ( ) (waterfall model) (spiral model) 1 (output) (input) 1 www.fisc.com.tw 27 Barry Boehm 1988 2 (prototype) (agile) 2 ( ) 3 3 ( ) 28 / No.82 / 2015.04 (software testing) (peer review) ( ) V ( 4 )

More information

利用Java技术编写桌面软件基础

利用Java技术编写桌面软件基础 利 用 Java 技 术 编 写 桌 面 软 件 基 础 在 学 习 Java 编 程 语 言 的 细 节 和 语 法 时, 我 们 会 碰 到 这 样 一 个 问 题 : 开 发 桌 面 应 用 软 件 需 要 使 用 哪 些 Java 技 术, 应 当 引 入 哪 些 package? 这 一 问 题 的 答 案 取 决 于 开 发 的 应 用 软 件 类 型 和 它 的 作 用 这 篇 文 章

More information

chp6.ppt

chp6.ppt Java 软 件 设 计 基 础 6. 异 常 处 理 编 程 时 会 遇 到 如 下 三 种 错 误 : 语 法 错 误 (syntax error) 没 有 遵 循 语 言 的 规 则, 出 现 语 法 格 式 上 的 错 误, 可 被 编 译 器 发 现 并 易 于 纠 正 ; 逻 辑 错 误 (logic error) 即 我 们 常 说 的 bug, 意 指 编 写 的 代 码 在 执 行

More information

1.JasperReport ireport JasperReport ireport JDK JDK JDK JDK ant ant...6

1.JasperReport ireport JasperReport ireport JDK JDK JDK JDK ant ant...6 www.brainysoft.net 1.JasperReport ireport...4 1.1 JasperReport...4 1.2 ireport...4 2....4 2.1 JDK...4 2.1.1 JDK...4 2.1.2 JDK...5 2.1.3 JDK...5 2.2 ant...6 2.2.1 ant...6 2.2.2 ant...6 2.3 JasperReport...7

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

Microsoft Word - 投影片ch18

Microsoft Word - 投影片ch18 Java2 JDK5.0 教學手冊第三版洪維恩編著博碩文化出版書號 pg20210 第十八章事件處理 本章學習目標認識 Java 的委派事件模式認識並學習使用各種事件處理類別學習各種物件的事件處理 事件處理 18-2 18.1 委派事件模式 Java 的事件處理是採取 委派事件模式 (delegation event model) 委派事件模式是指當事件發生時, 產生事件的物件會把此一 訊息 轉給

More information

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

More information

使用手冊

使用手冊 使用手冊 版權所有 2013 年 Microtek International, Inc. 保留所有權利 商標 Microtek MII MiiNDT ScanWizard Microtek International, Inc. Windows Microsoft Corporation 重要須知 Microtek Microtek Windows Microsoft Windows I49-004528

More information

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

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

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 PowerPoint - VB14.ppt

Microsoft PowerPoint - VB14.ppt VB 列表盒 LISTBOX 應用 資科系 林偉川 執行畫面 1 2 1 重要屬性 LISTBOX 物件 (VB6) 新增至 LISTBOX 物件中 ADDITEM 自 LISTBOX 物件中刪除選取物件 REMOVEITEM 自 LISTBOX 物件中取出選取物件 ListIndex 顯示 LISTBOX 物件中紀錄個數 Listcount 3 LISTBOX 物件 (VB.NET) 重要屬性 新增至

More information

Microsoft PowerPoint - ch02

Microsoft PowerPoint - ch02 第 一 篇 基 礎 圖 文 動 畫 (Basic Graphics / Animation) 2 1 簡 介 2 2 Frame Class 2 3 執 行 緒 繪 圖 流 程 2 4 Font Class 2 5 Color Class 2 6 中 文 處 理 2 7 習 題 (Exercises) 第 二 章 文 字 繪 製 (Words) 2 1 簡 介 本 書 探 討 的 是 動 畫 遊 戲,

More information

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

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

More information

(京)新登字063号

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

More information

Spyder Anaconda Spyder Python Spyder Python Spyder Spyder Spyder 開始 \ 所有程式 \ Anaconda3 (64-bit) \ Spyder Spyder IPython Python IPython Sp

Spyder Anaconda Spyder Python Spyder Python Spyder Spyder Spyder 開始 \ 所有程式 \ Anaconda3 (64-bit) \ Spyder Spyder IPython Python IPython Sp 01 1.6 Spyder Anaconda Spyder Python Spyder Python Spyder Spyder 1.6.1 Spyder 開始 \ 所有程式 \ Anaconda3 (64-bit) \ Spyder Spyder IPython Python IPython Spyder Python File

More information

Topic

Topic 二 级 JAVA 上 机 试 题 汇 编 第 01 套 : 1. 基 本 操 作 (1 小 题, 计 30 分 ) 在 考 生 文 件 夹 中 存 有 文 件 名 为 Java_1.java 的 文 件, 该 程 序 是 不 完 整 的, 请 在 注 释 行 //**********Found********** 下 一 行 语 句 的 下 划 线 地 方 填 入 正 确 内 容, 然 后 删 除

More information

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

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

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

書面

書面 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

1 1 Excel VBA 說明 ( ) (_) STEP4 Excel 2 STEP5 A1 1 B2 2 C3 3 STEP6 A1 STEP7 > > 1-11

1 1 Excel VBA 說明 ( ) (_) STEP4 Excel 2 STEP5 A1 1 B2 2 C3 3 STEP6 A1 STEP7 > > 1-11 1-3 1-3-1 Excel VBA VBA OK CD DVD Excel VBA Excel VBA Excel Visual Basic A1 1 B2 2 C3 3 STEP1 Excel Ch01_VBA.xlsm 1 > > STEP2 Excel 1 2 STEP3 1-10 1 1 Excel VBA 說明 ( ) (_) STEP4 Excel 2 STEP5 A1 1 B2 2

More information

理性真的普遍嗎 注意力的爭奪戰 科學發展 2012 年 12 月,480 期 13

理性真的普遍嗎 注意力的爭奪戰 科學發展 2012 年 12 月,480 期 13 12 科學發展 2012 年 12 月,480 期 你可能不知道的媒體影響 劉正山若用 選戰 的角度來看選舉和參與選舉, 你大腦裡情感的作用一定大過理性的作用, 便會很習慣地拿各種媒體或別人的觀點來使自己的選擇合理化 2012 理性真的普遍嗎 注意力的爭奪戰 科學發展 2012 年 12 月,480 期 13 14 科學發展 2012 年 12 月,480 期 agendasetting 報紙和網路新聞的頭版空間有限,

More information

Learning Java

Learning Java Java Introduction to Java Programming (Third Edition) Prentice-Hall,Inc. Y.Daniel Liang 2001 Java 2002.2 Java2 2001.10 Java2 Philip Heller & Simon Roberts 1999.4 Java2 2001.3 Java2 21 2002.4 Java UML 2002.10

More information

(CIP) Web /,. :,2005. 1 ISBN 7 81058 782 X.W............T P393.4 CIP (2004) 118797 Web ( 99 200436) ( http:/ / www.shangdapress.com 66135110) : * 787

(CIP) Web /,. :,2005. 1 ISBN 7 81058 782 X.W............T P393.4 CIP (2004) 118797 Web ( 99 200436) ( http:/ / www.shangdapress.com 66135110) : * 787 Web (CIP) Web /,. :,2005. 1 ISBN 7 81058 782 X.W............T P393.4 CIP (2004) 118797 Web ( 99 200436) ( http:/ / www.shangdapress.com 66135110) : * 787 1092 1/ 16 30.75 748 2005 1 1 2005 1 1 : 1 3 100

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

<4D F736F F F696E74202D C DB5DA3132D5C25FCDBCD0CED3C3BBA7BDE7C3E6BBF9B4A12E BBCE6C8DDC4A3CABD5D>

<4D F736F F F696E74202D C DB5DA3132D5C25FCDBCD0CED3C3BBA7BDE7C3E6BBF9B4A12E BBCE6C8DDC4A3CABD5D> 第 12 章图形用户界面基础 1 动因 为 Java GUI 程序设计而设计的 API 是如何应用面向对象 原则的绝佳范例 从本章开始将学习 Java GUI API 的框 架结构, 还要学习如何使用 GUI 组件为应用程序和 applet 开发用户友好接口 2 学习目标 区分 Swing 和 AWT 的不同 ( 第 12.2 节 ) 描述 Java GUI API 的层次体系结构 ( 第 12.3

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

untitled

untitled 51testing www.51testing.com UML Java Unified Modeling Language UML 1 UML 2 UML UML UML UML UML UML use case Java 1 2 3 4( 5 6 7 UNIX Windows OS/2 ( GUI ) 8 51testing www.51testing.com use caseactor ()

More information

White Sketchpad PowerPoint Presentation

White Sketchpad PowerPoint Presentation 第五章 檔案存取 電商三乙 4A355001 郭雅如 4A355063 周宛萱 5-1-1 取得檔案名稱 但排除副檔名 5-1-2 取得路徑資訊

More information

untitled

untitled 1 Outline 數 料 數 數 列 亂數 練 數 數 數 來 數 數 來 數 料 利 料 來 數 A-Z a-z _ () 不 數 0-9 數 不 數 SCHOOL School school 數 讀 school_name schoolname 易 不 C# my name 7_eleven B&Q new C# (1) public protected private params override

More information

Microsoft Word - 投影片ch11

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

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

Microsoft Word - 結案報告.doc

Microsoft Word - 結案報告.doc 2 3 4 5 ~ 6 1. 2. 3. 4. 7 ~ 8 9 ~ 10 11 12 13 14 15 96年原住民族電視節目增製計畫 結案報告 五 執行方式 一 甄試過程照片 16 17 18 夣 19 20 21 22 23 24 25 96年原住民族電視節目增製計畫 結案報告 26 27 28 . 29 30 31 32 33 . 34 . 35 96年原住民族電視節目增製計畫 結案報告 (

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

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

《大话设计模式》第一章

《大话设计模式》第一章 第 1 章 代 码 无 错 就 是 优? 简 单 工 厂 模 式 1.1 面 试 受 挫 小 菜 今 年 计 算 机 专 业 大 四 了, 学 了 不 少 软 件 开 发 方 面 的 东 西, 也 学 着 编 了 些 小 程 序, 踌 躇 满 志, 一 心 要 找 一 个 好 单 位 当 投 递 了 无 数 份 简 历 后, 终 于 收 到 了 一 个 单 位 的 面 试 通 知, 小 菜 欣 喜

More information

Autodesk Product Design Suite Standard 系統統需求 典型使用用者和工作流程 Autodesk Product Design Suite Standard 版本為為負責建立非凡凡產品的設計師師和工程師, 提供基本概念設計計和製圖工具, 以取得令人驚驚嘆

Autodesk Product Design Suite Standard 系統統需求 典型使用用者和工作流程 Autodesk Product Design Suite Standard 版本為為負責建立非凡凡產品的設計師師和工程師, 提供基本概念設計計和製圖工具, 以取得令人驚驚嘆 Autodesk Product Design Suite Standard 20122 系統統需求 典型使用用者和工作流程 Autodesk Product Design Suite Standard 版本為為負責建立非凡凡產品的設計師師和工程師, 提供基本概念設計計和製圖工具, 以取得令人驚驚嘆的產品設計計 Autodesk Product Design Suite Standard 版本中中包括以下軟體體產品

More information

Microsoft Word - Java程序设计全文_终_.doc

Microsoft Word - Java程序设计全文_终_.doc 实训 20 综合开发 2: 文本编辑器 20.1 实训目的 通过采用 Netbeans 重新开发并完善实训 15 中的文本编辑器程序, 训练读者掌握使用 Netbeans 进行 AWT GUI 程序的综合开发技能 20.2 实训案例 下面介绍如何采用 Netbeans 重新开发并完善实训 15 中的文本编辑器程序 通过本实训, 读者能够掌握 : (1)GUI 的菜单设计 (2)GUI 国际化处理 (3)GUI

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

40/60 AM Cardio 40/60 ... 4 Cardio 40/60... 4... 5... 5 :... 5... 5... 6 : Cardio 40/60... 6 / (Cardio 40)... 6 / (Cardio 60)... 6 :... 6 : GPS... 7 : Brytonsport.com... 8... 9 :... 9 GPS... 10... 11

More information

TPM BIOS Infineon TPM Smart TPM Infineon TPM Smart TPM TPM Smart TPM TPM Advanced Mode...8

TPM BIOS Infineon TPM Smart TPM Infineon TPM Smart TPM TPM Smart TPM TPM Advanced Mode...8 Smart TPM Rev. 1001 Smart TPM Ultra TPM Smart TPM TPM...3 1. BIOS... 3 2. Infineon TPM Smart TPM... 4 2.1. Infineon TPM...4 2.2. Smart TPM...4 3. TPM... 5 3.1. Smart TPM TPM...5 3.2. Advanced Mode...8

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

ZW1.PDF

ZW1.PDF C. A. R. Hoare, The Emperor s Old Clothes Java C++ Objective C Eiffel Smalltalk Mesa Lisp Java Java Java C++ Java 10 Item 1 Item 2 String.equals() == 1 1 Item 3 Java C++ Java Item 4 Java Item 5 Java Item

More information

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

More information

1 4 1.1 4 1.2..4 2..4 2.1..4 3.4 3.1 Java.5 3.1.1..5 3.1.2 5 3.1.3 6 4.6 4.1 6 4.2.6 5 7 5.1..8 5.1.1 8 5.1.2..8 5.1.3..8 5.1.4..9 5.2..9 6.10 6.1.10

1 4 1.1 4 1.2..4 2..4 2.1..4 3.4 3.1 Java.5 3.1.1..5 3.1.2 5 3.1.3 6 4.6 4.1 6 4.2.6 5 7 5.1..8 5.1.1 8 5.1.2..8 5.1.3..8 5.1.4..9 5.2..9 6.10 6.1.10 Java V1.0.1 2007 4 10 1 4 1.1 4 1.2..4 2..4 2.1..4 3.4 3.1 Java.5 3.1.1..5 3.1.2 5 3.1.3 6 4.6 4.1 6 4.2.6 5 7 5.1..8 5.1.1 8 5.1.2..8 5.1.3..8 5.1.4..9 5.2..9 6.10 6.1.10 6.2.10 6.3..10 6.4 11 7.12 7.1

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

建立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

Excel VBA Excel Visual Basic for Application

Excel VBA  Excel Visual Basic for Application Excel VBA Jun5,00 Sub 分頁 () Dim i As Integer Dim Cname As String Dim Code As Variant Set score=thisworkbook.sheets("sheet") Code=Array(" 專北一 "," 專北二 "," 專北三 "," 專桃園 "," 專桃竹 "," 專中苗 ", " 專台中 "," 專台南 ","

More information

17-72c-1

17-72c-1 台灣喜宴文化與陶瓷餐具設計開發 廖素慧 林長弘 林秀娟 摘 要 喜宴文化它包括了生活風俗習慣 禮教的 禁忌與料理 飲食的結合 可以看到民族的思 想行為以及社會的結構模式 是生活文化的濃 縮 它的過程對於一對新人在人生旅程開始 時 得到關愛與祝福也給予責任 所以喜宴的 禮教約束 是人生很重要的一個過程 好的飲 食禮教約束可以產生良性的人生觀 從喜宴的 食物料理與新開發餐具的造形與裝飾美感等的 結合來做一個開始

More information

基于ECO的UML模型驱动的数据库应用开发1.doc

基于ECO的UML模型驱动的数据库应用开发1.doc ECO UML () Object RDBMS Mapping.Net Framework Java C# RAD DataSetOleDbConnection DataGrod RAD Client/Server RAD RAD DataReader["Spell"].ToString() AObj.XXX bug sql UML OR Mapping RAD Lazy load round trip

More information

图形学 Project 2 要求 任意两个多边形, 求出其相交的区域 使用说明 例 1 第一步, 与 Project 1 画多边形的方法相同, 画一个多边形 ; 第二步, 单击 INTERSECT WITH, 随后画出第二个多边形 ; 第三步, 单击 FILL 进行填充

图形学 Project 2 要求 任意两个多边形, 求出其相交的区域 使用说明 例 1 第一步, 与 Project 1 画多边形的方法相同, 画一个多边形 ; 第二步, 单击 INTERSECT WITH, 随后画出第二个多边形 ; 第三步, 单击 FILL 进行填充 图形学 Project 2 要求 任意两个多边形, 求出其相交的区域 使用说明 例 1 第一步, 与 Project 1 画多边形的方法相同, 画一个多边形 ; 第二步, 单击 INTERSECT WITH, 随后画出第二个多边形 ; 第三步, 单击 FILL 进行填充 例 2 单击 CLEAR, 重新回到初始状态, 下面让我们看一下自交多边形的情况 当单击数次后, 出现左图的情况, 之后我们单击

More information

封面-12

封面-12 第十二章 701Client TECHNOLOGY CO.,LTD. 701Client 701Server 701Client "701Client", 12-1 :supervisor :supervisor : 1. : 00~99 100 2. : 00~63 ( 63 / / ) 3. : 18 9 4. : 18 9 5. 12-2 TECHNOLOGY CO.,LTD. 701Client

More information

概述

概述 OPC Version 1.6 build 0910 KOSRDK Knight OPC Server Rapid Development Toolkits Knight Workgroup, eehoo Technology 2002-9 OPC 1...4 2 API...5 2.1...5 2.2...5 2.2.1 KOS_Init...5 2.2.2 KOS_InitB...5 2.2.3

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

專題報告交版.doc

專題報告交版.doc 1 2 3 4 5 6 6 9 21 23 27 27 29 33 51 65 66 67 5 6 7 8 9 10 11 12 13 14 (menu manager) (model tree) (sub-window) (dialog box) 15 16 3. 17 18 19 20 21 22 23 24 25 26 27 ? 28 29 30 31 32 2 33 34 35 36 37

More information

mvc

mvc Build an application Tutor : Michael Pan Application Source codes - - Frameworks Xib files - - Resources - ( ) info.plist - UIKit Framework UIApplication Event status bar, icon... delegation [UIApplication

More information

javaexample-02.pdf

javaexample-02.pdf n e w. s t a t i c s t a t i c 3 1 3 2 p u b l i c p r i v a t e p r o t e c t e d j a v a. l a n g. O b j e c t O b j e c t Rect R e c t x 1 y 1 x 2 y 2 R e c t t o S t r i n g ( ) j a v a. l a n g. O

More information

縣 94 學年度 上 學期 區 國民中學 Q 年級 R 領域教學計畫表 設計者:

縣 94 學年度 上 學期      區 國民中學  Q  年級    R    領域教學計畫表 設計者: 高雄市立茄萣國中國中 103 學年度第一學期八年級 英文補救教學彈性學習課程計畫表 一 教材來源 : 二 教學節數 : 每週 (1) 節, 學期共 ( 20 ) 節 三 各單元內涵分析 : 週次 第一週 第二週 第三週 第四週 9/1 9/5 9/8 9/12 9/15 9/19 9/22 9/26 Lesson1 ( 一 ) Lesson1 ( 一 ) Lesson2 ( 二 ) Lesson2

More information

( )... 5 ( ) ( )

( )... 5 ( ) ( ) 2016 大學校院招收大陸地區學生聯合招生委員會 71005 臺南市永康區南臺街 1 號 E-mail:rusen@stust.edu.tw WEB:http://rusen.stust.edu.tw TEL:+886-6-2435163 FAX:+886-6-2435165 2 0 1 6 0 1 1 9 2016... 2... 3... 5 ( )... 5 ( )... 5 1... 6 2...

More information

Python a p p l e b e a r c Fruit Animal a p p l e b e a r c 2-2

Python a p p l e b e a r c Fruit Animal a p p l e b e a r c 2-2 Chapter 02 變數與運算式 2.1 2.1.1 2.1.2 2.1.3 2.1.4 2.2 2.2.1 2.2.2 2.2.3 type 2.2.4 2.3 2.3.1 print 2.3.2 input 2.4 2.4.1 2.4.2 2.4.3 2.4.4 2.4.5 + 2.4.6 Python Python 2.1 2.1.1 a p p l e b e a r c 65438790

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

图形用户界面 (GUI) 设计

图形用户界面 (GUI) 设计 2013-2014 学年度第二学期课程 C 语言程序设计 Java 语言程序设计面向过程编程方法 编程方法学 新疆农业大学计算机与信息工程学院 陈燕红 :cyh@xjau.edu.cn 图形用户界面 (GUI) 设计 参考 C:\Program Files\Java\jdk1.6.0_10\demo 教学内容 1 Java 图形用户界面设计概述 2 3 4 AWT 组件集 事件处理 Swing

More information