2011-10-03 23 views
9

Akış düzenine sahip bir panelim var ve 1 ile 2000 arasında değişken bir öğe sayısı içerebilir. Bunu kaydırma bölmesinin içine, dikey yönde kaydırılabilir ve sabit genişliğe yerleştirmek istiyorum. Sorun, tercih edilen panel boyutunu (800,600) gibi bir değere ayarladığımda, bazı öğeler eksiktir ve kaydırma yoktur. Tercih edilen kaydırma bölmesi boyutunu ayarlarsam, akış bölmesindeki tüm öğeler çok uzun bir satıra yerleştirilir.Akış düzenine sahip Panel'in yalnızca tercih edilen genişliği nasıl ayarlanır?

Herhangi bir öğede maksimum boyut ayarlamak hiç bir şey yapmıyor gibi görünüyor - düzen yöneticileri bunu görmezden geliyor.

Bunu nasıl düzeltebilirim?

+1

'dan 1 'e kadar çok büyük sayılar var bazı mantık var – mKorbel

+0

Bazı daha iyi sayılar eklendi :) Kötü ingilizcemi affet. – Rogach

+2

yapıyor. değil. kullanın. setXXSize. Bunun yerine, uygun bir LayoutManager kullanın – kleopatra

cevap

3

Bunu yapmak için BoxLayout kullanabilirsiniz: tabii

JPanel verticalPane = new JPanel(); 
verticalPane.setLayout(new BoxLayout(verticalPane, BoxLayout.Y_AXIS)); 

JScrollPane pane = new JScrollPane(verticalPane); 

//add what you want to verticalPane 
verticalPane.add(new JButton("foo")); 
verticalPane.add(new JButton("bar")); 

Bu eklenen her bileşenin tercih boyutunu kullanır. Bir Jpanel örneğin tercih boyutunu değiştirmek istiyorsanız, bunu genişletmek ve getPreferredSize geçersiz:

class MyPanel extends JPanel(){ 
    public Dimension getPreferredSize(){ 
     return new Dimension(100,100); 
    } 
} 

bir not: BoxLayout dikkate getPreferredSize içinde alacak, diğer LayoutManager olmayabilir.

Lütfen cevabımı eleştirin, bunun tamamen doğru olduğundan emin değilim ve sorunu anlayıp anlamadığımı anlamak için itirazları duymayı merak ediyorum.

+3

'Tabii ki, eklenmiş her bileşenin tercih edilen boyutunu kullanacağız' tabiki yanlış (ya da tamamen doğru değil, "kullanım" ile kastettiğinize biraz bağlı) ;-) LayoutManager'lar, ipuçlarıyla istediklerini yapmakta özgürdür. bileşenler tarafından verilen. Sabit kodlanmış değerler, ayarlanmayacak kadar kötü olsa da, getXXSize'yi geçersiz kılmak doğru yöndür. İyi bir LayoutManager kullanın ve ihtiyacınız olan boyutlandırma kuralları ile yapılandırın. – kleopatra

4

Dikey yönde kaydırılabilir kaydırma bölmesi, içine koymak istiyorum ve sabit genişlikte

ile Bunun için Wrap Layout kullanabilirsiniz.

Panelin tercih edilen boyutunu ayarlamayın. Ancak, kaydırma bölmesinin tercih edilen boyutunu ayarlayabilirsiniz, böylece frame.pack() yöntemi çalışır.

İlgili konular