为什么HTMLPanel不允许添加(Widget)?

时间:2010-06-20 00:19:25

标签: java gwt widget

HTMLPanel从add(Widget)继承com.google.gwt.user.client.ui.Panel方法,但不会覆盖它。这会在调用时导致UnsupportedOperationException。

如果它像FlowPanel一样覆盖它会有任何问题吗?

@Override
public void add(Widget w) {
  add(w, getElement());
}

背景:HTMLPanel的构造速度可以比FlowPanel(innerHTML与DOM操作)更快。但是在构建之后,它目前不允许动态添加元素 *

*除了不太有用的方法add(Widget widget, String id),这使得无法在文档中使用HTMLPanel两次。

3 个答案:

答案 0 :(得分:3)

我不确定不包括琐碎的覆盖背后的理由,但如果您愿意,可以自己致电add(Widget, Element)

我认为HTMLPanel的一个想法是你可以在面板的DOM中的任何地方添加一个小部件,因此它需要add()方法来强制你指定添加小部件的确切位置。这样,您可以使用一些复杂的html构建HTMLPanel:"<div>...<div id="container"/>...<div>",然后调用add(myWidget, "container")

btw:add(Widget w, String id)只是一种方便的方法。它不会创建带有id的新元素,但会使用id查找元素并调用add(Widget, Element)

答案 1 :(得分:1)

自2010年12月17日r9462中添加到HTMLPanel的方法。

答案 2 :(得分:0)

关于add(Widget小部件,String id) - 此方法仅适用于HTMLPanel中定义的元素 - 如javadoc中所述(我还在我的机器上验证过)。

我如何理解它来自javadoc addAndReplaceElement(Widget小部件,java.lang.String id)将适用于任何元素但仍会将新小部件附加到HTMLPanel(基本上HTMLPanel将处理事件,而小部件物理位置将被确定通过删除元素的位置)。