Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/350.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何处理复合对象的所有子对象?_Java_Swt_Dispose_Composite - Fatal编程技术网

Java 如何处理复合对象的所有子对象?

Java 如何处理复合对象的所有子对象?,java,swt,dispose,composite,Java,Swt,Dispose,Composite,我有一个 Composite descComp 里面有些东西。。。基本上,它是一个表单的容器,由多个标签、组合和按钮组成,所有标签、组合和按钮排成一行。 我的表单不是有限的,我有一个按钮,可以为额外的输入添加一行。然而,为了实现这一目标,我必须处理掉我的孩子们 private void populateConstantMain(ContentData tariffConstantsOfType, Composite descComp,GridLayout descCompLayout, Boo

我有一个

Composite descComp
里面有些东西。。。基本上,它是一个表单的容器,由多个标签、组合和按钮组成,所有标签、组合和按钮排成一行。 我的表单不是有限的,我有一个按钮,可以为额外的输入添加一行。然而,为了实现这一目标,我必须处理掉我的孩子们

private void populateConstantMain(ContentData tariffConstantsOfType, Composite descComp,GridLayout descCompLayout, Boolean resize) {

    int arraySize;

    if (resize == false) {
        arraySize = tariffConstantsOfType.getQueryRowCount();
    } else {
        for (int i = 0 ; i < descComp.getChildren().length; i++) {
            System.out.println("Disposing: " + i + " " + descComp.getChildren()[i].toString());
            //descComp.getChildren()[i].setEnabled(false);
            descComp.getChildren()[i].dispose();
        }
        arraySize = tariffConstantsOfType.getQueryRowCount() + 1;
    }
......
}
不起作用,这意味着它不会处理所有子项,这会导致插入新子项时出错,从而破坏布局:/n有趣的是

descComp.getChildren()[i].setEnabled(false);

当我取消注释时,对所有孩子都有效

我有一种预感,在复合上调用getChildren()只会在调用它时返回未处理的子对象。所以调用
descComp.getChildren()[i].dispose()会变得一团糟。你为什么不试试:

    for (Control control : descComp.getChildren()) {
        control.dispose();
    }
这样,在开始处理组合中的每个子对象之前,您可以获得该子对象的静态视图

我还将代码切换为对每种语法使用更好的J5。如果卡在J1.4上,则不幸的是,您需要坚持(;;)
循环:

    Control[] children = descComp.getChildren();
    for (int i = 0 ; i < children.length; i++) {
        children[i].dispose();
    }
Control[]children=descComp.getChildren();
for(int i=0;i
我有一种预感,在调用组合时,对组合调用getChildren()只返回未处理的子对象。所以调用
descComp.getChildren()[i].dispose()会变得一团糟。你为什么不试试:

    for (Control control : descComp.getChildren()) {
        control.dispose();
    }
这样,在开始处理组合中的每个子对象之前,您可以获得该子对象的静态视图

我还将代码切换为对每种语法使用更好的J5。如果卡在J1.4上,则不幸的是,您需要坚持(;;)
循环:

    Control[] children = descComp.getChildren();
    for (int i = 0 ; i < children.length; i++) {
        children[i].dispose();
    }
Control[]children=descComp.getChildren();
for(int i=0;i
在处理子对象(或数组中的任何对象)时,我使用for下一个循环,但从头到尾进行,而不是从头到尾。(并获取循环或其更改之前的长度。)

否则,您将删除每一个循环。

在处理子循环(或数组中的任何内容)时,我使用for next循环,但从头到尾进行,而不是从头到尾。(并获取循环或其更改之前的长度。)


否则,您将删除所有其他按钮。

伙计,我仍然会得到运行时异常:D在我的情况下,我正在重置/重新填充组合中的单选按钮
。知道吗?@campa抱歉,不知道,没有足够的细节。你需要问一个单独的问题。伙计,我还是得到了运行时异常:在我的情况下,我正在重置/重新填充组合中的单选按钮。知道吗?@campa抱歉,不知道,没有足够的细节。你需要问一个单独的问题。