001/* 002 * Copyright (c) 2002-2007 JGoodies Karsten Lentzsch. All Rights Reserved. 003 * 004 * Redistribution and use in source and binary forms, with or without 005 * modification, are permitted provided that the following conditions are met: 006 * 007 * o Redistributions of source code must retain the above copyright notice, 008 * this list of conditions and the following disclaimer. 009 * 010 * o Redistributions in binary form must reproduce the above copyright notice, 011 * this list of conditions and the following disclaimer in the documentation 012 * and/or other materials provided with the distribution. 013 * 014 * o Neither the name of JGoodies Karsten Lentzsch nor the names of 015 * its contributors may be used to endorse or promote products derived 016 * from this software without specific prior written permission. 017 * 018 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 019 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 020 * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 021 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR 022 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 023 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 024 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; 025 * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 026 * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE 027 * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, 028 * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 029 */ 030 031package com.jgoodies.forms.layout; 032 033import java.util.StringTokenizer; 034 035/** 036 * Specifies columns in FormLayout by their default orientation, 037 * start size and resizing behavior.<p> 038 * 039 * <strong>Examples:</strong><br> 040 * The following examples specify a column with FILL alignment, a size of 041 * 10 dlu that won't grow. 042 * <pre> 043 * new ColumnSpec(Sizes.dluX(10)); 044 * new ColumnSpec(ColumnSpec.FILL, Sizes.dluX(10), 0.0); 045 * new ColumnSpec(ColumnSpec.FILL, Sizes.dluX(10), ColumnSpec.NO_GROW); 046 * new ColumnSpec("10dlu"); 047 * new ColumnSpec("10dlu:0"); 048 * new ColumnSpec("fill:10dlu:0"); 049 * </pre><p> 050 * 051 * The {@link com.jgoodies.forms.factories.FormFactory} provides 052 * predefined frequently used ColumnSpec instances. 053 * 054 * @author Karsten Lentzsch 055 * @version $Revision$ 056 * 057 * @see com.jgoodies.forms.factories.FormFactory 058 */ 059 060@SuppressWarnings("serial") 061public final class ColumnSpec extends FormSpec { 062 063 // Horizontal Orientations ********************************************* 064 065 /** 066 * By default put components in the left. 067 */ 068 public static final DefaultAlignment LEFT = FormSpec.LEFT_ALIGN; 069 070 /** 071 * By default put the components in the center. 072 */ 073 public static final DefaultAlignment CENTER = FormSpec.CENTER_ALIGN; 074 075 /** 076 * By default put components in the middle. 077 */ 078 public static final DefaultAlignment MIDDLE = CENTER; 079 080 /** 081 * By default put components in the right. 082 */ 083 public static final DefaultAlignment RIGHT = FormSpec.RIGHT_ALIGN; 084 085 /** 086 * By default fill the component into the column. 087 */ 088 public static final DefaultAlignment FILL = FormSpec.FILL_ALIGN; 089 090 /** 091 * Unless overridden the default alignment for a column is FILL. 092 */ 093 public static final DefaultAlignment DEFAULT = FILL; 094 095 // Instance Creation **************************************************** 096 097 /** 098 * Constructs a ColumnSpec for the given default alignment, 099 * size and resize weight.<p> 100 * 101 * The resize weight must be a non-negative double; you can use 102 * <code>NO_GROW</code> as a convenience value for no resize. 103 * 104 * @param defaultAlignment the column's default alignment 105 * @param size constant, component size or bounded size 106 * @param resizeWeight the column's non-negative resize weight 107 * @exception IllegalArgumentException if the size is invalid or 108 * the resize weight is negative 109 */ 110 public ColumnSpec(DefaultAlignment defaultAlignment, Size size, 111 double resizeWeight) { 112 super(defaultAlignment, size, resizeWeight); 113 } 114 115 /** 116 * Constructs a ColumnSpec for the given size using the 117 * default alignment, and no resizing. 118 * 119 * @param size constant size, component size, or bounded size 120 * @exception IllegalArgumentException if the size is invalid 121 */ 122 public ColumnSpec(Size size) { 123 super(DEFAULT, size, NO_GROW); 124 } 125 126 /** 127 * Constructs a ColumnSpec from the specified encoded description. 128 * The description will be parsed to set initial values. 129 * 130 * @param encodedDescription the encoded description 131 */ 132 public ColumnSpec(String encodedDescription) { 133 super(DEFAULT, encodedDescription); 134 } 135 136 // Implementing Abstract Behavior *************************************** 137 138 /** 139 * Returns if this is a horizontal specification (vs. vertical). 140 * Used to distinct between horizontal and vertical dialog units, 141 * which have different conversion factors. 142 * 143 * @return always true (for horizontal) 144 */ 145 @Override 146 protected final boolean isHorizontal() { 147 return true; 148 } 149 150 // Parsing and Decoding of Column Descriptions ************************** 151 152 /** 153 * Parses and splits encoded column specifications and returns 154 * an array of ColumnSpec objects. 155 * 156 * @param encodedColumnSpecs comma separated encoded column specifications 157 * @return an array of decoded column specifications 158 * @exception NullPointerException if the encoded column specifications string 159 * is <code>null</code> 160 * 161 * @see ColumnSpec#ColumnSpec(String) 162 */ 163 public static ColumnSpec[] decodeSpecs(String encodedColumnSpecs) { 164 if (encodedColumnSpecs == null) { 165 throw new NullPointerException( 166 "The column specification must not be null."); 167 } 168 169 StringTokenizer tokenizer = new StringTokenizer(encodedColumnSpecs, 170 ", "); 171 int columnCount = tokenizer.countTokens(); 172 ColumnSpec[] columnSpecs = new ColumnSpec[columnCount]; 173 for (int i = 0; i < columnCount; i++) { 174 columnSpecs[i] = new ColumnSpec(tokenizer.nextToken()); 175 } 176 return columnSpecs; 177 } 178 179}