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 JFrame
s ve JPanel
s?
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 JFrame
s ve JPanel
s?
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 setMinimumSize
ve 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 JFrame
ler ve JWindow
lar) 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
, GridBagLayout
Ve SpringLayout
yöneticiler bileşenin tercih boyutunu (kısıtlamalar ayarladığınız bağlı ikincisi iki) ama kullanmak BorderLayout
ve 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.
setPreferredSize
tercih 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.
setPreferredSize
tercih 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 ...