Java 入門指南

單元 25 - 完成版的 JavaFX 專案

~~學習進度表~~

EncryptGUI 專案 (project) 設置在 encryptgui 套件 (package) 中,裡頭有三個 .java 檔案及一個 .fxml 檔案

encryptgui
    Encrypt.java
    EncryptGUI.java
    FXMLDocumentController.java
    FXMLDocument.fxml

其中 Encrypt.java 在「軟體開發篇」完成,並在上一個單元加入有參數 (parameter) 的建構子 (constructor) , EncryptGUI.java 為專案預設的檔案, FXMLDocument.fxml 則在「單元 22 - 設計介面」完成,之後幾個單元一路實作每個按鈕的功能,逐步完成 FXMLDocumentController.java

現在就剩下清空複製兩個按鈕了,先來看看跟清空按鈕相關的 clearMethod() 方法 (method) 的實作

@FXML
private void clearMethod(ActionEvent event) {
    input.setText("");
    output.setText("");
    e = null;
    result = "";
    display.setText("已清除");
}

完整程式請參考「範例程式篇」的 FXMLDocumentController.java

clearMethod() 方法 (method) 的內容很簡單,就是把 inputoutputresult 重新設定成空字串,然後把 e 設定為 null ,最後在 display 顯示提示訊息。

繼續看到實作複製按鈕的 copyMethod() 方法

@FXML
private void copyMethod(ActionEvent event) {
    Clipboard clipboard = Clipboard.getSystemClipboard();
    ClipboardContent content = new ClipboardContent();
    content.putString(result);
    clipboard.setContent(content);
    display.setText("已拷貝");
}

由於要用到 API 中的 ClipboardClipboardContent 類別 (class) ,因此要在 import 的地方先 import 以下兩個類別

import javafx.scene.input.Clipboard;
import javafx.scene.input.ClipboardContent;

回到 copyMethod() 的內容來看,先利用 ClipboardgetSystemClipboard() 取得系統剪貼簿物件 clipboard

Clipboard clipboard = Clipboard.getSystemClipboard();

注意這裡沒有用關鍵字 (keyword) new ,因為這是使用作業系統服務。

繼續建立 ClipboardContent 型態的變數 content

ClipboardContent content = new ClipboardContent();

然後把 result 屬性 (field) 當成 putString() 方法的參數 (parameter) ,這樣是把編碼結果 result 做為要複製到剪貼簿的內容

content.putString(result);

再來利用 clipboardsetContent() ,將 content 設定到系統剪貼簿去

clipboard.setContent(content);

最後在 display 顯示提示訊息,這樣就完成複製到系統剪貼簿的動作了。

來試試看囉!先取得編碼結果

按下複製按鈕

這樣就可以把編碼結果貼到其他地方

按下清空按鈕

所有內容就會被清除。

這樣按鈕功能就都完成了,不過還要在標題列顯示軟體名稱,這要在 EncryptGUI.javastart() 方法中加入以下程式碼

stage.setTitle("編密碼小工具");

完整程式請參考「範例程式篇」的 EncryptGUI.java

簡單講, EncryptGUI.java 中的程式碼就是 JavaFX 應用程式建立視窗的流程,由 FXMLDocument.fxml 設定連動的 Controller 類別,然後由 EncryptGUI.java 設定用哪個 FXML 檔案。

接下來要切換到 Android Studio 開發使用 Encrypt 類別的 Android App ,下一個單元先來認識 Android App 的開發囉!

相關教學影片

上一頁 單元 24 - 存檔與載入
回 Java 入門指南首頁
下一頁 單元 26 - 認識 Android App 開發
回 Java 教材首頁
回程式語言教材首頁
中英文術語對照
class類別
constructor建構子
field屬性
keyword關鍵字
method方法
package套件
parameter參數
project專案
參考資料
1. JavaFX 8.0: Introduction to FXML
2. JavaFX: Working with JavaFX UI Components - Label
3. JavaFX: Working with JavaFX UI Components - Button
4. JavaFX: Working with JavaFX UI Components - Text Field
5. JavaFX 8: Clipboard
6. JavaFX 8: ClipboardContent
重點整理
1. 清空就是把 e 重新設定為 null ,其他屬於字串的屬性都改成空字串。
2. 複製是利用 JavaFX 中的相關功能,直接將編碼字串複製到系統剪貼簿。
問題與討論
1. 清空的目的是清空所有輸入及輸出,除了上面所提的方式外,有更好的方式嗎?
2. 以上的複製直接將 result 設定到系統剪貼簿,想一想,如果沒有編碼結果,也就是使用者沒有按過編碼按鈕,那會複製什麼到系統剪貼簿去呢?
練習
1. 承接上一個單元的 HelloDemo 專案,加入以下的 @FXML 設定
@FXML
private Button button;
注意 NetBeans 的提示訊息,並加入相對應的 import 陳述。
2. 承接上一個單元的 GuessGameDemo 專案,新增 voidgameResult() 方法,這是按下四個數字按鈕後執行的方法,內容可以先在命令顯示提示訊息。 。
3. 承上題,在數字按鈕連動的方法,例如 1 加入以下內容
if (count != number) {
    user_input += "1";
    count += 1;
    display.appendText("1");
    if (count == number) {
        gameResult();
    }
}
這是按下每個數字就會在底下 display 顯示按了哪一個數字,按下四個數字後就會呼叫 gameResult() ,由 gameResult() 進行後續提示訊息的處理。