fark

2012-03-01 25 views
96

salıncak bileşenleri, özellikle de ekran düzeninin güncellemelerine ilişkin birden çok yöntem vardır:fark

Java belgeleri, bunları bir şekilde teknik bir bakış açısından tanımlar, ancak bunların nasıl kullanılmaları gerektiği özellikle açık değildir.

Bunlar arasındaki fark nedir ve hangi koşullarda diğerlerinden ziyade birini kullanmalısınız? Kapsayıcıyı geçersiz olarak işaretler

cevap

58

invalidate(). İçerik bir şekilde yanlıştır ve yeniden ortaya konulmalıdır. Ama bu sadece bir çeşit işaret/bayrak. Birden fazla geçersiz kapsayıcının daha sonra yenilenmesi gerekebilir. Geçiş gerçekleştirir.

validate() Bu, tüm boyutlar için geçersiz içeriğin istenmesi ve tüm alt bileşenlerin boyutlarının LayoutManager tarafından uygun değerlere ayarlanması gerektiği anlamına gelir.

revalidate() her ikisinin de toplamıdır. Kapsayıcıyı geçersiz olarak işaretler ve kapsayıcının düzenini gerçekleştirir.

61

validate(): Bir Bileşen oluşturduğunuzda Swing'de, valid değil, yani geçerli özelliği false'dir. Bir bileşenin genişliği, yüksekliği, yeri ve eşyaları belirlendiğinde geçerli olduğu söylenir. Bu genellikle validate() yöntemini doğrudan veya dolaylı olarak arayarak yapılır. Konteynerler üzerinde validate() numaralı telefonu aradığımızda, kapsayıcıyı (geçersizse), genellikle LayoutManager 'u çağıran doLayout() yöntemini çağırarak doğrulayacaktır. Şimdi bu konteynere yerleştirilen her çocuk, yinelemeli olarak doğrulanacak, böylece tüm ağaç ortaya konacak ve geçerli olacaktır.

revalidate() : revalidate() Eğer rötuş onların genişlik/yükseklik etkileyebilir ve çağırır bir özellik() onların görünümünü etkileyecek bir öznitelik değiştirdiğinizde değiştirmek çağrılacak etmektir. Örneğin, JFrame, JPanel içeriyorsa, şu anda JPanel öğesini kaldırdığınız ve JPanel içindeki bileşenlerin büyüklüğüne bağlı olarak, yeni bir tane, JPanel kaldırıldı ve yerine yeni bir tane taktıysanız, The CONTAINER'un kendisi kadar iyi (kendisi tarafından kullanılan düzen yöneticisi sayesinde) değişiklikler. Hangi geçersiz duruma itir. Bu değişikliği doğrulamak için, revalidate()'u açıkça aramanız gerekir.

invalidate(): Bu, hiç kullanmadığım bir şeydir, bu yüzden bu konuda sağlayabileceğimiz çok bilgi olmayabilir. Ama yukarıda sunulan senaryolar invalidate() kullanırken ne olduğu gibi bir ipucu verebilir gibi görünüyor.

+1

Invalidate() 'in, birkaç bileşeni güncellediğinizde ve 'revalidate()' veya' validate() 'ile düzeni en sonunda yeniden hesaplamak için geçersiz olarak işaretlemek istediğinizde yararlı olduğuna inanıyorum. – Qix

+0

@Qix: IMHO, [invalidate()] 'yi aramaya gerek yoktur (http://docs.oracle.com/javase/8/docs/api/java/awt/Component.html#invalidate--) otomatik olarak çağrılıyor. Ayrıca, [revalidate()] (http://docs.oracle.com/javase/8/docs/api/java/awt/Component.html # revalidate--) kendisi bu görevi yerine getirecektir (Java Docs'ta belirtildiği gibi, hem invalidate() hem de validate() 'yi çağırmak için uygun bir yöntem olarak işlev görür. –