GWT / GXT容器呈现位置问题

时间:2018-02-23 08:49:06

标签: gwt gxt

在尝试将绝对定位的Horizo​​ntalContainer插入其他容器时,我遇到了奇怪的问题。如果兄弟姐妹仍然被渲染(有一个面具设置),这个绝对容器会推动他的下一个兄弟的宽度。

示例:

//parent container, holding all the widgets
HorizontalLayoutContainer hlc;

//widgets that are inserted into hlc container from the start
HBoxLayoutContainer hbox1;
HBoxLayoutContainer hbox2;
HBoxLayoutContainer hbox3;

//container that's inserted into hlc onMouseOver event. It can be inserted while hlc hboxes are still being rendered
HorizontalLayoutContainer panelContainer = new HorizontalLayoutContainer(); 
panelContainer.getElement().getStyle().setZIndex(13);
panelContainer.getElement().getStyle().setPosition(Position.ABSOLUTE);
panelContainer.getElement().getStyle().setWidth(55, Unit.PX);
panelContainer.getElement().getStyle().setHeight(18, Unit.PX);
panelContainer.getElement().getStyle().setFloat(Float.LEFT);

现在让我们假设一个用户将鼠标悬停在hlc容器上,该容器有hboxes1-3,但是其中一些容器有一个掩码集(数据仍在加载),如hbox1.mask()。 onMouseOver事件panelContainer被插入到hlc:

hlc.insert(panelContainer, 0, new HorizontalLayoutData(55, 18));

但是,由于仍在渲染hbox,因此panelContainer将hbox1向右推55px(长度)。即使它有position:absolute;

                left:55px; should be left: 0px;
                -->
|panleContainer|hbox1|hbox2|hbox3| 

有任何建议我应该如何正确插入panelContainer?为什么忽略绝对定位?

注意:

如果我等待渲染hbox,正确插入panelContainer,不会推送hbox1。

澄清以避免xy问题:

简短摘要:添加一个绝对定位的框(为了清晰起见,我们称之为DragBox),它具有预定义的宽度到现有容器(WidgetBox)。 WidgetBox是一个Horizo​​ntalLayoutContainer,它有2个或3个HBoxLayoutContainer。 WidgetBox子级(HBoxLayoutContainers)的宽度为百分比。示例:如果WidgetBox有2个子节点,它们的宽度为0.3和0.7,如果是3个子节点,则宽度为0.3,0.4,0.3;

WidgetBox的大小由其父级(SimpleContainer-> VerticalLayoutContainer-> WidgetBox)决定。

期待:当鼠标悬停在任何WidgetBox容器上时,会添加一个新项目(DragBox)作为WidgetBox的第一个元素。无论如何它不应该影响WidgetBox子节点。它应该充当绝对(在WidgetBox边界内)框。

结果:如果强制WidgetBox或其父级布局(通过forceLayout()),则DragBox会影响第一个WidgetBox子级。如果未使用forceLayout(),则DragBox不会影响WidgetBox子项。

0 个答案:

没有答案