2012-01-14 11 views
7

nuevo en java y nuevo en el sitio. Tengo un JLabel agregado al panel central de un BorderLayout. Me gustaría que JLabel esté centrado en el panel; setAlignmentX parece funcionar, pero setAlignmentY no (la etiqueta aparece en la parte superior del panel). Aquí está el código:setAlignmentY no centrado JLabel en 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); 

También he intentado label.setVerticalAlignment (CENTRO) ;, en vano. He buscado una respuesta en la API y en los Tutoriales de Java, en este sitio y a través de una búsqueda en Google. ¡Gracias!

Respuesta

17

estaban cerca, intente esto:

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 de las muchas alegrías de la programación en Java GUI. Prefiero echar un vistazo si estoy siendo sincero

+2

+1 para la alineación, también disponible en un constructor; -0.01 para trauma en los ojos. :-) – trashgod

+1

¿Hay alguna manera de mantener el BoxLayout, con los componentes que se agregan al BoxLayout verticalmente centrado en el panel central de BorderLayout? – Jehu

+0

lea aquí: http://docs.oracle.com/javase/tutorial/uiswing/layout/box.html Aprecio que sea doloroso, pero creo que le ayudará a comprender en lugar de simplemente piratear el código –

0

Intenté alinear verticalmente el centro JButton pero tuve un problema porque se estiró. Después de tocar el violín, encontré que esto funciona:

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

Por supuesto, también funciona para JLabel.