java - ejemplo - private jlabel
Centrar un JLabel en un JPanel (5)
Hay muchas formas de hacerlo, dependiendo de los administradores de diseño que use. Le sugiero que lea el tutorial de Colocación de componentes dentro de un contenedor .
Creo que lo siguiente funcionará, independientemente del administrador de diseño:
Estoy usando el creador de la interfaz gráfica de usuario de NetBeans para manejar mi diseño (soy terrible con LayoutManagers) y estoy tratando de colocar un JLabel simple para que siempre esté centrado (horizontalmente) dentro de su JPanel padre. Idealmente, esto se mantendría cierto incluso si se cambiara el tamaño del JPanel, pero si esa es una cantidad de código loca, basta con centrarse solo cuando se crea el JPanel por primera vez.
Ya soy lo suficientemente malo tratando de manejar diseños, pero dado que NetBeans GUI Builder genera automáticamente código inmutable, me ha resultado imposible encontrar la manera de hacer este centrado, y no he podido encontrar nada en línea para ayudarme.
¡Gracias a cualquiera que pueda dirigirme en la dirección correcta!
Incluso con BoxLayout puedes lograr eso:
JPanel listPane = new JPanel();
listPane.setLayout(new BoxLayout(listPane, BoxLayout.X_AXIS ));
JLabel label = new JLabel();
listPane.add(Box.createHorizontalGlue());
listPane.add(label);
listPane.add(Box.createHorizontalGlue());
La solución de mKorbel es perfecta para su objetivo. De todos modos, siempre me gusta sugerir BoxLayout porque es muy flexible.
Mara: "gracias por su respuesta, sin embargo, NetBeans GUI Build usa GroupLayout y esto no es descartable".
¡No es verdad! Haga clic derecho en cualquier lugar dentro de JFrame (o en cualquier otro contenedor GUI) en el generador de la interfaz gráfica de usuario de NetBeans y seleccione "Establecer diseño". De forma predeterminada, se selecciona "Diseño libre", que es Diseño de grupo, pero puede seleccionar cualquier otro diseño, incluido el Diseño de borde, tal como lo recomienda mKorbel.
Aquí hay cuatro formas de centrar un componente:
import java.awt.*;
import javax.swing.*;
import javax.swing.border.*;
class CenterComponent {
public static JLabel getLabel(String text) {
return getLabel(text, SwingConstants.LEFT);
}
public static JLabel getLabel(String text, int alignment) {
JLabel l = new JLabel(text, alignment);
l.setBorder(new LineBorder(Color.RED, 2));
return l;
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
JPanel p = new JPanel(new GridLayout(2,2,4,4));
p.setBackground(Color.black);
p.setBorder(new EmptyBorder(4,4,4,4));
JPanel border = new JPanel(new BorderLayout());
border.add(getLabel(
"Border", SwingConstants.CENTER), BorderLayout.CENTER);
p.add(border);
JPanel gridbag = new JPanel(new GridBagLayout());
gridbag.add(getLabel("GridBag"));
p.add(gridbag);
JPanel grid = new JPanel(new GridLayout());
grid.add(getLabel("Grid", SwingConstants.CENTER));
p.add(grid);
// from @0verbose
JPanel box = new JPanel();
box.setLayout(new BoxLayout(box, BoxLayout.X_AXIS ));
box.add(Box.createHorizontalGlue());
box.add(getLabel("Box"));
box.add(Box.createHorizontalGlue());
p.add(box);
JFrame f = new JFrame("Streeeetch me..");
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setContentPane(p);
f.pack();
f.setLocationByPlatform(true);
f.setVisible(true);
}
});
}
}
Al usar Borderlayout , puede poner cualquiera de los JComponents en el área CENTRAL. Para ver un ejemplo, vea una respuesta a la pregunta de desbordamiento de pila. Deshágase de la brecha entre JPanels . Esto debería funcionar.