如何为JTextField创建通用setter?

时间:2015-05-23 01:05:58

标签: java swing 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类中发生这种情况
someTF.setText("Some Value");

这是可能的,我在这里打破了什么规则?

1 个答案:

答案 0 :(得分:2)

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

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

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

sv.setTextField(sv.someTF, value);

现在,为了回答关于如何通过一种方法公开许多私有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可以轻松地执行此操作)...