Java 改变不同类的 GUI

标签 java class actionlistener

所以我的程序有多个类,其中一个类运行后,它会喜欢它,因此它会在主类 GUI 中的文本区域中附加一条“完成”消息

ta.append("Search Complete\n");

这是需要完成的代码

statCl.addActionListener(new ActionListener(){
        public void actionPerformed (ActionEvent e) {
            try {
                ta.append("Searching...\n");
                task.execute();
            } catch (Exception IOE) {}
        }
});

因此它位于实际代码运行的 task 类中。

任何建议或帮助都会很棒,谢谢。

最佳答案

如果task.execute()方法没有在另一个线程中启动操作,那么GUI将被卡住,并且在操作完成之前文本区域中不会出现任何内容。所以你可能只是

ta.append("Searching...\n");
task.execute();
ta.append("Finished");

如果操作在新线程中启动,则该线程应在文本区域中追加,但应确保此追加是在事件调度线程 (EDT) 中完成。因此,您的代码可能如下所示:

public class Task {
    private JTextArea ta;
    public Task(JTextArea ta) {
        this.ta = ta;
    }

    public void execute() {
        Thread t = new Thread(new Runnable() {
            // perform the long operation
            // at the end, update the text area, in the EDT
            SwingUtilities.invokeLater(new Runnable() {
                public void run() {
                    ta.append("finished");
                }
            });
        }
        t.start();
    }
}

您还可以查看SwingWorker ,它就是为此而设计的(以及进度更新等其他事情)。它的 javadoc 类中有一个代码示例,它正是您想要做的事情。

关于Java 改变不同类的 GUI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5029455/

相关文章:

java - 如何在我的应用程序中使用Android默认墙纸裁剪选项来设置墙纸

java - 如何在 Soap Request Java 中设置 header

java - 为什么 JFormattedTextField 不支持 actionPerformed

javascript - 为什么一个外部更新的数组不会自动刷新?

java - Android:类问题

java - RecyclerView 不接受模型中的构造函数

c++ - 在另一个类内存分配中创建一个类

java - 使用单击事件隐藏 JTable 行 [ java ]

java - 未重新绘制的图

Java乘法表GUI,请帮助我前进