01: import java.awt.*; 02: 03: /** 04: A layout manager that lays out components along a central axis 05: */ 06: class FormLayout implements LayoutManager 07: { 08: public Dimension preferredLayoutSize(Container parent) 09: { 10: Component[] components = parent.getComponents(); 11: left = 0; 12: right = 0; 13: height = 0; 14: for (int i = 0; i < components.length; i += 2) 15: { 16: Component cleft = components[i]; 17: Component cright = components[i + 1]; 18: 19: Dimension dleft = cleft.getPreferredSize(); 20: Dimension dright = cright.getPreferredSize(); 21: left = Math.max(left, dleft.width); 22: right = Math.max(right, dright.width); 23: height = height + Math.max(dleft.height, 24: dright.height); 25: } 26: return new Dimension(left + GAP + right, height); 27: } 28: 29: public Dimension minimumLayoutSize(Container parent) 30: { 31: return preferredLayoutSize(parent); 32: } 33: 34: public void layoutContainer(Container parent) 35: { 36: preferredLayoutSize(parent); // sets left, right 37: 38: Component[] components = parent.getComponents(); 39: 40: Insets insets = parent.getInsets(); 41: int xcenter = insets.left + left; 42: int y = insets.top; 43: 44: for (int i = 0; i < components.length; i += 2) 45: { 46: Component cleft = components[i]; 47: Component cright = components[i + 1]; 48: 49: Dimension dleft = cleft.getPreferredSize(); 50: Dimension dright = cright.getPreferredSize(); 51: 52: int height = Math.max(dleft.height, 53: dright.height); 54: 55: cleft.setBounds(xcenter - dleft.width, y + (height - 56: dleft.height) / 2, dleft.width, dleft.height); 57: 58: cright.setBounds(xcenter + GAP, y + (height 59: - dright.height) / 2, dright.width, dright.height); 60: y += height; 61: } 62: } 63: 64: public void addLayoutComponent(String name, 65: Component comp) 66: {} 67: 68: public void removeLayoutComponent(Component comp) 69: {} 70: 71: private int left; 72: private int right; 73: private int height; 74: private static final int GAP = 6; 75: }