我可以通过这样做来公开私有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");
这是可能的,我在这里打破了什么规则?
答案 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可以轻松地执行此操作)...