首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Java SWT:取消选中复选框时执行的撤消操作

Java SWT:取消选中复选框时执行的撤消操作
EN

Stack Overflow用户
提问于 2017-02-02 05:14:45
回答 2查看 40关注 0票数 0

我有两个复选框被设置为类似于单选按钮的功能(我使用了复选框,以便它们都可以缺省为.setSelection(false)),当它们被选中时,它们会启动一个for循环,用适用的复选框填充4个组合。我的问题是,我找不到一种方法来清空组合或撤消在取消选择按钮时执行的操作。

代码语言:javascript
运行
复制
    final Button button = new Button(headerGroup, SWT.CHECK);
    button.setText("Label");

    Group group = new Group(shell, SWT.NONE);
    group.setText("Group 2");
    group.setLayout(new GridLayout(1, false));
    GridData groupData = new GridData(SWT.FILL, SWT.FILL, true, false);
    groupData.heightHint = 100;
    groupData.widthHint = 150;
    group.setLayoutData(groupData);

    ScrolledComposite scrolledComposite = new ScrolledComposite(group, SWT.V_SCROLL);
    scrolledComposite .setLayout(new GridLayout(1, false));
    scrolledComposite .setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));

    Composite composite = new Composite(scrolledComposite, SWT.NONE);
    composite .setLayout(new GridLayout(1, false));
    composite .setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));

    button.addListener(SWT.Selection, new Listener()
    {
        @Override
        public void handleEvent(Event arg0){

            boolean valueButton;
            balueButton = button.getSelection(); 

            if(valueButton == true){

                List<Button> buttons = new ArrayList<Button>();
                String labels[] = {"A", "B", "C", "D", "E", "F"};
                // This is the for loop that I want to undo/delete when
                // button is deselected
                for (int i = 0; i < labels.length; i++) {
                    Button buttonLoop = new Button(composite, SWT.CHECK);
                    buttonLoop.setText(labels[i]);
                    buttons.add(buttonLoop);
                }
            }
        }
    });

是否有一种方法可以在取消选择button时不显示for循环中的复选框来重新初始化composite

谢谢你的帮助!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-02-02 05:24:58

只需处理掉不再需要的Button控件即可。

您只需查看该组合的子项即可:

代码语言:javascript
运行
复制
Control [] children = composite.getChildren();

for (Control child : children) {
  if (child instanceof Button && !child.isDisposed()) {
    child.dispose();
  }
}

您可能还需要调用composite.layout(true)来更新布局。

票数 1
EN

Stack Overflow用户

发布于 2017-02-02 05:25:09

为了释放内存,您必须释放小部件。然后,您可以像以前一样创建组合:

代码语言:javascript
运行
复制
composite.dispose();
composite = new Composite(scrolledComposite, SWT.NONE);
composite.setLayout(new GridLayout(1, false));
composite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41989880

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档