我有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) {
}
}
}
}
答案 0 :(得分:1)
是的,但你可能不想,因为Class2
可以做你不想要的各种令人讨厌的事情,比如删除按钮和其他组件
更好的解决方案是使用Observer Pattern允许Class2
生成感兴趣的各方可以回复的通知。
此外,Swing不是线程安全的,因此在尝试从EDT上下文之外修改UI的状态时要小心。
请查看Concurrency in Swing了解更多详情和其他可能的选项,例如SwingWorker
(PropertyChange
}支持