如何在 JavaFX 的 TextInputDialog 中執行輸入檢查?
上面的鏈接基本上涵蓋了我的問題的答案,但它在 scala 中對我不起作用。我有一個 TextField (eTextField),我想檢查它是否包含 R 或 D。如果包含,則應啟用按鈕 (ePR_ePD)。這是我的代碼中應該這樣做的部分,但它沒有啟用按鈕:
val isInvalid: BooleanBinding = Bindings.createBooleanBinding(() => !isValid(eTextField.getText, eTextField.textProperty))
println(isInvalid)
ePR_ePD.disableProperty().bind(isInvalid)
def isValid (eText: String, eTextProp: StringProperty): Boolean = {
println(eText.contains("R")||eText.contains("D"))
eText.contains("R")||eText.contains("D")
}
當 eTextField 包含 R 或 D 我的輸出是:
BooleanBinding [invalid]
true
當它不包含我的輸出時:
BooleanBinding [invalid]
false
但在這兩種情況下,ePR_ePD 按鈕都顯示已禁用。它似乎與 BooleanBinding 有關,因為它總是無效的。
也不確定為什么 isValid(eTextField.getText, eTextField.textProperty) 需要有 textProperty 引數,但這就是鏈接中的答案。還嘗試了“var isInvalid ...”,但這沒有幫助。
uj5u.com熱心網友回復:
根據檔案和注釋中的說明,createBooleanBinding它接受兩個引數,函式和可觀察的。
該函式僅測驗屬性值,因此isValid不需要第二個引數。(線索是第二個引數實際上并沒有使用)
def isValid (eText: String): Boolean =
eText.contains("R")|| eText.contains("D")
屬性本身作為第二個引數傳遞給createBooleanBinding而不是傳遞給isValid:
createBooleanBinding(() => !isValid(eTextField.getText), eTextField.textProperty)
uj5u.com熱心網友回復:
這有效,在我解決了我忘記在 SceneBuilder 中為 ePR_ePD 按鈕輸入 fx:id 的問題后:
(在 fxml 控制器的 initialize() 方法中:)
val isInvalid: BooleanBinding = Bindings.createBooleanBinding( () => !(isValid(eTextField.getText)), eTextField.textProperty)
ePR_ePD.disableProperty().bind(isInvalid)
}
(在 initialize() 方法之外:)
def isValid (eText: String): Boolean = {
println(eText.contains("R")||eText.contains("D"))
eText.contains("R")||eText.contains("D")
}
唯一奇怪的是,當我使用另一種方法自動更改 eTextField 的內容時,它似乎呼叫了兩次 isValid。當欄位中沒有 R 或 D 時,我的輸出為 false 假,而當其中任何一個存在時,我的輸出為 true 。
這也有效,沒有 isValid 方法:
(在 fxml 控制器的 initialize() 方法中:)
val isInvalid: BooleanBinding = Bindings.createBooleanBinding(
() => !(eTextField.getText.contains("R")||eTextField.getText.contains("D")), eTextField.textProperty
)
ePR_ePD.disableProperty().bind(isInvalid)
感謝大家的幫助!
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/486229.html
上一篇:不推薦使用的命令的SBT警告
