簡體   English   中英

實時JavaFX-8表單管理

[英]Real-time JavaFX-8 Form Management

好吧,這是我的難題。 我正在嘗試使用TextFields和其他元素創建JavaFX Form。 但是現在,我需要知道如何實現實時填寫的表單。

從理論上講,例如,我有兩個TextField。

TextField textfield1 = new TextField();
TextField textfield2 = new TextField();

第二個文本字段取決於在第一個文本字段中輸入的任何值。 用戶在第一個鍵盤上完成鍵入后,立即在第二個鍵盤中填充一個值。

if(!textfield.getText().equals("")) {
    textfield2.setText("blah, blah, blah");
}

舉一個真實的例子,假設我正在創建一個工資系統。 用戶輸入完員工的基本工資(在第一個文本字段中)后,便立即輸入了員工的月薪值:基本工資* 2(在第二個文本字段中)。

第二個是不可編輯的,只有第一個是不可編輯的。 可以肯定的是,我在第一個字段上需要某種事件處理程序,但我確實對如何編寫代碼或編寫什么代碼感到困惑。 順便說一下,我是JavaFX的新手。 任何幫助,將不勝感激。

更新 :我正在對此使用Scenebuilder(對不起,我忘了包含它)。 因此,每個元素的偵聽器都在控制器中分組為已定義的功能。 自從我使用Eclipse廢棄Swing(和Windowbuilder)以來,使用內部類對我來說感覺很奇怪。 我想使代碼約定在所有方面保持一致。

我相信您在問如何實現焦點丟失的監聽器。 這演示了如何將更改偵聽器添加到第一個文本字段的focusProperty()並使用它來觸發第二個文本字段的更新。

可以在控制器中通過將邏輯放在@FXML注釋的initialize()方法中來完成。 注入所有@FXML帶注釋的字段后,JavaFX會自動對其進行調用。

public class Controller {
    @FXML
    private TextField textfield1;
    @FXML
    private TextField textfield2;

    @FXML
    public void initialize() {
        textfield1.focusedProperty().addListener((obs, oldValue, newValue) -> {
            if (!newValue) { // focus lost
                if (!"".equals(textfield1.getText())) {
                    textfield2.setText("blah, blah, blah");
                } else {
                    textfield2.setText("");
                }
            }
        });
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM