2016-08-22 93 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對象
相關問題