选中复选框后添加SWT窗口小部件组

时间:2014-03-17 05:43:38

标签: java checkbox swt

我有一个有3个不同部分的GUI。在其中一个部分我有2个复选框。 当选中其中一个复选框时,我想再添加一个小部件多选列表。

我在checkbox中添加了一个selectionListener,当它被选中时,我正在调用创建多个选择列表的方法。

问题是,当选中复选框时,此列表未在GUI中添加,并且在未选中复选框时不会删除该列表。

我无法找到原因。有人能帮助我吗?

以下是添加多选列表的代码

private void createFirstLevelSubFolderGroup() {
    GridData gridData = new GridData();
    gridData.grabExcessVerticalSpace = true;
    gridData.verticalAlignment = org.eclipse.swt.layout.GridData.FILL;
    gridData.horizontalAlignment = org.eclipse.swt.layout.GridData.FILL;
    gridData.grabExcessHorizontalSpace = true;
    subFolderGroup = new Group(this, SWT.NONE);        
    subFolderGroup.setLayout(new FillLayout());
    subFolderGroup.setLayoutData(gridData);
    subFolderGroup.setText("First Level SubFolder");           
    firstLevelFolderList = new List(subFolderGroup, SWT.V_SCROLL | SWT.MULTI);  
    subFolderGroup.setVisible(true);
    //firstLevelFolderList.setVisible(false);

 } 

 //code where the call to add this list is there
 //code adding a checkbox is here  and below am adding a listener to that checkbox
 ArchiveCheckbox.addSelectionListener(new SelectionAdapter()
    {
        @Override
        public void widgetSelected(SelectionEvent e)
        {
           if (ArchiveCheckbox.getSelection()) {  
           // here am trying to call the method which adds multiple selection list
           createFirstLevelSubFolderGroup();                                   
          }         
          else {
            // I want to remove that widget
           subFolderGroup.setVisible(false);                    
           firstLevelFolderList.removeAll();                    
         }
      }
    }

基本上我无法动态添加它。

如果我提供的代码没有req信息,那么演示我的场景的小代码片段就可以了。

![以下是我正在创作的gui。当选中复选框准备存档以进行捕获时,我希望复选框下方应出现一个多选列表,并且在取消选中时它应该会消失。目前,当检查多个选择列表时,它会隐藏另一个包含来源的组模型[1]

[2]: http://i.stack.imgur.com/Xl2ml.png

1 个答案:

答案 0 :(得分:1)

在开始时创建所有控件。在要隐藏的每个控件上设置GridData布局,并将exclude标志设置为true,并使控件不可见。如下所示:

Control control = .. create control ...

GridData data = new GridData(flags);
data.exclude = true;
control.setLayoutData(data);

control.setVisible(false);

如果要使控件可见,请将exclude标记设置为false,使控件可见,并在父layout()上调用Composite

GridData data = (GridData)control.getLayoutData();
data.exclude = false;

control.setVisible(true);

parentComposite.layout();