找到复合材料的最佳方法是什么?

时间:2013-07-06 23:17:42

标签: java swt composite

我有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 ...

1 个答案:

答案 0 :(得分:0)

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

以下是一个例子:

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");