EncryptorGUI 類別完整的範例程式碼,請參考EncryptorGUI.java
簡單說,我們在 EncryptorGUI 中建立一個 Encrypt 型態的屬性 (field) 即可
private Encrypt e;
因此必須先 import encryptor 套件 (package)
import encryptor.Encrypt;
我們在建構子 (constructor) 中,先將 e 設定為 null
e = null; // null 表示指向虛無的參考
null 是 Java 中特別的字面常數 (literal) ,表示什麼都沒有的參考 (reference) ,這裡是用 null 當 e 的初值。若一個參考變數 (reference variable) 被指向 null ,原先的實體物件 (instance) 若無其他參考變數連結,那麼這個實體物件就會被自動資源回收。
實際 e 的建立是用 New 按鈕 (button) ,採用 NewListener 的 inner 類別 (inner class) 處理相關事件 (event)
// 建立新 Encrypt 物件的事件 class NewListener implements ActionListener { public void actionPerformed(ActionEvent event) { e = new Encrypt(); JLabel t = (JLabel) GUIComponent.get(2); t.setText("This is New button. A new Encrypt object is built."); } }
編碼為 Encode 按鈕,,採用 EncodeListener 處理相關事件
// 進行編碼的事件 class EncodeListener implements ActionListener { public void actionPerformed(ActionEvent event) { JLabel t1 = (JLabel) GUIComponent.get(2); JTextField t2 = (JTextField) GUIComponent.get(4); if (userinput == "") { t1.setText("This is Encode button. No input string!!"); } else { if (e == null) { t1.setText("This is Encode button. No Encrypt object!!"); } else { result = e.toEncode(userinput); t2.setText(result); t1.setText("This is Encode button. The result is above."); } } } }
注意這裡,我們用巢狀的 if-else 來檢查使用者是否有輸入文字,若使用者沒有輸入文字,進行編碼就沒有意義。然後再檢查 e 是否已經被建立,同樣的,若無 e 就無法進行編碼。若使用者有輸入文字, userinput 就不會是空字串,然後使用者有新建 Encrypt 的 e 物件,這樣才會開始進行編碼
result = e.toEncode(userinput);
編碼就是呼叫 e 的 toEncode() 方法 (method) ,得到的結果給 result ,然後將 result 交給 Output 標籤 (label) 後的的文字方塊 (textfield) 顯示編碼結果。 result 也是我們新增的屬性,記得,所有新增的東西都要先宣告
private String result;
任何工作完成,我們都在 hint 標籤提供相對應的提示訊息。
編碼為 Decode 按鈕,,採用 DecodeListener 處理相關事件
// 進行解碼的事件 class DecodeListener implements ActionListener { public void actionPerformed(ActionEvent event) { JLabel t1 = (JLabel) GUIComponent.get(2); JTextField t2 = (JTextField) GUIComponent.get(4); if (userinput == "") { t1.setText("This is Decode button. No input string!!"); } else { if (e == null) { t1.setText("This is Decode button. No Encrypt object!!"); } else { result = e.toDecode(userinput); t2.setText(result); t1.setText("This is Decode button. The result is above."); } } } }
整體上 DecodeListener 與 EncodeListener 相當類似,唯一的差別在
result = e.toDecode(userinput);
DecodeListener 這裡是呼叫 e 的 toDecode() , EncodeListener 的 e 是呼叫 toEncode() 。
記得要先重新編譯 EncryptorGUI.java ,然後呼叫執行 EncryptorGUIDemo.class 。好了,我們來玩玩看吧!
輸入英文句子 "There is no spoon." ,這會被 userinput 儲存
先按 Encode 按鈕,的確,還沒建立 Encrypt 物件
按 New 按鈕,建立 Encrypt 物件
再按 Encode 按鈕,此時順利完成編碼
重新按一次 New 按鈕
然後按 Encode 按鈕,得到新的編碼結果
接下來,我們繼續加入儲存 Encrypt 物件到檔案的功能,同時要來看看重要的例外處理哩!
中英文術語對照 | |
---|---|
屬性 | field |
套件 | package |
建構子 | constructor |
字面常數 | literal |
參考 | reference |
參考變數 | reference variable |
實體物件 | instance |
按鈕 | button |
inner 類別 | inner class |
事件 | event |
方法 | method |
標籤 | label |
文字方塊 | textfield |
您可以繼續參考
GUI 篇
相關目錄
回 Java 入門指南
回 Java 教材目錄
回首頁
參考資料
The JavaTM Tutorials: Getting Started
The JavaTM Tutorials: Learning the Java Language
The JavaTM Tutorials: Essential Classes
The Java Language Specification, Third Edition
本文於 2013 年 1 月訂正
1 則留言:
Hi 請問您的toEncode() 是定義在哪裡呢? thanks!!
張貼留言