当前位置: 首页 > 面试题库 >

从另一个类访问GUI组件

颛孙哲
2023-03-14
问题内容

我是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。接下来,您需要输入getters需要访问的字段。

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类的传递。执行此操作时,中GUI被引用的对象SomeListener是同一对象,并且您永远不会创建新对象(不会引用您需要的同一实例)。

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();
    }
}


 类似资料:
  • 我是爪哇的新手,遇到了困难。我想从另一个类访问GUI组件(在一个类中创建)。我正在从一个类创建一个新的GUI类,就像这样; 我可以访问该类中的组件,但当我转到其他类时,我无法访问。我真的需要访问来更新它们的内容。有人能给我指一下正确的方向吗?非常感谢您的帮助。 类:

  • 我是一名Java程序员初学者。我试图在类交通中访问类车中的两个列表,这样我就可以执行while循环,循环直到主类中的列表为空 这就是我现在掌握的代码,我试着从普通车上扩展流量,但没有成功,我被卡住了。我该怎么解决这个问题?

  • 我想访问另一个类的列表,然后把它放在我的对象中。 包含列表的第一个类。 从第一类访问列表的第二类。 当我使用时,它不会返回任何类似于空列表的内容,并且不会在应用程序上显示任何内容。

  • 我是java新手,我不知道如何从另一个类访问变量 我正在尝试编写一个代码来发送带有未存储在本地的附件的邮件。我想访问SendMail类中ExcelFile类中编写的变量 如何在另一个类中访问excelFileAsByte并发送邮件而不将其存储在本地。我可以使用addBodyPart和ByteArrayResource将文件添加为附件吗。