如何在javafx中将String对象转换为TextField对象?

时间:2016-08-22 10:57:04

标签: java javafx

我有一个方法可以清除鼠标单击事件上的文本字段。但是这个方法需要为我想要应用它的每个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

2 个答案:

答案 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.
}