Arasındaki temel fark nedir setSize()ve setPreferredSize(). Bazen kullandım setSize(), bazen setPreferredSize()biri istediğimi yapıyor, bazen diğeri.
Ben ne için çağrı kullanmalısınız JFrames ve JPanels?
Arasındaki temel fark nedir setSize()ve setPreferredSize(). Bazen kullandım setSize(), bazen setPreferredSize()biri istediğimi yapıyor, bazen diğeri.
Ben ne için çağrı kullanmalısınız JFrames ve JPanels?
Yanıtlar:
Kullanım, bileşenin üst öğesinin bir yerleşim yöneticisine sahip olup olmamasına bağlıdır.
setSize() - bir ana yerleşim yöneticisi olmadığında kullanın;setPreferredSize()(ayrıca ilişkili setMinimumSizeve setMaximumSize) - bir üst düzen yöneticisi mevcut olduğunda kullanın.setSize()Bileşenin ebeveyn Bir düzen yöneticisi kullanarak eğer yöntem muhtemelen hiçbir şey yapmayacağım; yerlerde bu genellikle üst düzey bileşenler (olurdu bir etki yaratacaktır JFrameler ve JWindowlar) ve iç kaydırılan camlardan olan şeyler. setSize()Düzen yöneticisi olmayan bir üst öğe içinde bileşenleriniz varsa da aramanız gerekir .
Genel olarak, setPreferredSize()bir yerleşim yöneticisi mevcutsa bileşenleri beklendiği gibi düzenler; Çoğu yerleşim yöneticisi, bileşenlerinin tercih edilen (minimum ve maksimum) boyutlarını elde ederek setSize()ve ardından setLocation()bu bileşenleri kullanarak ve düzen kurallarına göre konumlandırarak çalışır.
Örneğin, bir BorderLayout"kuzey" bölgesinin sınırlarını kuzey bileşeninin tercih edilen boyutuna eşit yapmaya çalışır - bunlar JFrame, diğer bileşenlerin boyutuna bağlı olarak bundan daha büyük veya daha küçük olabilir. düzende vb.
setSize()veya setBounds()hiçbir yerleşim yöneticisi kullanılmadığında kullanılabilir.
Eğer bir düzen yöneticisi kullanıyorsanız Ancak, kullanarak düzen yöneticisine ipuçları sağlayabilir setXXXSize()gibi yöntemler setPreferredSize()ve setMinimumSize()vb
Bileşenin kapsayıcısının istenen boyuta uyan bir düzen yöneticisi kullandığından emin olun. FlowLayout, GridBagLayoutVe SpringLayoutyöneticiler bileşenin tercih boyutunu (kısıtlamalar ayarladığınız bağlı ikincisi iki) ama kullanmak BorderLayoutve GridLayout, üzerinde revalidate yöntemini çağırmak gerekir Genellikle siz don't.If zaten görünür olan bir bileşen için yeni boyutu ipuçlarını belirtmek kapsama hiyerarşisinin yeniden düzenlenmesini sağlamak için. Ardından yeniden boyama yöntemini çağırın.
setSize bileşeni belirtilen boyuta yeniden boyutlandıracaktır.
setPreferredSizetercih edilen boyutu ayarlar. Bileşen, içinde bulunduğu kabın boyutuna veya kullanıcının bileşeni manuel olarak yeniden boyutlandırıp boyutlandırmadığına bağlı olarak aslında bu boyutta olmayabilir.
IIRC ...
setSize bileşenin boyutunu ayarlar.
setPreferredSizetercih edilen boyutu ayarlar. Layoutmanager, bileşeniniz için bu kadar alanı düzenlemeye çalışacaktır.
Bir yerleşim yöneticisi kullanıp kullanmamanıza bağlıdır ...