作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个方法可以在鼠标单击事件时清除文本字段。但是这个方法需要为我想要应用它的每个文本字段实现。
或者,我尝试创建一个返回元素 id 的通用方法,并使用该元素 id 来清除关联的元素。但这个元素 id 以字符串形式返回。我无法将其转换为文本字段。还有其他方法可以实现上述逻辑吗?提前致谢。
public void clearUserName(MouseEvent event) {
String textFiledName =((Control) event.getSource()).getId(); //returns as a String
} // Cannot convert textFiledName to a TextField
最佳答案
您可以附加TextField
为userData
给那些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
也获取 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);
...
}
关于java - 如何在javafx中将String对象转换为TextField对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39077750/
我是一名优秀的程序员,十分优秀!