package jo.alexa.sim.ui; import java.awt.Component; import java.awt.GridBagConstraints; import java.awt.GridBagLayout; public class TableLayout extends GridBagLayout { /** * Comment for <code>serialVersionUID</code> */ private static final long serialVersionUID = 507791756710474413L; static final String[] defaults = { "gridx", "gridy", "gridwidth", "gridheight", "weightx", "weighty", }; GridBagConstraints defaultGBC = new GridBagConstraints(); int currentX; int currentY; public TableLayout() { super(); defaultGBC.weightx = 1; defaultGBC.weighty = 1; currentX = 0; currentY = 0; } public TableLayout(String defaultConstraints) { super(); java.util.StringTokenizer st = new java.util.StringTokenizer(defaultConstraints, " x,-"); defaultGBC.weightx = 1; defaultGBC.weighty = 1; while (st.hasMoreTokens()) { String tok = st.nextToken().toLowerCase(); // int o; // String key; // String val; parseToken(defaultGBC, "", tok); } } public void addLayoutComponent(Component comp, Object constraints) { if (!(constraints instanceof String)) { super.addLayoutComponent(comp, constraints); return; } java.util.StringTokenizer st = new java.util.StringTokenizer((String)constraints, " x,-"); GridBagConstraints gbc = new GridBagConstraints(); copy(gbc, defaultGBC); gbc.weightx = 1; gbc.weighty = 1; for (int i = 0; st.hasMoreTokens(); i++) { String tok = st.nextToken().toLowerCase(); // int o; // String key; // String val; parseToken(gbc, defaults[i], tok); } currentX = gbc.gridx; currentY = gbc.gridy; super.addLayoutComponent(comp, gbc); } void parseToken(GridBagConstraints gbc, String theDefault, String tok) { int o = tok.indexOf("="); String key; String val; if (o > 0) { key = tok.substring(0, o); val = tok.substring(o + 1); } else { key = theDefault; val = tok; } parseSetting(gbc, key, val); } private void parseSetting(GridBagConstraints gbc, String key, String val) { int v; try { v = Integer.parseInt(val); } catch (NumberFormatException e) { v = 0; } if (key.equals("x") || key.equals("gridx")) { if (val.equals(".")) gbc.gridx = currentX; else if (val.equals("+")) gbc.gridx = ++currentX; else gbc.gridx = v; } else if (key.equals("y") || key.equals("gridy")) { if (val.equals(".")) gbc.gridy = currentY; else if (val.equals("+")) gbc.gridy = ++currentY; else gbc.gridy = v; } else if (key.equals("gridwidth") || key.equals("width")) gbc.gridwidth = v; else if (key.equals("gridheight") || key.equals("height")) gbc.gridheight = v; else if (key.equals("weightx")) gbc.weightx = v; else if (key.equals("weighty")) gbc.weighty = v; else if (key.equals("ipadx")) gbc.ipadx = v; else if (key.equals("ipady")) gbc.ipady = v; else if (key.equals("fill")) { if (val.equals("none")) gbc.fill = GridBagConstraints.NONE; else if (val.equals("horizontal") || val.equals("h")) gbc.fill = GridBagConstraints.HORIZONTAL; else if (val.equals("vertical") || val.equals("v")) gbc.fill = GridBagConstraints.VERTICAL; else if (val.equals("both") || val.equals("hv")) gbc.fill = GridBagConstraints.BOTH; } else if (key.equals("anchor")) { if (val.equals("center")) gbc.anchor = GridBagConstraints.CENTER; else if (val.equals("north") || val.equals("n")) gbc.anchor = GridBagConstraints.NORTH; else if (val.equals("northeast") || val.equals("ne")) gbc.anchor = GridBagConstraints.NORTHEAST; else if (val.equals("east") || val.equals("e")) gbc.anchor = GridBagConstraints.EAST; else if (val.equals("southeast") || val.equals("se")) gbc.anchor = GridBagConstraints.SOUTHEAST; else if (val.equals("south") || val.equals("s")) gbc.anchor = GridBagConstraints.SOUTH; else if (val.equals("southwest") || val.equals("sw")) gbc.anchor = GridBagConstraints.SOUTHWEST; else if (val.equals("west") || val.equals("w")) gbc.anchor = GridBagConstraints.WEST; else if (val.equals("northwest") || val.equals("nw")) gbc.anchor = GridBagConstraints.NORTHWEST; } } void copy(GridBagConstraints lvalue, GridBagConstraints rvalue) { lvalue.anchor = rvalue.anchor; lvalue.fill = rvalue.fill; lvalue.gridheight = rvalue.gridheight; lvalue.gridwidth = rvalue.gridwidth; lvalue.gridx = rvalue.gridx; lvalue.gridy = rvalue.gridy; lvalue.insets = rvalue.insets; lvalue.ipadx = rvalue.ipadx; lvalue.ipady = rvalue.ipady; lvalue.weightx = rvalue.weightx; lvalue.weighty = rvalue.weighty; } }