【发布时间】:2010-06-03 19:40:40
【问题描述】:
我有一个使用 SWT 作为工具包的 Java 应用程序,我已经厌倦了更新 GUI 元素所需的所有丑陋样板代码。
只是为了设置一个禁用的按钮启用我必须经历这样的事情:
shell.getDisplay().asyncExec(new Runnable() {
public void run() {
buttonOk.setEnabled(true);
}
});
我更喜欢让我的源代码尽可能地平坦,但我需要高达 3 个缩进级别才能做一些简单的事情。
有什么方法可以包装它吗?我想要这样的课程:
public class UIUpdater {
public static void updateUI(Shell shell, *function_ptr*) {
shell.getDisplay().asyncExec(new Runnable() {
public void run() {
//Execute function_ptr
}
});
}
}
而且可以这样使用:
UIUpdater.updateUI(shell, buttonOk.setEnabled(true));
这样的东西对于隐藏 SWT 似乎认为有必要做任何事情的可怕混乱非常有用。
据我了解,Java 不能做函数指针。但是 Java 7 会有一个叫做 Closures 的东西,这应该是我想要的。但与此同时,我能做些什么来将函数指针或回调传递给另一个要执行的函数吗?
顺便说一句,我开始认为在 Swing 中重做这个应用程序是值得的,而且我不必忍受这种丑陋的废话和 SWT 的非跨平台性。
【问题讨论】:
-
我希望你知道,Swing 也是单线程的。因此,您必须像在 SWT 中一样从另一个线程更新 GUI 元素。唯一的区别是当您从错误的线程调用 Swing 方法时,Swing 不会抛出异常。但是当你犯了这个错误时,你会在你的应用中看到很多奇怪的错误。
标签: java user-interface swt