【问题标题】:Vaadin - Remove Component from its parentVaadin - 从其父组件中移除组件
【发布时间】:2014-01-15 20:49:24
【问题描述】:

在 Vaadin 框架 (v7.1.9) 中,我们如何从其父级中删除 Component

我只知道removeComponent 函数,但这需要我掌握父级的句柄(丑陋):

ComponentContainer parent = (ComponentContainer) child.getParent();
parent.removeComponent(child);

我试图只 detach 孩子,但将其从“应用程序”中删除,而没有从 UI 中删除 Component

【问题讨论】:

  • 这是这样做的方法。
  • 你为什么觉得这很丑?这就像从集合中删除一个元素(HashSetArrayList...)。
  • 好的,我喜欢 HashSet/ArrayList 比较。但是,在使用 HashSetArrayList 时,您不需要强制转换。 removeCollection 中定义。在 Vaadin 中,removeComponentComponentContainer.. 中定义,但 Component.getParent() 返回一个 HasComponents 对象。对我来说,这要么是 API 的缺陷,要么不是我想做的事情。大家觉得呢?
  • 老实说,我没有检查接口,但这是一个好点。我认为这样做的原因是一些父母正在实施SingleComponentContainer而不是HasComponentsPanel 例如。但我不是只使用它来研究 vaadin。请问您在什么情况下有一个组件但不知道它的父级?
  • 在 Java 集合比较中,如何获取子元素的父集合?这是完全不同的情况。我认为您应该删除布局类中的组件,您只需调用 removeComponent 方法而不进行任何强制转换

标签: java vaadin vaadin7


【解决方案1】:

如果将 Child 添加到 Any Layout,您应该将其强制转换为该布局,例如,如果 child ws 添加到 AbsoluteLayout 然后

AbsoluteLayout parent = (AbsoluteLayout ) child.getParent();
parent.removeComponent(child);

试试这个

【讨论】:

  • 如果这个 Ans 解决了您的问题,请选择它作为 ANS
【解决方案2】:

如果将子元素添加到布局中,则像这样。

Layout parent = ( Layout ) child.getParent();
parent.removeComponent(child)

我认为这比 Mubasher 解决方案更好,因为它独立于实现,我的意思是你不必知道 Parent 布局,如果它改变了代码仍然可以工作。

【讨论】:

  • 出于同样的原因,我的原始代码更好。 ComponentContainer 是最低的接口,是指定removeComponent 的接口,所以它是最健壮的演员表。尽管如此,我还是认为这是一个 Vaadin API 缺陷,根本就需要演员表。这才是真正的答案=\
猜你喜欢
  • 1970-01-01
  • 2019-04-11
  • 2020-06-24
  • 2018-09-15
  • 2022-12-11
  • 2019-04-07
  • 1970-01-01
  • 2018-10-22
  • 1970-01-01
相关资源
最近更新 更多