我正在使用WindowBuilder for Eclipse构建一个使用SWT的GUI。当您在WindowBuilder中将小部件拖放到shell上时,会自动生成源代码。但是,所有窗口小部件对象都在createContents
函数中声明。以下是该功能的摘录:
Button btnStartServer = new Button(shlTest, SWT.NONE);
btnStartServer.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
// how to access serverStateDisplay right here?
// I have access to shlTest (my Shell object), though
}
});
btnStartServer.setText("Start Server");
Canvas serverStateDisplay = new Canvas(shlTest, SWT.NONE);
正如你所看到的,我有一个选择监听器,当我点击一个按钮时会触发它。现在,我该如何访问画布?显而易见的解决方案,简单地写serverStateDisplay.doWhatever()
是行不通的。
我发现this SO question基本上要求同样的事情。但是,唯一的解决方案是在侦听器之前声明引用的窗口小部件,或者将其声明为类实例变量。
这对我来说并不令人满意,因为我用WindowBuilder构建了我的UI。 WB不能自动为我做这个吗?因为当应用程序增长时,手动更改每个小部件声明会非常不舒服。
主循环也是如此。通过在createContents
函数内声明的小部件,一旦函数终止,它们就无法访问。