invalidate()menandai wadah sebagai tidak valid. Berarti isinya salah dan harus ditata ulang. Tapi itu hanya semacam tanda / bendera. Ada kemungkinan bahwa beberapa penampung yang tidak valid harus disegarkan nanti.
validate()melakukan relayout. Artinya, konten yang tidak valid diminta untuk semua ukuran dan semua ukuran subkomponen disetel ke nilai yang sesuai oleh LayoutManager.
revalidate()hanyalah jumlah dari keduanya. Ini menandai penampung sebagai tidak valid dan melakukan tata letak penampung.
MEMPERBARUI:
Beberapa kode dari Component.java
publicvoid revalidate(){
revalidateSynchronously();}/**
* Revalidates the component synchronously.
*/finalvoid revalidateSynchronously(){synchronized(getTreeLock()){
invalidate();Container root = getContainer();if(root ==null){// There's no parents. Just validate itself.
validate();}else{while(!root.isValidateRoot()){if(root.getContainer()==null){// If there's no validate roots, we'll validate the// topmost containerbreak;}
root = root.getContainer();}
root.validate();}}}
revalidate()tidak menelepon doLayout(), yang validate()tidak. Jadi, ini sebenarnya bukan jumlah keduanya - revalidatetidak selalu merupakan pengganti yang valid validate.
Dalam hal ini saya kira (tidak pernah mencoba) RepaintManager akan memanggil validasi
StanislavL
Saya berurusan dengan bug jelek dan mengganti validasi ulang dengan validasi (yang menyebut doLayout) menyelesaikannya ...
Meo
Bagaimana kita memanggil validate () dari metode statis?
Kunal Tyagi
69
validate(): Dalam Swing ketika Anda membuat sebuah Komponen, itu bukanlah validproperti yang valid false. Suatu komponen dikatakan valid, bila lebar, tinggi, lokasi dan barangnya telah ditentukan. Ini biasanya dilakukan dengan memanggil validate()metode mereka , secara langsung atau tidak langsung. Ketika kita memanggil validate()kontainer, itu akan memvalidasi kontainer (jika tidak valid) dengan memanggil doLayout()metodenya, yang biasanya akan memanggilLayoutManager . Sekarang setiap anak yang ditempatkan di penampung ini akan divalidasi secara rekursif, sehingga seluruh pohon akan ditata dan menjadi valid.
revalidate(): revalidate()dipanggil saat Anda mengubah atribut yang akan memengaruhi lebar / tinggi dan memanggil ulang () saat Anda mengubah atribut yang akan memengaruhi penampilannya. Misalnya, jika Anda JFrameberisi JPanel, sekarang pada titik waktu tertentu Anda menghapusnya JPaneldan memasukkan yang baru di tempatnya, tergantung pada konten yang baru ditempatkan JPanel, ukuran komponen di dalam JPaneldan juga The CONTAINERitu sendiri (berdasarkan dari manajer tata letak yang digunakan olehnya), perubahan. Yang mendorongnya ke status tidak valid. Jadi untuk memvalidasi perubahan ini, Anda harus memanggil secara eksplisit revalidate().
invalidate(): Ini adalah sesuatu yang belum pernah saya gunakan, jadi mungkin tidak banyak info yang bisa saya berikan tentangnya. Tapi sepertinya skenario yang disajikan di atas dapat memberikan sedikit petunjuk, tentang apa yang terjadi saat menggunakan invalidate().
Saya yakin invalidate()ini berguna saat Anda memperbarui beberapa komponen dan ingin menandainya sebagai tidak valid sebelum akhirnya menghitung ulang tata letak dengan revalidate()atau validate().
Qix - MONICA DISALAHKAN
1
@Qix: IMHO, tidak perlu memanggil invalidate () karena dipanggil secara otomatis. Selain itu, revalidate () sendiri akan melakukan tugas itu (Seperti yang dinyatakan dalam Java Docs, ini bertindak sebagai metode yang nyaman untuk memanggil keduanya invalidate ()dan validate ()).
revalidate()
tidak menelepondoLayout()
, yangvalidate()
tidak. Jadi, ini sebenarnya bukan jumlah keduanya -revalidate
tidak selalu merupakan pengganti yang validvalidate
.validate()
: Dalam Swing ketika Anda membuat sebuah Komponen, itu bukanlahvalid
properti yang validfalse
. Suatu komponen dikatakan valid, bila lebar, tinggi, lokasi dan barangnya telah ditentukan. Ini biasanya dilakukan dengan memanggilvalidate()
metode mereka , secara langsung atau tidak langsung. Ketika kita memanggilvalidate()
kontainer, itu akan memvalidasi kontainer (jika tidak valid) dengan memanggildoLayout()
metodenya, yang biasanya akan memanggilLayoutManager
. Sekarang setiap anak yang ditempatkan di penampung ini akan divalidasi secara rekursif, sehingga seluruh pohon akan ditata dan menjadi valid.revalidate()
:revalidate()
dipanggil saat Anda mengubah atribut yang akan memengaruhi lebar / tinggi dan memanggil ulang () saat Anda mengubah atribut yang akan memengaruhi penampilannya. Misalnya, jika AndaJFrame
berisiJPanel
, sekarang pada titik waktu tertentu Anda menghapusnyaJPanel
dan memasukkan yang baru di tempatnya, tergantung pada konten yang baru ditempatkanJPanel
, ukuran komponen di dalamJPanel
dan jugaThe CONTAINER
itu sendiri (berdasarkan dari manajer tata letak yang digunakan olehnya), perubahan. Yang mendorongnya ke status tidak valid. Jadi untuk memvalidasi perubahan ini, Anda harus memanggil secara eksplisitrevalidate()
.invalidate()
: Ini adalah sesuatu yang belum pernah saya gunakan, jadi mungkin tidak banyak info yang bisa saya berikan tentangnya. Tapi sepertinya skenario yang disajikan di atas dapat memberikan sedikit petunjuk, tentang apa yang terjadi saat menggunakaninvalidate()
.sumber
invalidate()
ini berguna saat Anda memperbarui beberapa komponen dan ingin menandainya sebagai tidak valid sebelum akhirnya menghitung ulang tata letak denganrevalidate()
atauvalidate()
.invalidate ()
danvalidate ()
).