有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何在GWT中清除根面板?

我不熟悉Java和GWT。 据我所知,GWT的概念不是在页面之间导航 而是使用相同的RootPanel并更改其中的内容。 我的问题是,如果我在RootPanel中添加了一些小部件,并且将它们与浏览器元素关联,那么该如何做。 例如:

RootPanel.get("sendButtonContainer").add(sendButton);
RootPanel.get().clear();

在此代码之后,sendbutton仍然出现在RootPanel

我们将不胜感激


共 (6) 个答案

  1. # 1 楼答案

    试着这样做:

    RootPanel rootPanel = RootPanel.get();
    rootPanel.get().add("yourButton");
    rootPanel.clear();
    
  2. # 2 楼答案

    这里的问题是根面板。get()。clear()只能删除通过GWT添加到其中的小部件。您的“sendButtonContainer”不是通过GWT添加的,而是从html页面添加的。sendButton也没有添加到根面板,因此也没有删除它

    如果只想删除发送按钮,可以调用RootPanel.get("sendButtonContainer").clear()

    如果你想清除整个根面板,包括sendButtonContainer,你必须明确地将sendButtonContainer(以及其他所有内容)作为一个小部件添加到根面板中。有些方法可用于使用小部件包装html主机页上的元素

    如果可能的话,如果您完全从GWT中构建整个页面,并将宿主html页面保留为空白,那么这一切都会容易得多。UiBinder使继续使用HTML变得相对简单,但要在GWT的框架内使用

  3. # 3 楼答案

    您应该尝试清洁您将小部件连接到的容器:

    RootPanel.get("sendButtonContainer").clear()
    
  4. # 4 楼答案

    RootPanel.get("id_of_element_already_in_html").getElement().removeFromParent();
    
  5. # 5 楼答案

    上面的一些答案已经解决了您的问题,但我想您之所以会遇到这个问题,首先是因为您混淆了GWT小部件和HTML元素。如果你做得不对,这会让你头疼

    问题的关键在于,你的网站总是由HTML元素组成,你可以通过修改你的主页来编辑这些元素。html页面,创建GWT小部件并将其添加到其他小部件或面板,手动编写现有元素的innerHTML等。CSS也将按预期应用于这些元素

    那么GWT小部件呢?它们基本上是包装底层元素的代码单元,可以创建底层元素,也可以包装现有元素。这些包装器在比普通元素更高的级别上工作,比如说在逻辑级别上。因此,它们有自己的逻辑层次结构,可能不同于HTML层次结构

    例如,假设您将标签添加到水平面板。从逻辑上讲,标签是面板的子级,如果调用clear,它将被删除。现在,如果你深入研究DOM结构,你会发现一个<;表>;具有<;tr>;元素,该元素又有一个<;td>;元素,该元素又有一个<;部门>;元素(由标签包装),该元素又包含标签文本。看看层次结构有什么不同

    所以,回到你的实际问题:根面板。get()。清除();将删除GWT小部件层次结构中的任何逻辑子项,在您的情况下不会删除任何内容,因为您已将按钮添加到另一个面板(“sendButtonContainer”)。在HTML层次结构中,sendButtonContainer可能是主RootPanel的子元素,这一事实是无关的和独立的。当然,你可以通过RootPanel来消除别人所说的一切。get()。getElement()。setInnerHTML(“”);它在dom级别工作。你的小部件可能仍然存在并且可以访问,但它们不会出现在文档中

  6. # 6 楼答案

    我知道这个问题很古老,但也许这就是你想要的答案:

    RootPanel.get("sendButtonContainer").clear();
    RootPanel.get().clear();
    RootPanel.get().getElement().setInnerHTML(""); // <-- This is the key!
    

    这将删除根面板中的所有内容,或get()函数中通过id指定的任何其他div:

    • 在要清除的根面板中,必须首先在添加了小部件的任何其他根面板上调用GWT clear()。否则,这些小部件将在下一步成为孤立的,您将遇到异常

    • 然后,第三行从根面板中删除任何HTML。这包括您的GWT应用程序所基于的网页中包含的任何HTML,以及GWT添加的任何HTML,如果您正确执行了第一步,那么现在就不应该剩下任何HTML,否则,您将遇到前面提到的问题

    希望这有帮助

    顺便说一句:使用GWT的好选择!;)