首先尊重封装规则.将您的字段设为私有.接下来,您需要获取需要访问的字段的getter.
public class GUI {
private JTextField field = new JTextField();
public GUI() {
// pass this instance of GUI to other class
SomeListener listener = new SomeListener(GUI.this);
}
public JTextField getTextField() {
return field;
}
}
然后,您将要将GUI传递给任何需要访问文本字段的类.说一个ActionListener类.使用构造函数注入(或“传递引用”)来传递GUI类.执行此操作时,SomeListener中引用的GUI是相同的,并且您不会创建新的GUI(它不会引用您需要的同一实例).
public class SomeListener implements ActionListener {
private GUI gui;
private JTextField field;
public SomeListener(GUI gui) {
this.gui = gui;
this.field = gui.getTextField();
}
}
虽然上述方法可行,但可能是不必要的.首先考虑一下你想要对文本字段做什么.如果某些操作可以在GUI类中执行,但您只需要访问类中的某些内容来执行它,那么您可以使用需要执行某些操作的方法来实现接口.像这样的东西
public interface Performable {
public void someMethod();
}
public class GUI implements Performable {
private JTextField field = ..
public GUI() {
SomeListener listener = new SomeListener(GUI.this);
}
@Override
public void someMethod() {
field.setText("Hello");
}
}
public class SomeListener implements ActionListener {
private Performable perf;
public SomeListener(Performable perf) {
this.perf = perf;
}
@Override
public void actionPerformed(ActionEvent e) {
perf.someMethod();
}
}