簡體   English   中英

如何在javafx中將String對象轉換為TextField對象?

[英]How to convert a String object into TextField Object in javafx?

我有一種方法可以清除鼠標單擊事件中的文本字段。 但是,對於我想應用它的每個文本字段,都需要實現此方法。

另外,我嘗試創建一個返回元素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

您可以將TextField作為userData附加到那些Control ,例如

Control control = ...
control.setUserData(textField);
public void clearUserName(MouseEvent event) {
    TextField textField = (TextField) ((Node) event.getSource()).getUserData();
    ...
}

如果已經使用了userData屬性,則還可以使用Nodeproperties映射來存儲對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);
    ...
}

您可以簡單地使用以下方法...

public void clearUserName(MouseEvent event) {
    userName.clear(); //Here userName is the label name.
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM