我需要访问定义它们的类之外的gui组件。 我的gui类包含以下用于在其上放置对象的代码:
/**
* Create contents of the window.
*/
protected void createContents() {
shlCertificatesmanager = new Shell(Display.getDefault());
shlCertificatesmanager.setSize(450, 300);
shlCertificatesmanager.setText("CertificatesManager");
shlCertificatesmanager.setLayout(new RowLayout(SWT.HORIZONTAL));
MenuItemListener menuListener = new MenuItemListener(shlCertificatesmanager);
Menu menu = new Menu(shlCertificatesmanager, SWT.BAR);
shlCertificatesmanager.setMenuBar(menu);
MenuItem mntmNewSubmenu = new MenuItem(menu, SWT.CASCADE);
mntmNewSubmenu.setText("File");
Menu menu_1 = new Menu(mntmNewSubmenu);
mntmNewSubmenu.setMenu(menu_1);
MenuItem mntmOpenCertificate = new MenuItem(menu_1, SWT.NONE);
mntmOpenCertificate.setText("Open Certificate");
mntmOpenCertificate.addSelectionListener(menuListener);
MenuItem mntmExit = new MenuItem(menu_1, SWT.NONE);
mntmExit.addSelectionListener(menuListener);
mntmExit.setText("Exit");
MenuItem mntmHelp = new MenuItem(menu, SWT.CASCADE);
mntmHelp.setText("Help");
Menu menu_2 = new Menu(mntmHelp);
mntmHelp.setMenu(menu_2);
MenuItem mntmAbout = new MenuItem(menu_2, SWT.NONE);
mntmAbout.setText("About");
mntmAbout.addSelectionListener(menuListener);
Label lblAliasName = new Label(shlCertificatesmanager, SWT.NONE);
lblAliasName.setText("Alias name: ");
Label label = new Label(shlCertificatesmanager, SWT.NONE);
label.setText("___________");
}
现在我需要从外部类访问其中一些组件,在这种情况下,我需要从MenuItemListener类访问两个标签(lblAliasName,label)。
有办法访问它们吗? (或者像使用findViewById方法或类似的Android?)
或者我需要例如以某种方式从其他类访问它们? (创建将由MenuItemListener类和GuiWindow类使用的gui组件的calss)
答案 0 :(得分:2)
我想到了两个选择:
static
字段,然后通过getter方法将其移交。static
)并创建getter方法。当然,另一个类必须知道你的类的实例才能访问这些方法。请记住:
如果您尝试从不是gui-thread的线程更改组件,您将获得值SWTException
的{{1}}。
您可以使用以下方法解决此问题:
ERROR_THREAD_INVALID_ACCESS
答案 1 :(得分:1)
不,没有标准的方法可以做到这一点,你需要像往常一样在Java中使用它们。