Source for javax.swing.BorderFactory

   1: /* BorderFactory.java --
   2:    Copyright (C) 2002, 2004  Free Software Foundation, Inc.
   3: 
   4: This file is part of GNU Classpath.
   5: 
   6: GNU Classpath is free software; you can redistribute it and/or modify
   7: it under the terms of the GNU General Public License as published by
   8: the Free Software Foundation; either version 2, or (at your option)
   9: any later version.
  10: 
  11: GNU Classpath is distributed in the hope that it will be useful, but
  12: WITHOUT ANY WARRANTY; without even the implied warranty of
  13: MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  14: General Public License for more details.
  15: 
  16: You should have received a copy of the GNU General Public License
  17: along with GNU Classpath; see the file COPYING.  If not, write to the
  18: Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
  19: 02110-1301 USA.
  20: 
  21: Linking this library statically or dynamically with other modules is
  22: making a combined work based on this library.  Thus, the terms and
  23: conditions of the GNU General Public License cover the whole
  24: combination.
  25: 
  26: As a special exception, the copyright holders of this library give you
  27: permission to link this library with independent modules to produce an
  28: executable, regardless of the license terms of these independent
  29: modules, and to copy and distribute the resulting executable under
  30: terms of your choice, provided that you also meet, for each linked
  31: independent module, the terms and conditions of the license of that
  32: module.  An independent module is a module which is not derived from
  33: or based on this library.  If you modify this library, you may extend
  34: this exception to your version of the library, but you are not
  35: obligated to do so.  If you do not wish to do so, delete this
  36: exception statement from your version. */
  37: 
  38: 
  39: package javax.swing;
  40: 
  41: import java.awt.Color;
  42: import java.awt.Font;
  43: 
  44: import javax.swing.border.BevelBorder;
  45: import javax.swing.border.Border;
  46: import javax.swing.border.CompoundBorder;
  47: import javax.swing.border.EmptyBorder;
  48: import javax.swing.border.EtchedBorder;
  49: import javax.swing.border.LineBorder;
  50: import javax.swing.border.MatteBorder;
  51: import javax.swing.border.TitledBorder;
  52: 
  53: /**
  54:  * A factory for commonly used borders.
  55:  *
  56:  * @author original author unknown
  57:  */
  58: public class BorderFactory
  59: {
  60:   private BorderFactory()
  61:   {
  62:     // Do nothing.
  63:   }
  64: 
  65:   /**
  66:    * Creates a line border withe the specified color.
  67:    *
  68:    * @param color A color to use for the line.
  69:    *
  70:    * @return The Border object
  71:    */
  72:   public static Border createLineBorder(Color color)
  73:   {
  74:     return createLineBorder(color, 1);
  75:   }
  76: 
  77:   /**
  78:    * Creates a line border withe the specified color and width. The width
  79:    * applies to all 4 sides of the border. To specify widths individually for
  80:    * the top, bottom, left, and right, use
  81:    * createMatteBorder(int,int,int,int,Color).
  82:    *
  83:    * @param color A color to use for the line.
  84:    * @param thickness An int specifying the width in pixels.
  85:    *
  86:    * @return The Border object
  87:    */
  88:   public static Border createLineBorder(Color color, int thickness)
  89:   {
  90:     return new LineBorder(color, thickness);
  91:   }
  92: 
  93:   /**
  94:    * Created a border with a raised beveled edge, using brighter shades of
  95:    * the component's current background color for highlighting, and darker
  96:    * shading for shadows. (In a raised border, highlights are on top and
  97:    * shadows are underneath.)
  98:    *
  99:    * @return The Border object
 100:    */
 101:   public static Border createRaisedBevelBorder()
 102:   {
 103:     return new BevelBorder(BevelBorder.RAISED);
 104:   }
 105: 
 106:   /**
 107:    * Created a border with a lowered beveled edge, using brighter shades of
 108:    * the component's current background color for highlighting, and darker
 109:    * shading for shadows. (In a lowered border, shadows are on top and
 110:    * highlights are underneath.)
 111:    *
 112:    * @return The Border object
 113:    */
 114:   public static Border createLoweredBevelBorder()
 115:   {
 116:     return new BevelBorder(BevelBorder.LOWERED);
 117:   }
 118: 
 119:   /**
 120:    * Create a beveled border of the specified type, using brighter shades of
 121:    * the component's current background color for highlighting, and darker
 122:    * shading for shadows. (In a lowered border, shadows are on top and
 123:    * highlights are underneath.).
 124:    *
 125:    * @param type An int specifying either BevelBorder.LOWERED or
 126:    *     BevelBorder.RAISED
 127:    *
 128:    * @return The Border object
 129:    */
 130:   public static Border createBevelBorder(int type)
 131:   {
 132:     return new BevelBorder(type);
 133:   }
 134: 
 135:   /**
 136:    * Create a beveled border of the specified type, using the specified
 137:    * highlighting and shadowing. The outer edge of the highlighted area uses
 138:    * a brighter shade of the highlight color. The inner edge of the shadow
 139:    * area uses a brighter shade of the shadaw color.
 140:    *
 141:    * @param type An int specifying either BevelBorder.LOWERED or
 142:    *     BevelBorder.RAISED
 143:    * @param highlight A Color object for highlights
 144:    * @param shadow A Color object for shadows
 145:    *
 146:    * @return The Border object
 147:    */
 148:   public static Border createBevelBorder(int type, Color highlight, Color shadow)
 149:   {
 150:     return new BevelBorder(type, highlight, shadow);
 151:   }
 152: 
 153:   /**
 154:    * Create a beveled border of the specified type, using the specified colors
 155:    * for the inner and outer highlight and shadow areas.
 156:    *
 157:    * @param type An int specifying either BevelBorder.LOWERED or
 158:    *     BevelBorder.RAISED
 159:    * @param highlightOuter A Color object for the outer edge of the
 160:    *     highlight area
 161:    * @param highlightInner A Color object for the inner edge of the
 162:    *     highlight area
 163:    * @param shadowOuter A Color object for the outer edge of the shadow area
 164:    * @param shadowInner A Color object for the inner edge of the shadow area
 165:    *
 166:    * @return The Border object
 167:    */
 168:   public static Border createBevelBorder(int type, Color highlightOuter,
 169:                                          Color highlightInner,
 170:                                          Color shadowOuter, Color shadowInner)
 171:   {
 172:     return new BevelBorder(type, highlightOuter, highlightInner, shadowOuter,
 173:                            shadowInner);
 174:   }
 175: 
 176:   /**
 177:    * Create a border with an "etched" look using the component's current
 178:    * background color for highlighting and shading.
 179:    *
 180:    * @return The Border object
 181:    */
 182:   public static Border createEtchedBorder()
 183:   {
 184:     return new EtchedBorder();
 185:   }
 186: 
 187:   /**
 188:    * Create a border with an "etched" look using the component's current
 189:    * background color for highlighting and shading.
 190:    *
 191:    * @return The Border object
 192:    */
 193:   public static Border createEtchedBorder(int etchType)
 194:   {
 195:     return new EtchedBorder(etchType);
 196:   }
 197: 
 198:   /**
 199:    * Create a border with an "etched" look using the specified highlighting and
 200:    * shading colors.
 201:    *
 202:    * @param highlight A Color object for the border highlights
 203:    * @param shadow A Color object for the border shadows
 204:    *
 205:    * @return The Border object
 206:    */
 207:   public static Border createEtchedBorder(Color highlight, Color shadow)
 208:   {
 209:     return new EtchedBorder(highlight, shadow);
 210:   }
 211: 
 212:   /**
 213:    * Create a border with an "etched" look using the specified highlighting and
 214:    * shading colors.
 215:    *
 216:    * @param highlight A Color object for the border highlights
 217:    * @param shadow A Color object for the border shadows
 218:    *
 219:    * @return The Border object
 220:    */
 221:   public static Border createEtchedBorder(int etchType, Color highlight,
 222:                                           Color shadow)
 223:   {
 224:     return new EtchedBorder(etchType, highlight, shadow);
 225:   }
 226: 
 227:   /**
 228:    * Create a new title border specifying the text of the title, using the
 229:    * default border (etched), using the default text position (sitting on the
 230:    * top line) and default justification (left) and using the default font and
 231:    * text color determined by the current look and feel.
 232:    *
 233:    * @param title A String containing the text of the title
 234:    *
 235:    * @return The TitledBorder object
 236:    */
 237:   public static TitledBorder createTitledBorder(String title)
 238:   {
 239:     return new TitledBorder(title);
 240:   }
 241: 
 242:   /**
 243:    * Create a new title border with an empty title specifying the border
 244:    * object, using the default text position (sitting on the top line) and
 245:    * default justification (left) and using the default font, text color,
 246:    * and border determined by the current look and feel. (The Motif and Windows
 247:    * look and feels use an etched border; The Java look and feel use a
 248:    * gray border.)
 249:    *
 250:    * @param border The Border object to add the title to
 251:    *
 252:    * @return The TitledBorder object
 253:    */
 254:   public static TitledBorder createTitledBorder(Border border)
 255:   {
 256:     return new TitledBorder(border);
 257:   }
 258: 
 259:   /**
 260:    * Add a title to an existing border, specifying the text of the title, using
 261:    * the default positioning (sitting on the top line) and default
 262:    * justification (left) and using the default font and text color determined
 263:    * by the current look and feel.
 264:    *
 265:    * @param border The Border object to add the title to
 266:    * @param title A String containing the text of the title
 267:    *
 268:    * @return The TitledBorder object
 269:    */
 270:   public static TitledBorder createTitledBorder(Border border, String title)
 271:   {
 272:     return new TitledBorder(border, title);
 273:   }
 274: 
 275:   /**
 276:    * Add a title to an existing border, specifying the text of the title along
 277:    * with its positioning, using the default font and text color determined by
 278:    * the current look and feel.
 279:    *
 280:    * @param border The Border object to add the title to
 281:    * @param title A String containing the text of the title
 282:    * @param titleJustification An int specifying the left/right position of
 283:    *     the title -- one of TitledBorder.LEFT, TitledBorder.CENTER, or
 284:    *     TitledBorder.RIGHT, TitledBorder.DEFAULT_JUSTIFICATION (left).
 285:    * @param titlePosition An int specifying the vertical position of the text
 286:    *     in relation to the border -- one of: TitledBorder.ABOVE_TOP,
 287:    *     TitledBorder.TOP (sitting on the top line), TitledBorder.BELOW_TOP,
 288:    *     TitledBorder.ABOVE_BOTTOM, TitledBorder.BOTTOM (sitting on the bottom
 289:    *     line), TitledBorder.BELOW_BOTTOM, or TitledBorder.DEFAULT_POSITION
 290:    *     (top).
 291:    *
 292:    * @return The TitledBorder object
 293:    */
 294:   public static TitledBorder createTitledBorder(Border border, String title,
 295:                                                 int titleJustification,
 296:                                                 int titlePosition)
 297:   {
 298:     return new TitledBorder(border, title, titleJustification, titlePosition);
 299:   }
 300: 
 301:   /**
 302:    * Add a title to an existing border, specifying the text of the title along
 303:    * with its positioning and font, using the default text color determined by
 304:    * the current look and feel.
 305:    *
 306:    * @param border - the Border object to add the title to
 307:    * @param title - a String containing the text of the title
 308:    * @param titleJustification - an int specifying the left/right position of
 309:    *     the title -- one of TitledBorder.LEFT, TitledBorder.CENTER, or
 310:    *     TitledBorder.RIGHT, TitledBorder.DEFAULT_JUSTIFICATION (left).
 311:    * @param titlePosition - an int specifying the vertical position of the
 312:    *     text in relation to the border -- one of: TitledBorder.ABOVE_TOP,
 313:    *     TitledBorder.TOP (sitting on the top line), TitledBorder.BELOW_TOP,
 314:    *     TitledBorder.ABOVE_BOTTOM, TitledBorder.BOTTOM (sitting on the bottom
 315:    *     line), TitledBorder.BELOW_BOTTOM, or TitledBorder.DEFAULT_POSITION (top).
 316:    * @param titleFont - a Font object specifying the title font
 317:    *
 318:    * @return The TitledBorder object
 319:    */
 320:   public static TitledBorder createTitledBorder(Border border, String title,
 321:                                                 int titleJustification,
 322:                                                 int titlePosition,
 323:                                                 Font titleFont)
 324:   {
 325:     return new TitledBorder(border, title, titleJustification, titlePosition,
 326:                             titleFont);
 327:   }
 328: 
 329:   /**
 330:    * Add a title to an existing border, specifying the text of the title along
 331:    * with its positioning, font, and color.
 332:    *
 333:    * @param border - the Border object to add the title to
 334:    * @param title - a String containing the text of the title
 335:    * @param titleJustification - an int specifying the left/right position of
 336:    *     the title -- one of TitledBorder.LEFT, TitledBorder.CENTER, or
 337:    *     TitledBorder.RIGHT, TitledBorder.DEFAULT_JUSTIFICATION (left).
 338:    * @param titlePosition - an int specifying the vertical position of the text
 339:    *     in relation to the border -- one of: TitledBorder.ABOVE_TOP,
 340:    *     TitledBorder.TOP (sitting on the top line), TitledBorder.BELOW_TOP,
 341:    *     TitledBorder.ABOVE_BOTTOM, TitledBorder.BOTTOM (sitting on the bottom
 342:    *     line), TitledBorder.BELOW_BOTTOM, or TitledBorder.DEFAULT_POSITION (top).
 343:    * @param titleFont - a Font object specifying the title font
 344:    * @param titleColor - a Color object specifying the title color
 345:    *
 346:    * @return The TitledBorder object
 347:    */
 348:   public static TitledBorder createTitledBorder(Border border, String title,
 349:                                                 int titleJustification,
 350:                                                 int titlePosition,
 351:                                                 Font titleFont, Color titleColor)
 352:   {
 353:     return new TitledBorder(border, title, titleJustification, titlePosition,
 354:                             titleFont, titleColor);
 355:   }
 356: 
 357:   /**
 358:    * Creates an empty border that takes up no space. (The width of the top,
 359:    * bottom, left, and right sides are all zero.)
 360:    *
 361:    * @return The Border object
 362:    */
 363:   public static Border createEmptyBorder()
 364:   {
 365:     return new EmptyBorder(0, 0, 0, 0);
 366:   }
 367: 
 368:   /**
 369:    * Creates an empty border that takes up no space but which does no drawing,
 370:    * specifying the width of the top, left, bottom, and right sides.
 371:    *
 372:    * @param top An int specifying the width of the top in pixels
 373:    * @param left An int specifying the width of the left side in pixels
 374:    * @param bottom An int specifying the width of the right side in pixels
 375:    * @param right An int specifying the width of the bottom in pixels
 376:    *
 377:    * @return The Border object
 378:    */
 379:   public static Border createEmptyBorder(int top, int left, int bottom,
 380:                                          int right)
 381:   {
 382:     return new EmptyBorder(top, left, bottom, right);
 383:   }
 384: 
 385:   /**
 386:    * Create a compound border with a null inside edge and a null outside edge.
 387:    *
 388:    * @return The CompoundBorder object
 389:    */
 390:   public static CompoundBorder createCompoundBorder()
 391:   {
 392:     return new CompoundBorder();
 393:   }
 394: 
 395:   /**
 396:    * Create a compound border specifying the border objects to use for the
 397:    * outside and inside edges.
 398:    *
 399:    * @param outsideBorder A Border object for the outer edge of the
 400:    *     compound border
 401:    * @param insideBorder A Border object for the inner edge of the
 402:    *     compound border
 403:    *
 404:    * @return The CompoundBorder object
 405:    */
 406:   public static CompoundBorder createCompoundBorder(Border outsideBorder,
 407:                                                     Border insideBorder)
 408:   {
 409:     return new CompoundBorder(outsideBorder, insideBorder);
 410:   }
 411: 
 412:   /**
 413:    * Create a matte-look border using a solid color. (The difference between
 414:    * this border and a line border is that you can specify the individual border
 415:    * dimensions.)
 416:    *
 417:    * @param top
 418:    *          An int specifying the width of the top in pixels
 419:    * @param left
 420:    *          An int specifying the width of the left side in pixels
 421:    * @param bottom
 422:    *          An int specifying the width of the right side in pixels
 423:    * @param right
 424:    *          An int specifying the width of the bottom in pixels
 425:    * @param color
 426:    *          A Color to use for the border
 427:    * @return The MatteBorder object
 428:    */
 429:   public static MatteBorder createMatteBorder(int top, int left, int bottom,
 430:                                               int right, Color color)
 431:   {
 432:     return new MatteBorder(top, left, bottom, right, color);
 433:   }
 434: 
 435:   /**
 436:    * Create a matte-look border that consists of multiple tiles of a specified
 437:    * icon. Multiple copies of the icon are placed side-by-side to fill up the
 438:    * border area.
 439:    *
 440:    * Note:
 441:    * If the icon doesn't load, the border area is painted gray.
 442:    *
 443:    * @param top An int specifying the width of the top in pixels
 444:    * @param left An int specifying the width of the left side in pixels
 445:    * @param bottom An int specifying the width of the right side in pixels
 446:    * @param right An int specifying the width of the bottom in pixels
 447:    * @param tileIcon The Icon object used for the border tiles
 448:    *
 449:    * @return The MatteBorder object
 450:    */
 451:   public static MatteBorder createMatteBorder(int top, int left, int bottom,
 452:                                               int right, Icon tileIcon)
 453:   {
 454:     return new MatteBorder(top, left, bottom, right, tileIcon);
 455:   }
 456: }