StackPanel

时间:2015-05-26 05:54:51

标签: java gwt

我正在开发基于GWT的图形用户界面。我根本不是GUI和GWT的专家。这样,我正在做的是在while循环中创建一个StackLayoutPanel,如下所示:

while(mainIterator.hasNext()){
    stackLayoutPanel.add(internalVerticalPanel, sZone, 30);
}

我省略了internalVerticalPanel对象的信息,虽然基本上是标签和Horizo​​ntalPanels。

但是,此internalVerticalPanel并不总是包含相同数量的对象,因此,每次迭代的大小都不同。然后,在显示信息时,我注意到StackPanel的总大小除以包含的标题或元素的数量。我想要做的是确定每个标头的大小,以便调整VerticalPanel内容的大小。我的意思是,我希望每个元素都具有与内容相关联的大小,而不是具有相同大小的元素。可能吗?如果是这样,怎么样?

编辑 :我已经执行了回复中给出的建议,但这不是解决方案。正如您在附图中看到的那样,更改的是标题的大小,但我想保留标题并修改内部内容的大小。现在,internalVerticalPanel隐藏在标题后面。

enter image description here

在以下两个方面,你可以看到两个例子,一个是要显示的数据,另一个是固定好的,同时在第二个例子中没有数据和一个很大的空白空间。我想根据要绘制的可用数据调整这些空间的大小。

enter image description here

enter image description here

提前致谢

1 个答案:

答案 0 :(得分:0)

我没有在运行时检查过这个,但在我看来你可以做到

int myDesiredHeight = 0;    
while(mainIterator.hasNext()){
    stackLayoutPanel.add(internalVerticalPanel, sZone, 30);
    myDesiredHeight += 30;
}
stackLayoutPanel.setHeight(myDesiredHeight + "px");

这样,您可以调整stacklayoutpanel的大小以容纳内容。 关于标题的不同大小,我认为这种类型的面板接受自定义标题或安全html,因此您应该能够非常轻松地设置标题样式,例如使用此方法(StackLayoutPanel,GWT 2.7中的第168行):

public void add(final Widget widget, SafeHtml header, double headerSize) {...}

编辑:您可以尝试以下方式:

StackLayoutPanel stackLayoutPanel = new StackLayoutPanel(Style.Unit.PX);

VerticalPanel myWidget1 = new VerticalPanel();
SafeHtml myHeader1 = SafeHtmlUtils.fromSafeConstant("My header 1 title");

VerticalPanel myWidget2 = new VerticalPanel();
SafeHtml myHeader2 = SafeHtmlUtils.fromSafeConstant("My header 2 title");

stackLayoutPanel.add(myWidget1,myHeader1,100);
stackLayoutPanel.add(myWidget2,myHeader2,50);

// and so on