[英]How to convert a String object into TextField Object in javafx?
我有一種方法可以清除鼠標單擊事件中的文本字段。 但是,對於我想應用它的每個文本字段,都需要實現此方法。
另外,我嘗試創建一個返回元素ID並使用該元素ID清除關聯元素的通用方法。 但是此元素id返回為String。 我無法將其轉換為文本字段。 還有其他方法可以實現上述邏輯嗎? 提前致謝。
public void clearUserName(MouseEvent event) {
String textFiledName =((Control) event.getSource()).getId(); //returns as a String
} // Cannot convert textFiledName to a TextField
您可以將TextField
作為userData
附加到那些Control
,例如
Control control = ...
control.setUserData(textField);
public void clearUserName(MouseEvent event) {
TextField textField = (TextField) ((Node) event.getSource()).getUserData();
...
}
如果已經使用了userData
屬性,則還可以使用Node
的properties
映射來存儲對TextField
的引用。
使用輔助方法創建TextField
可以通過將結果設置為userData
設置為作為參數傳遞的Control
來減少代碼重復。
private static TextField createTextField(Control control) {
TextField result = new TextField();
control.setUserData(result);
return result;
}
一種替代方法是使用反射按名稱訪問字段,但是我不建議這樣做。 這不適用於局部變量,但是根本無法通過名稱訪問局部變量。
另一種可能性是添加一種創建TextField
的方法,該方法也將id作為參數並將TextField
添加到Map<String, TextField>
。
private final Map<String, TextField> textFields = new HashMap<>();
private TextField createTextField(String controlId) {
TextField result = new TextField();
textFields.put(controlId, result);
return result;
}
public void clearUserName(MouseEvent event) {
String textFiledName = ((Control) event.getSource()).getId();
TextField textField = textFields.get(textFiledName);
...
}
您可以簡單地使用以下方法...
public void clearUserName(MouseEvent event) {
userName.clear(); //Here userName is the label name.
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.