当标题太多时,StackLayoutPanel没有更多的地方展示孩子了......我怎么能解决这个问题?
我的程序结构是
DockLayoutPanel: 东, 才子, 中心----> ScrollPanel ----> StackLayoutPanel
在中间我有一个StackLayoutPanel,问题出在我放的时候 堆栈中的标题很多没有地方可以打开和滚动不 将它们的大小更新为已打开的标题的子项(如果有) 空间并且超出范围。
知道他怎么能为中心做到总能带着 scrollpanel甚至是stacklayoutpanel的儿子打开?因为正如我所说,如果 我把很多东西放在我的StacklayoutPanel标题中,没有地方可供你使用 打开并尽可能将它包装在一个滚动面板到StackLayoutPanel 空间来调整包含它的滚动的大小。
问候 杰罗。
答案 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。以更灵活的方式做到这一点会很好..但现在就是你得到的!
问候! 杰罗。