公告

《如何自學程式設計》入選 Google Play 台灣地區2016年度最佳書籍
預計之後會調整本站內容,凡是有兩個版本的教材,舊版本將刪除。

Java 入門指南 V2.00 - 單元 24 - 整合 Encrypt




想要在 GUI 中使用 Encrypt 類別 (class) ,就得將 Encrypt.java 加入 encryptor 套件 (package) ,也就是 Encryptor 專案 (project) 之中



我們這裡介紹在 encryptor 套件中新增類別檔案的方式,在 encryptor 圖示上按滑鼠右鍵,然後在快顯功能表中選擇〔New〕裡的〔Java Class〕



接著就會出現 New Java Class 的視窗,我們只需要把類別名稱改為 Encrypt 就可以了,最後點擊〔Finish〕



這樣 NetBeans 就替我們新增一個 Encrypt 類別了,不過這類別除了宣告在 encryptor 套件外,其他的內容都是空白



不用擔心,接下來就把之前開發好的 Encrypt.java 的內容複製貼上就行了,記得套件宣告的地方要保留下來



下面我們回到 EncryptorController ,著手將 Encrypt 整合到 GUI 中。首先,要先加入一行 import ,如下



這是因為要處理 text01 的資料,然後把結果放在 text02 中, text01text02 都是 TextField 型態,因此使用前要先 import


下面看到新增的屬性 (field) 及建構子 (constructor)



e 就是 Encrypt 型態 (type) ,由於 EncryptEncryptorController 在同一個套件,因此不需要額外的 importinputTextresultText 是儲存輸入及輸出結果的字串 (string) ,此外加入 text01text02 的宣告,注意每一個 FXML 的屬性都要加上 @FXML ,至於建構子就是替每個屬性設定初值。


繼續往下看到編碼 Encode 按鈕的 encodeMethod()



我們用了巢狀的 if-else 陳述 (statement) ,這是指有兩層的 if-else 條件判斷,第一層先檢查屬性 e 是否為 null ,如果 enull 就表示使用者沒有按過 New 按鈕,也就沒有 Encrypt 型態的屬性 e ,自然 e 也不會有 toEncode() 方法 (method) 。所以 e 等於 null 的話,無法進行編碼,程式就在這裡停止並且印出提示訊息。


e 不等於 null ,程式就進入 else 的部份,先利用 TextFieldgetText() 取得使用者輸入的文字放進 inputText ,然後進行第二層 if-else 的條件檢查,這裡利用字串的 compareTo() 方法比較 inputText 是否為空字串 "" ,如果 compareTo() 比較結果為相等就會回傳 0 ,因為空字串沒有內容所以編碼過後也只是空字串,所以就停止並且印出提示訊息。


實際編碼就是用 e 呼叫 toEncode() ,把回傳字串設定給 resultText ,最後利用 text02setText() 設定顯示編碼結果,然後在 label03 印出提示訊息。


decodeMethod() 方法跟 encodeMethod() 很類似,大體上就是將 toEncode() 換成 toDecode() ,請自行實作。

執行結果如下



結果 ok ,下一個單元我們繼續實作 SaveLoad 兩個按鈕。


中英文術語對照


類別class
套件package
專案project
屬性field
建構子constructor
型態type
字串string
陳述statement
方法method

重點整理


  1. 我們用新增類別檔案的方式整合 Encrypt
  2. 建構子的目的是替屬性設定初值。
  3. encodeMethod() 的執行順序為先判斷使用者有無按 New 按鈕,再來判斷是否有輸入文字。

問題與討論


  1. 為什麼 TextField 要用 new 建立新物件?而 Label 不用?
  2. 如果 encodeMethod() 沒有先檢查 einputText 會有什麼缺點?

the end

1 則留言:

tian meng 提到...

按 New 按鈕, 但是您的文章中沒有提到 newMethod 的內容, 所以我依照您的文章所做的編碼沒有辦法得到您列出的執行結果.

結果, 我只好自己在 newMethod 加上 e = new Encrypt(); , 才能順利得到您列出的執行結果.

如下:

@FXML
private void newMethod(ActionEvent event) {
System.out.println("You clicked [New] button!");
label03.setText("This is [New] button!");
e = new Encrypt();
}