2012-01-14 15 views
7

nuovo per java e nuovo di zecca per il sito. Ho aggiunto una JLabel al pannello centrale di BorderLayout. Vorrei che JLabel fosse centrato nel pannello; setAlignmentX sembra funzionare, ma setAlignmentY no (l'etichetta appare nella parte superiore del pannello). Ecco il codice:setAlignmentY non centrando JLabel in 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); 

Ho anche provato label.setVerticalAlignment (CENTER) ;, senza risultato. Ho cercato una risposta nell'API e nei tutorial di Java, su questo sito e attraverso una ricerca su google. Grazie!

risposta

17

eri vicino, provate questo:

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); 

} 

una delle tante gioie di programmazione GUI in Java. Preferisco sporgere gli occhi se sono onesto

+2

+1 per l'allineamento, disponibile anche in un costruttore; -0,01 per traumi agli occhi. :-) – trashgod

+1

C'è un modo per mantenere il BoxLayout, con i componenti che vengono aggiunti al BoxLayout centrato verticalmente nel pannello centrale di BorderLayout? – Jehu

+0

: leggi qui: http://docs.oracle.com/javase/tutorial/uiswing/layout/box.html Apprezzo che sia doloroso, ma penso che ti aiuterà a capire piuttosto che ad hackerare il codice –

0

Ho provato a centrare verticalmente l'allineamento JButton ma ho avuto problemi è stato allungato. Dopo aver giocherellato ho trovato questo funziona:

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); 

Naturalmente funziona anche per JLabel.