你可以为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/ –