当前位置: 首页 > 知识库问答 >
问题:

从另一个类访问GUI组件

万俟棋
2023-03-14

我是爪哇的新手,遇到了困难。我想从另一个类访问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);
    }
}

共有3个答案

康弘义
2023-03-14

访问这些文本区域的最佳选择是为它们创建一个get方法。像这样的东西:

public JTextArea getTextAreaClients(){
    return this.textAreaClients;
}

另一个也一样。所以要从另一个类访问它:

GUI gui = new GUI();
gui.getTextAreaClients();

无论如何,您需要在任何想要使用gui对象的类中对其进行引用,或者从创建gui对象的类中对其进行引用。

编辑 ---------------------------------------

要从GUI获取文本区域到服务器,您可以在Create-Server中执行这样的操作。

GUI gui = new GUI();
Server server = new Server();

server.setTextAreaClients(gui.getTextAreaClients());

为此,您应该在服务器内部包含一个JTextArea字段,以及setTextAreaClients方法,该方法如下所示:

JTextArea clients;

public void setTextAreaClients(JTextArea clients){
    this.clients = clients;
}

因此,通过这种方式,您将从gui中获得对JTextArea的引用。

韩恺
2023-03-14

有几种可能的方法:

>

  • 标识符gui是对您的GUI实例的引用。您可以将gui传递给任何需要的类,只要您尊重事件调度线程。根据需要将公共访问器方法添加到GUI。

    声明,如JTextArea文本区域客户端具有包私有的可访问性。它们可以从同一个包中的其他类中引用。

    使用PropertyChangeListener,安排文本区域接收来自另一个类的事件,如下所示。

  • 何灼光
    2023-03-14

    首先要遵守封装规则。将你的字段设置为私有。接下来,您需要为需要访问的字段设置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();
        }
    }
    
     类似资料:
    • 我是爪哇的新手,遇到了困难。我想从另一个类访问GUI组件(在一个类中创建)。我正在从一个类创建一个新的GUI类,就像这样; 我可以访问该类中的组件,但当我转到其他类时,我无法访问。我真的需要访问来更新它们的内容。有人能给我指一下正确的方向吗?非常感谢您的帮助。 类:

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

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

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