2016-08-22 132 views
0

我有一个方法可以清除鼠标单击事件上的文本字段。但是这种方法需要为每个我想应用它的文本字段来实现。如何将String对象转换为javafx中的TextField对象?

或者,我试图创建一个通用方法,该方法返回元素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

?你是否跳过了Java的所有基础知识? –

+0

你怎么能一个'String'转换成UI元素 – Kayaman

+0

@Kayaman好吧他有问题把它放在一个词什么他想要什么http://xyproblem.info/ –

回答

3

你可以为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); 
    ... 
} 
+0

Yap,但我仍然必须将所有TextFields定义为UserData对吗? 我们可以使用一个通用的方法而不指定我们拥有的所有文本区域吗? –

1

您可以简单地使用下面的方法...

public void clearUserName(MouseEvent event) { 
    userName.clear(); //Here userName is the label name. 
} 
要设置字符串或字符串转换成对象TextField对象