2012-01-14 17 views
7

nowy na java i zupełnie nowy na stronie. Mam JLabel dodany do środkowego panelu BorderLayout. Chciałbym, aby JLabel był wyśrodkowany w panelu; setAlignmentX wydaje się działać, ale setAlignmentY nie (etykieta pojawia się u góry panelu). Oto kod:setAlignmentY nie centruje JLabel w BorderLayout

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

JLabel label = new JLabel("This should be centered"); 
label.setAlignmentX(Component.CENTER_ALIGNMENT); 
label.setAlignmentY(Component.CENTER_ALIGNMENT); 
centerPanel.add(label); 

contentPane.add(centerPanel, BorderLayout.CENTER); 

Próbowałem również label.setVerticalAlignment (CENTER) ;, na próżno. Szukałem odpowiedzi w API i w tutorialach Java, na tej stronie oraz w wyszukiwarce Google. Dzięki!

Odpowiedz

17

byłeś blisko, spróbuj tego:

public static void main(String[] args) 
{ 
    JFrame contentPane = new JFrame(); 
    JPanel centerPanel = new JPanel(); 
    centerPanel.setLayout(new BorderLayout()); 

    JLabel label = new JLabel("This should be centered"); 
    label.setHorizontalAlignment(SwingConstants.CENTER); 
    centerPanel.add(label, BorderLayout.CENTER); 

    contentPane.add(centerPanel, BorderLayout.CENTER); 
    contentPane.pack(); 
    contentPane.setVisible(true); 

} 

jedną z wielu radości programowania GUI w Javie. Wolałbym wytrzeć oczy, jeśli będę szczera.

+2

+1 dla wyrównania, dostępne również w konstruktorze; -0,01 dla urazu oka. :-) – trashgod

+1

Czy istnieje sposób na zachowanie BoxLayout, z komponentami dodanymi do BoxLayout pionowo wycentrowanymi w środkowym panelu BorderLayout? – Jehu

+0

czytaj tutaj: http://docs.oracle.com/javase/tutorial/uiswing/layout/box.html Doceniam, że jest to bolesne, ale myślę, że pomoże ci zrozumieć, a nie po prostu odhaczyć kod –

0

Próbowałem wyśrodkować w pionie w poziomie JButton, ale miałem problem z rozciągnięciem. Po skrzypcach znalazłem to:

JPanel jpTop = new JPanel(new BorderLayout()); 
jbStop = new JButton("Cancel"); 
JPanel extraPanel = new JPanel(); 
extraPanel.setLayout(new BoxLayout(extraPanel, BoxLayout.X_AXIS)); 
extraPanel.setAlignmentY(Component.CENTER_ALIGNMENT); 
extraPanel.add(jbStop); 
jpTop .add(extraPanel, BorderLayout.EAST); 

Oczywiście działa to również dla JLabel.