JLayeredPane, JLayeredPane.add(Component, Integer) kullanarak birbirinin üzerine birden çok Bileşen yığılmasına izin verir. Daha yüksek "katmanlar" içindeki bileşenler, alt "katmanlardaki" Bileşenlerin üstünde görüntülenir.JLayeredPane ve Konteynır katmanına karşı
Container.add(Component, int), alt dizinlerine sahip Bileşenlerin daha yüksek dizinlere sahip Bileşenlerin üstünde görüntülendiği benzer bir mekanizma sağlar.
ilk mekanizma Tamsayı kullanır ve ikinci mekanizma int kullandığını lütfen unutmayın. Ayrıca, biri düşük olanların üstünde yüksek değerler oluşturur, diğeri ise tersini yapar. İki karıştırmayın :)Sorum şu: Kapsayıcı aynı mekanizmayı zaten sağladığında JLayeredPane kullanmanın amacı nedir? Bir katman bileşeni diğerinden daha iyi mi?
UPDATE: Ayrıca düşünmek için Container.setComponentZOrder(Component, int) vardır.
Yeniden "hiçbir zaman JLayeredPane'in bir çocuğuna repaint() çağırma": Bunu hangi alt bileşenle bulduğunuzu merak ediyorum. [Benzer bir sorun] (http://stackoverflow.com/questions/5668721/jmenuitems-painting-over-higher-components-in-jlayeredpane) ile karşılaştım ve en azından benim durumumda bir sorun olduğunu belirledim. JMenuItems özellikle. Her zaman zirvede gibi davranırlar (şeffaf olmadıkları sürece). –
@Aaron, Kullandığım bileşeni hatırlamıyorum ama bu konuda düşündüğünüzde, tüm bileşenlerin her zaman en üstte olacağı şekilde davranmaları mantıklı. paint(), istenen sınırların dışında çizim yapmasını önlemek için klip sınırlarını ayarlayacağınızı varsaymak içindir. Resaint() dosyasını doğrudan bir alt bileşeni üzerinde (hiçbir sınırlama olmadan) çağırdığınızda, esas olarak üst öğeyi görmezden gelmeniz istenir. Başka bir deyişle, Swing uygulamasında bu bir hata değildir. Bu kullanıcı hatası. – Gili
Aslında bu doğru değil. Özellikle [AWT ve Swing'te Boyama] (http://java.sun.com/products/jfc/tsc/articles/painting/), özellikle de Boya İşleme bölümü.Bir JComponent üzerinde 'repaint()' çağrıldığında, RepaintManager'ın, boya işleminin başlaması gereken 'root' bileşenini belirlemek için clip dikdörtgenini ve bileşenin 'opaque 've' isOptimizedDrawingEnabled' özelliklerini kullandığını belirtir. Çoğu bileşen, aslında, her zaman üstte oldukları gibi davranmazlar (yani "alwaysOnTop()" varsayılan olarak false döndürür). –