Java 入門指南 - 整合 Encrypt

EncryptorGUI 是的圖形介面使用者軟體,編碼、解碼的計算核心是由 Encrypt 來完成




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 則留言:

Unknown 提到...

Hi 請問您的toEncode() 是定義在哪裡呢? thanks!!