Java SWT : Undoing actions performed when checkbox is unselected

标签 java for-loop checkbox swt

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

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

有没有办法在取消选择按钮时重新初始化composite,而无需for循环中的复选框?

感谢您的帮助!

最佳答案

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

您只需查看 Composite 的子项即可做到这一点:

Control [] children = composite.getChildren();

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

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

关于Java SWT : Undoing actions performed when checkbox is unselected,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41989880/

相关文章:

checkbox - Laravel:点击标签不设置复选框

java - 有没有更短的方法来写这个?

java - 如何遍历目录中的文件及其在 Java 中的子目录?

Java迭代嵌套 map

python - PyQt 和 Python 中的复选框出现问题

javascript - 带复选框的嵌套 ng-repeat

JAVA冒泡排序运行时问题

java - 了解 "APPARENT DEADLOCK!!! Complete Status"详细信息

python - 什么是IndexError?我不断得到它

C++ 循环展开性能差异(Project Euler)