2010-04-01 19 views
10

Mam kodu tak:Jak ustawić odległość między elementami zamówionymi pionowo?

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

    JButton button = new JButton("My Button"); 
    JLabel label = new JLabel("My label!!!!!!!!!!!"); 

    myPanel.add(button); 
    myPanel.add(label); 

W ten sposób mam elementy z żadnym odległości między nimi. Chodzi mi o to, że "najlepsze" elementy zawsze dotykają elementu "dolnego". Jak mogę to zmienić? Chciałbym mieć jakiś rozdział między moimi elementami?

Myślę o dodaniu "pośredniego" JPanela (z pewnym rozmiarem) pomiędzy moimi elementami. Ale nie sądzę, że jest to elegancki sposób na uzyskanie pożądanego efektu. Czy ktoś może mi pomóc?

Odpowiedz

13
JPanel myPanel = new JPanel(); 
    myPanel.setLayout(new BoxLayout(myPanel, BoxLayout.Y_AXIS)); 

    JButton button = new JButton("My Button"); 
    JLabel label = new JLabel("My label!!!!!!!!!!!"); 

    myPanel.add(button); 
    myPanel.add(Box.createVerticalStrut(20)); 
    myPanel.add(label); 

będzie jednym ze sposobów robienia tego.

1

Użyj klasy Box jako niewidocznego elementu wypełniającego. Tak właśnie zaleca firmę Sun.

BoxLayout tutorial.

2

Możesz rozważyć GridLayout zamiast BoxLayout, ma on atrybuty Hgap i Vgap, które pozwalają ci określić stałą separację między komponentami.

GridLayout layout = new GridLayout(2, 1); 
layout.setVgap(10); 
myPanel.setLayout(layout); 
myPanel.add(button); 
myPanel.add(label); 
5

Jeśli zdecydowanie zamierza wykorzystać BoxLayout do układu do panelu, to należy spojrzeć na How to Use BoxLayout Sun Learning Trail, a konkretnie rozdział Using Invisible Components as Filler. W skrócie, z BoxLayout można utworzyć specjalne komponenty niewidoczne, które działają jako elementy dystansowe między pozostałymi składnikami:

container.add(firstComponent); 
container.add(Box.createRigidArea(new Dimension(5,0))); 
container.add(secondComponent); 
+1

w tym przypadku można także użyć Box.createVerticalStrut (5). Istnieje również komplementarny Box.createHorizontalStrut (int). Preferuję je, gdy jeden z wymiarów jest zerowy. –

Powiązane problemy