我是 Java 的新手,但遇到了瓶颈。我想从另一个类访问 GUI 组件(已在一个类中创建)。我正在从一个类创建一个新的 GUI 类,就像这样;
GUI gui = new GUI();
我可以访问那个类中的组件,但是当我转到另一个类时我不能。我真的只需要访问 JTextAreas
来更新它们的内容。请有人指出我正确的方向,非常感谢任何帮助。
GUI
类:
public class GUI {
JFrame frame = new JFrame("Server");
...
JTextArea textAreaClients = new JTextArea(20, 1);
JTextArea textAreaEvents = new JTextArea(8, 1);
public GUI()
{
frame.setLayout(new FlowLayout(FlowLayout.LEADING, 5, 3));
...
frame.setVisible(true);
}
}
最佳答案
首先尊重封装规则。使您的字段私有(private)
。接下来,您希望为需要访问的字段设置 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
类。使用构造函数注入(inject)(或“传递引用”)来传递GUI
类。当你这样做时,SomeListener
中引用的 GUI
是同一个,你永远不会创建一个新的(它不会引用你的同一个实例)需要)。
public class SomeListener implements ActionListener {
private GUI gui;
private JTextField field;
public SomeListener(GUI gui) {
this.gui = gui;
this.field = gui.getTextField();
}
}
虽然上面的可能有效,但它可能是不必要的。首先考虑一下您想要对文本字段执行的操作。如果某些操作可以在 GUI 类中执行,但您只需要访问类中的某些内容即可执行它,您可以使用需要执行某些操作的方法实现一个接口(interface)
。像这样
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();
}
}
关于java - 从另一个类访问 GUI 组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22833328/