如何为 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 可以轻松地做到这一点)...
我可以通过这样做公开私有 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 可以轻松地做到这一点)...