Java:来自线程的另一个类中的Access按钮

时间:2016-04-09 04:56:55

标签: java multithreading swing

我有class1和class2。 Class1是一个UI,class2对UI进行了更改。 Class2如下所示。

1)是否有办法允许整个class2使用class1的对象(JButton btnStartFullBuild, JButton btnShutdownServer等)

2)如何允许线程更改Class1中按钮的背景颜色 (使用:btnShutdownServer.setBackground(Color.blue);

package examples;
import java.awt.Color;

import javax.swing.JButton;

public class Class2 {

    public static void shutdownServer(JButton btnStartFullBuild, JButton btnShutdownServer) {
// This works
        btnShutdownServer.setBackground(Color.blue);
// This works when passing text, but I cant modify other classes buttons
        new ThreadTest("Can I modify a button?").start();
    }


}
class ThreadTest extends Thread {
    public ThreadTest(String str) {
        super(str);
    }

    public void run() {
        for (int i = 0; i < 5; i++) {
            System.out.println("Loop " + i + ": " + getName());
            try {
                sleep((int) (Math.random() * 2000));

            } catch (InterruptedException e) {
            }
        }
    }
}

1 个答案:

答案 0 :(得分:1)

是的,但你可能不想,因为Class2可以做你不想要的各种令人讨厌的事情,比如删除按钮和其他组件

更好的解决方案是使用Observer Pattern允许Class2生成感兴趣的各方可以回复的通知。

此外,Swing不是线程安全的,因此在尝试从EDT上下文之外修改UI的状态时要小心。

请查看Concurrency in Swing了解更多详情和其他可能的选项,例如SwingWorkerPropertyChange}支持