如何为 JTextField 创建通用的 setter?

How can I create a generic setter for JTextField?

我可以通过这样做公开私有 JTextField:

public void setTextField(String value) {
    someTF.setText(value);
}

如果我有很多 JTextField,工作量会很大。我尝试这样做但失败了。没有错误,只是没有在指定的 JTextField 上设置正确的值。

public class SomeView {

    private JTextField someTF = new JTextField(10);
    ...

    public void initComponents() {
        ...
    }

    public void setTextField(JTextField jTF, String value) {
        jTF.setText(value);
    }
}

public class SomeViewTable implements ...{

    public void mousePressed(MouseEvent e) {
        if (e.getSource() == someButton) {
            JTextField someTF = new JTextField(10);
            String value = "Some Value";
            SomeView sv = new SomeView();
            sv.initComponents();

            sv.setTextField(someTF, value);
        }
    }
 }

当我调用方法 sameTextField

时,我希望在 SomeView class 中发生这种情况
someTF.setText("Some Value");

这可能吗,我违反了java中的什么规则?

在您的侦听器中,您正在创建一个局部变量:

JTextField someTF = new JTextField(10);
...
sv.setTextField(someTF, value);

但是你想要的是设置SomeView的文本字段。所以删除第一行,并将第二行替换为:

sv.setTextField(sv.someTF, value);

现在,要回答如何通过一种方法公开多个私有 JTextField 的更全局性问题,一种可能是为每个 JTextField 分配一个字符串 ID,并将它们全部存储在 HashMap 中:

Map<String,JTextField> map = new HashMap<String,JTextField>();
map.put("field 1", textField1);
...
map.put("field n", textFieldn);

public void setTextField(String id, String value) {
    map.get(id).setText(value);
}

或者您可以简单地为所有字段自动生成 getter(大多数 IDE 可以轻松地做到这一点)...