Puede construir su propio LayoutManager para centrar un solo componente (ambos ejes o solo uno). Aquí está el que lo hace en ambos ejes, puede cambiarlo fácilmente para tener un centrado vertical u horizontal.
Los diseños actuales de implementación primer hijo visibles, puede cambiar eso también ...
public class CentreLayout implements LayoutManager, java.io.Serializable {
public void addLayoutComponent(String name, Component comp) {
}
public void removeLayoutComponent(Component comp) {
}
public Dimension preferredLayoutSize(Container target) {
return target.getPreferredSize();
}
public Dimension minimumLayoutSize(Container target) {
return target.getMinimumSize();
}
public void layoutContainer(Container target) {
synchronized (target.getTreeLock()) {
Insets insets = target.getInsets();
Dimension size = target.getSize();
int w = size.width - (insets.left + insets.right);
int h = size.height - (insets.top + insets.bottom);
int count = target.getComponentCount();
for (int i = 0; i < count; i++) {
Component m = target.getComponent(i);
if (m.isVisible()) {
Dimension d = m.getPreferredSize();
m.setBounds((w - d.width)/2, (h - d.height)/2, d.width, d.height);
break;
}
}
}
}
}
Siempre me he preguntado cómo hacer esto, al final me di por vencido y se utiliza MigLayout lugar. – gencoreoperative
Esto es lo que pienso de gridbag: http://madbean.com/anim/totallygridbag/ :) – qben
GridBagLayout falla HARD cuando el contenedor es más pequeño que el tamaño preferido (pero más grande que el tamaño mínimo) del niño. –