我有一个方法可以清除鼠标单击事件上的文本字段。但是这个方法需要为我想要应用它的每个Text-Field实现。
或者,我尝试创建一个返回元素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
答案 0 :(得分:3)
您可以将TextField
作为userData
附加到Control
个,例如
Control control = ...
control.setUserData(textField);
public void clearUserName(MouseEvent event) {
TextField textField = (TextField) ((Node) event.getSource()).getUserData();
...
}
如果userData
属性已被使用,您也可以使用properties
map of Node
来存储对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);
...
}
答案 1 :(得分:1)
您只需使用以下方法......
public void clearUserName(MouseEvent event) {
userName.clear(); //Here userName is the label name.
}