当标题太多时,StackLayoutPanel没有更多地方展示孩子......我怎么能解决这个问题?

时间:2010-12-02 11:00:27

标签: gwt

当标题太多时,StackLayoutPanel没有更多的地方展示孩子了......我怎么能解决这个问题?

我的程序结构是

DockLayoutPanel: 东, 才子,  中心----> ScrollPanel ----> StackLayoutPanel

在中间我有一个StackLayoutPanel,问题出在我放的时候 堆栈中的标题很多没有地方可以打开和滚动不 将它们的大小更新为已打开的标题的子项(如果有) 空间并且超出范围。

知道他怎么能为中心做到总能带着 scrollpanel甚至是stacklayoutpanel的儿子打开?因为正如我所说,如果 我把很多东西放在我的StacklayoutPanel标题中,没有地方可供你使用 打开并尽可能将它包装在一个滚动面板到StackLayoutPanel 空间来调整包含它的滚动的大小。

问候 杰罗。

2 个答案:

答案 0 :(得分:1)

您必须明确更改StackLayoutPanel的大小。你必须自己计算这个尺寸。

例如,如果每个标题高40像素,并且您希望显示的子(儿子)显示200像素,则可以调用stackLayoutPanel.setHeight((40*numChildren + 200)+"px");

如果你希望它在滚动之前占用所有可用空间,你必须在计算中变得更加漂亮,但这是一个灵活的计划!

答案 1 :(得分:0)

幸运的是我可以解决它..问题必须做到以下几点。

1)停留架构如下:

DockLayoutPanel - > ScrollPanel - > VerticalPanel ---> CustomStackLayoutPanel。

(使用Basic布局与LayoutPanel ScrollPanel兼容,因为LayoutPanel ScrollPanel似乎不兼容。)

2)方法:Animated(int)就是这样。

private boolean isSetFirstHeight = false;
private double totalHeightHeader = 0;

private void animate(int duration) {

    if (layoutData.size() == 0) {
        return;
    }

    double top = 0, bottom = 0;
    int i = 0;

    for (; i < layoutData.size(); ++i) {

        if (top != 0)
            top += padingWidget;

        LayoutData data = layoutData.get(i);
        layoutPanel.setWidgetTopHeight(data.header, top, unit, data.headerSize, unit);

        top += data.headerSize;

        layoutPanel.setWidgetTopHeight(data.widget, top, unit, 0, unit);
        //Seteamos la altura con los combos cerrados por única vez
        if (i + 1 == layoutData.size() && !isSetFirstHeight) {
            isSetFirstHeight = true;
            layoutPanel.setHeight(top + "px");
            totalHeightHeader = top;
        }

        if (i == selectedIndex) {
            break;
        }
    }

    // TODO: JC Es para que cuando comienze no este abierto
    if (selectedIndex == -1 && openFirstDefault) {
        selectedIndex = 0;
    } else if (selectedIndex == -1 && !openFirstDefault) {
        return;
    }

    for (int j = layoutData.size() - 1; j > selectedIndex; --j) {
        bottom += padingWidget;
        LayoutData data = layoutData.get(j);
        layoutPanel.setWidgetBottomHeight(data.header, bottom, unit, data.headerSize, unit);
        layoutPanel.setWidgetBottomHeight(data.widget, bottom, unit, 0, unit); // aca achica al componente hijo que
                                                                                // es el la variable "widget"
        bottom += data.headerSize;
    }

    this.layoutDataSelected = layoutData.get(selectedIndex);

    //Setea la altura del panel de combo calculando la altura del hijo también, lo hace por única vez
    if (spacingButtonWorkAround && layoutDataSelected != null) {
        spacingButtonWorkAround = false;
        //TODO: esto de ver que sea compatible para otros widget y no reviente si no es un CheckListWidget
        double heightChild = ((CheckListWidget)layoutDataSelected.getWidget()).getCantidadDeFilasOcupadas() * hightRowChildWidget;  
        double heightWithChild = totalHeightHeader + heightChild;
        layoutPanel.setHeight(heightWithChild + "px");
    }


    layoutPanel.setWidgetTopBottom(layoutDataSelected.widget, top, unit, bottom, unit);

    layoutPanel.animate(duration);

}

Object-Child,我询问列数,并从StackLayoutPanel中我想要的那个高度seteandole数据,计算可以拥有的高度。事实是,这是实施它的最佳方式,但现在是menera。以更灵活的方式做到这一点会很好..但现在就是你得到的!

问候! 杰罗。