2012-03-20 50 views
1

在這種情況下,「有效」意味着什麼?
http://docs.oracle.com/javase/tutorial/uiswing/layout/howLayoutWorks.html什麼是有效的容器?

的容器可以是有效的(即,isValid()的返回true)或無效。爲了使容器有效,所有容器的孩子必須已經佈置,並且必須都是有效的。可以使用 Container.validate方法來驗證無效的容器。此方法會觸發容器和所有子容器的 佈局沿組件層次結構向下,並將此容器標記爲有效。

+1

hmmm會是更好的測試isDisplayable()檢查有關它的狀態,後(重新)驗證一個無效的容器 – mKorbel 2012-03-20 14:44:45

回答

2
isValid() 

指示容器層次結構已被正確地佈置爲當前由佈局管理器(例如BorderLayout)中所定義,例如,如果你從一個JPanel在運行時除去一個JButton那麼你應該調用validate()revalidate()這告訴Swing佈局管理器重新計算當前容器的佈局,並在樹上觸發遞歸操作。

只需注意revalidate()與調用invalidate()和validate()相同。嵌套revalidate()的這些操作可能很昂貴。

2

「有效」是容器的屬性。容器可以是有效的或無效的。如果C1和C2是容器,C2在C1內,C2無效,C1也是無效的。如果您調用C1.validate(),則C2也將變爲有效。請注意,如果C2未佈局,則C1無效。

2

在Swing創建Component時,它無效,即它的有效屬性爲false。一個組件被認爲是有效的,當它的寬度,高度,位置和東西已經確定。這通常通過直接或間接調用其validate()方法來完成。當我們在容器上調用validate()時,它將通過調用其通常會調用LayoutManager的doLayout()方法來驗證容器(如果它是無效的)。現在,放在這個容器上的每個孩子都會被遞歸地驗證,這樣整個樹就會被佈置並且變得有效。