0

我有 SWT 应用程序(Shell),有一些复合材料:菜单栏在复合材料内,我还有第二个包含各种元素的复合材料。

从我的菜单栏的动作监听器中,我想访问第二个组合的元素之一。

目前,我通过这样做找到了我的复合材料。有没有更好/更简单的方法?

Control[] appComposites;
appComposites = parent.getChildren();
Composite remoteFile;
for(int i=0; i<appComposites.length;i++){
    if(appComposites[i].toString().compareTo("RemoteFile {}") == 0){
        remoteFile = (Composite) appComposites[i];
    }
}
//Now I must make another loop inside remoteFile to find the element that I need ...
4

1 回答 1

0

您可以使用该方法Widget#setData(Object)将标识信息添加到Widgets。

这是一个例子:

public static void main(String[] args)
{
    Display display = new Display();
    final Shell shell = new Shell(display);
    shell.setText("StackOverflow");
    shell.setLayout(new GridLayout(2, true));

    Listener listener = new Listener()
    {
        @Override
        public void handleEvent(Event arg0)
        {
            Widget widget = arg0.widget;

            System.out.println(widget.getData().equals("Button 1");
        }
    };

    for(int i = 0; i < 10; i++)
    {
        Button button = new Button(shell, SWT.PUSH);
        button.setText("Button " + i);
        button.setData("Button " + i);

        button.addListener(SWT.Selection, listener);
    }

    shell.pack();
    shell.open();
    while (!shell.isDisposed())
    {
        if (!display.readAndDispatch())
            display.sleep();
    }
    display.dispose();
}

要确定Widget您正在查看的是否是您正在搜索的内容,您可以使用:

widget.getData().equals("YOUR IDENTIFIER");
于 2013-07-07T12:48:46.000 回答