簡體   English   中英

當TextField失去焦點時如何觸發ChangeListener? JavaFX的

[英]How to trigger the ChangeListener when TextField loses focus ? JAVAFX

我有多個TextFields並且我正在嘗試查找用戶輸入到其中的數字的總和。

 credit1.textProperty().addListener(new creditChangeListener(this.credit1, this.course1, this.grade1));
 credit2.textProperty().addListener(new creditChangeListener(this.credit2, this.course2, this.grade2));
 credit3.textProperty().addListener(new creditChangeListener(this.credit3, this.course3, this.grade3));
 credit4.textProperty().addListener(new creditChangeListener(this.credit4, this.course4, this.grade4));

我有一個內部類,實現ChangeListener來處理每個TextField用戶輸入。

 private class creditChangeListener implements ChangeListener<String>{

    private final TextField credit;
    private final TextField course;
    private final TextField grade;

    public creditChangeListener(TextField credit, TextField course, TextField grade){
        this.credit = credit;
        this.course = course;
        this.grade = grade;
    }

    @Override
    public void changed(ObservableValue<? extends String> observable, String oldValue, String newValue){
        if(!credit.getText().matches("[0-9]+")) grade.setText("");
        if(!course.getText().isEmpty() && !grade.getText().isEmpty()) {
            addSum();
        }
    }

    private void addSum(){
        sum += Integer.parseInt(credit.getText());
        System.out.println("Current sum: " + sum);
    }
}

我需要找到輸入到這些credit TextFields中的數字的總和,但是ChangeListener會逐位添加數字,而我需要輸入完整的數字。 我曾想過在TextFields失去焦點之后觸發ChangeListener ,但我無法找到實現方法,也無法確定這是正確的方法。

不久前,我遇到了同樣的問題,我解決了這個問題,在Focused屬性中添加了Listener,而不是Changed屬性。 首先創建一個可以重用的監聽器:

private ChangeListener<Boolean> focusListener = new ChangeListener<Boolean>() {
    @Override
    public void changed(ObservableValue<? extends Boolean> observable, Boolean oldValue, Boolean newValue) {
        if (!newValue) {
            sum(); //Do the sum logic here!!!
        }
    }
};

然后將更改偵聽器應用於所有文本字段

credit1.focusedProperty().addListener(focusListener);
credit2.focusedProperty().addListener(focusListener);
credit3.focusedProperty().addListener(focusListener);
credit4.focusedProperty().addListener(focusListener);

您可以以這種方式實現您的內部類,以在每次Textfield失去焦點時觸發事件。

希望能幫助到你...

暫無
暫無

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

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