1 16 17 package org.mc4j.console.swing.layout; 18 19 import java.awt.Component ; 20 import java.awt.Container ; 21 22 import javax.swing.Spring ; 23 import javax.swing.SpringLayout ; 24 25 31 public class SpringUtilities { 32 36 public static void printSizes(Component c) { 37 System.out.println("minimumSize = " + c.getMinimumSize()); 38 System.out.println("preferredSize = " + c.getPreferredSize()); 39 System.out.println("maximumSize = " + c.getMaximumSize()); 40 } 41 42 56 public static void makeGrid(Container parent, 57 int rows, int cols, 58 int initialX, int initialY, 59 int xPad, int yPad) { 60 SpringLayout layout; 61 try { 62 layout = (SpringLayout )parent.getLayout(); 63 } catch (ClassCastException exc) { 64 System.err.println("The first argument to makeGrid must use SpringLayout."); 65 return; 66 } 67 68 Spring xPadSpring = Spring.constant(xPad); 69 Spring yPadSpring = Spring.constant(yPad); 70 Spring initialXSpring = Spring.constant(initialX); 71 Spring initialYSpring = Spring.constant(initialY); 72 int max = rows * cols; 73 74 Spring maxWidthSpring = layout.getConstraints(parent.getComponent(0)). 77 getWidth(); 78 Spring maxHeightSpring = layout.getConstraints(parent.getComponent(0)). 79 getWidth(); 80 for (int i = 1; i < max; i++) { 81 SpringLayout.Constraints cons = layout.getConstraints( 82 parent.getComponent(i)); 83 84 maxWidthSpring = Spring.max(maxWidthSpring, cons.getWidth()); 85 maxHeightSpring = Spring.max(maxHeightSpring, cons.getHeight()); 86 } 87 88 for (int i = 0; i < max; i++) { 91 SpringLayout.Constraints cons = layout.getConstraints( 92 parent.getComponent(i)); 93 94 cons.setWidth(maxWidthSpring); 95 cons.setHeight(maxHeightSpring); 96 } 97 98 SpringLayout.Constraints lastCons = null; 101 SpringLayout.Constraints lastRowCons = null; 102 for (int i = 0; i < max; i++) { 103 SpringLayout.Constraints cons = layout.getConstraints( 104 parent.getComponent(i)); 105 if (i % cols == 0) { lastRowCons = lastCons; 107 cons.setX(initialXSpring); 108 } else { cons.setX(Spring.sum(lastCons.getConstraint(SpringLayout.EAST), 110 xPadSpring)); 111 } 112 113 if (i / cols == 0) { cons.setY(initialYSpring); 115 } else { cons.setY(Spring.sum(lastRowCons.getConstraint(SpringLayout.SOUTH), 117 yPadSpring)); 118 } 119 lastCons = cons; 120 } 121 122 SpringLayout.Constraints pCons = layout.getConstraints(parent); 124 pCons.setConstraint(SpringLayout.SOUTH, 125 Spring.sum( 126 Spring.constant(yPad), 127 lastCons.getConstraint(SpringLayout.SOUTH))); 128 pCons.setConstraint(SpringLayout.EAST, 129 Spring.sum( 130 Spring.constant(xPad), 131 lastCons.getConstraint(SpringLayout.EAST))); 132 } 133 134 135 private static SpringLayout.Constraints getConstraintsForCell( 136 int row, int col, 137 Container parent, 138 int cols) { 139 SpringLayout layout = (SpringLayout ) parent.getLayout(); 140 Component c = parent.getComponent(row * cols + col); 141 return layout.getConstraints(c); 142 } 143 144 159 public static void makeCompactGrid(Container parent, 160 int rows, int cols, 161 int initialX, int initialY, 162 int xPad, int yPad) { 163 SpringLayout layout; 164 try { 165 layout = (SpringLayout )parent.getLayout(); 166 } catch (ClassCastException exc) { 167 System.err.println("The first argument to makeCompactGrid must use SpringLayout."); 168 return; 169 } 170 171 Spring x = Spring.constant(initialX); 173 for (int c = 0; c < cols; c++) { 174 Spring width = Spring.constant(0); 175 for (int r = 0; r < rows; r++) { 176 width = Spring.max(width, 177 getConstraintsForCell(r, c, parent, cols). 178 getWidth()); 179 } 180 for (int r = 0; r < rows; r++) { 181 SpringLayout.Constraints constraints = 182 getConstraintsForCell(r, c, parent, cols); 183 constraints.setX(x); 184 constraints.setWidth(width); 185 } 186 x = Spring.sum(x, Spring.sum(width, Spring.constant(xPad))); 187 } 188 189 Spring y = Spring.constant(initialY); 191 for (int r = 0; r < rows; r++) { 192 Spring height = Spring.constant(0); 193 for (int c = 0; c < cols; c++) { 194 height = Spring.max(height, 195 getConstraintsForCell(r, c, parent, cols). 196 getHeight()); 197 } 198 for (int c = 0; c < cols; c++) { 199 SpringLayout.Constraints constraints = 200 getConstraintsForCell(r, c, parent, cols); 201 constraints.setY(y); 202 constraints.setHeight(height); 203 } 204 y = Spring.sum(y, Spring.sum(height, Spring.constant(yPad))); 205 } 206 207 SpringLayout.Constraints pCons = layout.getConstraints(parent); 209 pCons.setConstraint(SpringLayout.SOUTH, y); 210 pCons.setConstraint(SpringLayout.EAST, x); 211 } 212 } 213 | Popular Tags |