什么是有效容器?

时间:2012-03-20 14:32:57

标签: java swing

在这种情况下,“有效”的含义是什么? http://docs.oracle.com/javase/tutorial/uiswing/layout/howLayoutWorks.html

  

容器可以有效(即isValid()返回true)或无效。要使容器有效,       所有容器的孩子必须已经布置好,并且必须全部有效。该       Container.validate方法可用于验证无效容器。这个方法触发了       容器和所有子容器的布局在组件层次结构中并标记为此       容器有效。

3 个答案:

答案 0 :(得分:2)

“有效”是容器的属性。容器可以有效或无效。如果C1和C2是容器而C2在C1内部且C2无效,则C1也是无效的。如果您调用C1.validate(),C2也将变为有效。请注意,如果C2尚未布局,则C1无效。

答案 1 :(得分:2)

在Swing中创建Component时,它无效,即它的有效属性为false。当一个组件的宽度,高度,位置和内容已经确定时,该组件被认为是有效的。这通常通过直接或间接调用其validate()方法来完成。当我们在容器上调用validate()时,它将通过调用其doLayout()方法来验证容器(如果它是无效的),该方法通常会调用LayoutManager。现在,放置在这个容器上的每个子项都将以递归方式进行验证,这样整个树就会被布局并生效。

答案 2 :(得分:2)

isValid() 

表示容器层次结构已按照布局管理器当前定义的正确布局(例如BorderLayout),例如,如果在运行时从JPanel中删除了JButton,则应调用{{1或validate()这告诉Swing布局管理器重新计算当前容器的布局并触发树下的递归操作。

只需注意revalidate()与调用invalidate()然后验证()相同。嵌套revalidate()的这些操作可能很昂贵。