你可以爲userData
附加TextField
s到那些Control
S,例如
Control control = ...
control.setUserData(textField);
public void clearUserName(MouseEvent event) {
TextField textField = (TextField) ((Node) event.getSource()).getUserData();
...
}
如果userData
財產已被使用,你也可以使用properties
map of Node
存儲到TextField
而不是一個參考。
使用助手方法創建TextField
s可以通過將結果設置爲userData
設置爲Control
作爲參數傳遞來減少代碼重複。
private static TextField createTextField(Control control) {
TextField result = new TextField();
control.setUserData(result);
return result;
}
另一種方法是使用反射通過名字來訪問一個字段,但我不會推薦它。這對局部變量不起作用,但根本無法通過名稱訪問局部變量。
另一種可能性是添加一個方法用於創建TextField
s表示也得到了id作爲參數,並增加了TextField
s到一個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);
...
}
?你是否跳過了Java的所有基礎知識? –
你怎麼能一個'String'轉換成UI元素 – Kayaman
@Kayaman好吧他有問題把它放在一個詞什麼他想要什麼http://xyproblem.info/ –