簡體   English   中英

綁定標簽時格式化整數

[英]Formatting integer while binding to label

我正在嘗試將整數綁定到標簽的text屬性時設置格式。

我知道我可以在值設置器中使用setText(),但我希望通過綁定以正確的方式進行操作。

在控制器初始化中,我有:

sec = new SimpleIntegerProperty(this,"seconds");
secondsLabel.textProperty().bind(Bindings.convert(sec));

但是,當秒數降至10以下時,它顯示為一位數字,但是我希望它保持兩位數字。 所以我嘗試將Binding更改為以下內容:

 secondsLabel.textProperty().bind(Bindings.createStringBinding(() -> {
        NumberFormat formatter = NumberFormat.getIntegerInstance();
        formatter.setMinimumIntegerDigits(2);
        if(sec.getValue() == null) {
            return "";
        }else {
            return formatter.format(sec.get());
        }
    }));

這將格式化它,但是當我覆蓋它時sec.set(newNumber); 值不變。

我也試過這個:

secondsLabel.textProperty().bind(Bindings.createStringBinding(() -> {
            if(sec.getValue() == null) {
                return "";
            }else {
                return String.format("%02d", sec.getValue());
            }
        }));

但這也做同樣的事情。 加載正常,顯示兩位數,但是通過sec.set(newNumber);更改了數字時sec.set(newNumber); 沒有改變。 該數字永遠不會高於60或低於零

您需要告訴綁定,無論sec屬性何時無效,綁定都應該無效。 Bindings.createStringBinding(...)在函數之后采用一個varargs參數,該參數應傳遞綁定需要綁定到的任何屬性。 您可以直接修改您的代碼,如下所示:

secondsLabel.textProperty().bind(Bindings.createStringBinding(() -> {
    NumberFormat formatter = NumberFormat.getIntegerInstance();
    formatter.setMinimumIntegerDigits(2);
    if(sec.getValue() == null) {
        return "";
    }else {
        return formatter.format(sec.get());
    }
}, sec));

要么

secondsLabel.textProperty().bind(Bindings.createStringBinding(() -> {
    if(sec.getValue() == null) {
        return "";
    }else {
        return String.format("%02d", sec.getValue());
    }
}, sec));

正如@fabian指出的那樣, IntegerProperty.get()永遠不會返回null,因此您可以刪除null檢查,然后執行以下操作:

secondsLabel.textProperty().bind(Bindings.createStringBinding(
    () -> String.format("%02d", sec.getValue()),
    sec));

綁定API中有一個方便的版本:

secondsLabel.textProperty().bind(Bindings.format("%02d", sec));

IntegerProperty繼承了許多有用的方法,包括asString

secondsLabel.textProperty().bind(sec.asString("%02d"));

暫無
暫無

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

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