【问题标题】:Add SWT widget Group when a checkbox is selected选中复选框时添加 SWT 小部件组
【发布时间】:2014-03-17 05:43:37
【问题描述】:

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

我在复选框中添加了一个 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 信息,则演示我的场景的小代码 sn-p 很好。

![下面是我正在创建的 gui。当复选框为捕获准备存档被选中时,我希望多选列表应该出现在复选框的正下方,并且在取消选中时它应该消失。目前,当它被选中时出现多选列表,但它隐藏了包含源的其他组模型][1]

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

【问题讨论】:

    标签: java checkbox swt


    【解决方案1】:

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

    Control control = .. create control ...
    
    GridData data = new GridData(flags);
    data.exclude = true;
    control.setLayoutData(data);
    
    control.setVisible(false);
    

    当您想让控件可见时,请将 exclude 标志设置为 false,使控件可见并在父 Composite 上调用 layout()

    GridData data = (GridData)control.getLayoutData();
    data.exclude = false;
    
    control.setVisible(true);
    
    parentComposite.layout();
    

    【讨论】:

    • 我添加了您告诉的代码,但仍然无法动态添加小部件 :( :(
    • 你不添加它,你让它可见或不可见。显示您的代码
    • 我可以在选中复选框时使其可见和不可见。但我现在面临新的问题。当复选框被选中时,多选列表被添加到 gui。但是之前存在的另一个组件现在不可见。我猜是因为尺寸。当我取消选中该复选框时,我的 multilpe 列表关闭并且另一个小部件可见。
    • 我现在也能得到这种行为。在上述语句之后,我只需要在父 shell 上调用 pack() 即可。谢谢
    猜你喜欢
    • 1970-01-01
    • 2016-12-11
    • 2018-08-23
    • 2014-01-26
    • 1970-01-01
    • 1970-01-01
    • 2017-08-03
    • 2015-03-21
    • 1970-01-01
    相关资源
    最近更新 更多