这段代码在Gwt中,但是如果您只懂Java,那么您仍然可以回答这个问题。

好的,我有2个面板:myPanel1和myPanel2,然后我多次将myPanel2添加到myPanel1中

myPanel1.add(myPanel2);
myPanel1.add(myPanel2);
myPanel1.add(myPanel2);
myPanel1.add(myPanel2);
....


然后我计算myPanel1中的小部件数量

System.out.println("No of Widgets inside myPanel1: "+ myPanel1.getWidgetCount());


结果为“ No of Widgets inside myPanel1: 1

即使我们多次将myPanel2添加到myPanel1中,为什么myPanel1中的小部件数量仍为1?

最佳答案

我不是GWT开发人员,但是我怀疑这是调用Panel.add(Widget)来记录这些步骤(重点是我的):


  为了正确向面板添加或插入小部件,必须以正确的顺序进行几项重要的事情。并非所有这些步骤都与每个专家组相关,但必须考虑所有步骤。
  
  
  验证:执行任何健全性检查,以确保面板可以接受新的小部件。示例:检查插入时的有效索引;如果最大容量,请检查面板是否未满。
  调整以重新插入:某些面板需要处理小部件已经是该面板的子代的情况。示例:执行重新插入时,可能需要调整索引以解决Widget的移除。请参见ComplexPanel.adjustIndex(Widget,int)。
  分离子级:从其现有父级中删除该小部件(如果有)。大多数面板只会在Widget上调用Widget.removeFromParent()。
  逻辑附加:应该更新面板的任何状态变量以反映新控件的添加。示例:将小部件以适当的索引添加到面板的WidgetCollection中。
  物理连接:小部件的元素必须直接或间接物理连接到面板的元素。
  收养:调用take(Widget)完成添加,这是最后一步。
  


换句话说,当您向一个面板中添加某些内容时,会将其从当前所属的任何面板中删除(如果有的话)。

老实说,目前尚不清楚您期望得到什么效果-您仍然只有两个对象...单个窗口小部件多次出现在面板中意味着什么?如果需要多个小部件,请创建多个对象。

关于java - 给定2个对象:myPanel1和myPanel2,如果多次将myPanel2添加到myPanel1中,那么为什么myPanel1.getWidgetCount()仍为1;,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22878062/

10-12 13:35