È possibile creare il proprio LayoutManager per centrare un singolo componente (entrambi gli assi o solo uno). Ecco quello che lo fa su entrambi gli assi, puoi facilmente cambiarlo per avere il centraggio verticale o orizzontale.
I layout di implementazione attuale primo figlio visibile, è possibile cambiare anche quello ...
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;
}
}
}
}
}
fonte
2009-05-23 02:51:42
Mi sono sempre chiesto come fare questo, alla fine ho rinunciato e usato MigLayout invece. – gencoreoperative
Questo è ciò che penso di gridbag: http://madbean.com/anim/totallygridbag/ :) – qben
GridBagLayout non riesce HARD quando il contenitore è più piccolo della dimensione preferita (ma più grande della dimensione minima) del bambino. –