001 /* BorderUIResource.java 002 Copyright (C) 2002, 2003, 2004 Free Software Foundation, Inc. 003 004 This file is part of GNU Classpath. 005 006 GNU Classpath is free software; you can redistribute it and/or modify 007 it under the terms of the GNU General Public License as published by 008 the Free Software Foundation; either version 2, or (at your option) 009 any later version. 010 011 GNU Classpath is distributed in the hope that it will be useful, but 012 WITHOUT ANY WARRANTY; without even the implied warranty of 013 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 014 General Public License for more details. 015 016 You should have received a copy of the GNU General Public License 017 along with GNU Classpath; see the file COPYING. If not, write to the 018 Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 019 02110-1301 USA. 020 021 Linking this library statically or dynamically with other modules is 022 making a combined work based on this library. Thus, the terms and 023 conditions of the GNU General Public License cover the whole 024 combination. 025 026 As a special exception, the copyright holders of this library give you 027 permission to link this library with independent modules to produce an 028 executable, regardless of the license terms of these independent 029 modules, and to copy and distribute the resulting executable under 030 terms of your choice, provided that you also meet, for each linked 031 independent module, the terms and conditions of the license of that 032 module. An independent module is a module which is not derived from 033 or based on this library. If you modify this library, you may extend 034 this exception to your version of the library, but you are not 035 obligated to do so. If you do not wish to do so, delete this 036 exception statement from your version. */ 037 038 039 package javax.swing.plaf; 040 041 import java.awt.Color; 042 import java.awt.Component; 043 import java.awt.Font; 044 import java.awt.Graphics; 045 import java.awt.Insets; 046 import java.io.Serializable; 047 048 import javax.swing.Icon; 049 import javax.swing.border.BevelBorder; 050 import javax.swing.border.Border; 051 import javax.swing.border.CompoundBorder; 052 import javax.swing.border.EmptyBorder; 053 import javax.swing.border.EtchedBorder; 054 import javax.swing.border.LineBorder; 055 import javax.swing.border.MatteBorder; 056 import javax.swing.border.TitledBorder; 057 058 /** 059 * A wrapper for {@link javax.swing.border.Border} that also 060 * implements the {@link UIResource} marker interface. This is useful 061 * for implementing pluggable look-and-feels: When switching the 062 * current LookAndFeel, only those borders are replaced that are 063 * marked as {@link UIResource}. For this reason, a look-and-feel 064 * should always install borders that implement 065 * <code>UIResource</code>, such as the borders provided by this 066 * class. 067 * 068 * @serial 069 * @serialField delegate Border the <code>Border</code> wrapped 070 * 071 * @author Brian Jones (cbj@gnu.org) 072 * @author Sascha Brawer (brawer@dandelis.ch) 073 */ 074 public class BorderUIResource implements Border, UIResource, Serializable 075 { 076 /** 077 * Verified using the <code>serialver</code> tool 078 * of Apple/Sun JDK 1.3.1 on MacOS X 10.1.5. 079 */ 080 static final long serialVersionUID = -3440553684010079691L; 081 082 083 /** 084 * A shared instance of an {@link EtchedBorderUIResource}, or 085 * <code>null</code> if the {@link #getEtchedBorderUIResource()} 086 * method has not yet been called. 087 */ 088 private static Border etchedBorderUIResource; 089 090 091 /** 092 * A shared instance of a {@link BevelBorderUIResource} whose 093 * <code>bevelType</code> is {@link 094 * javax.swing.border.BevelBorder#LOWERED}, or <code>null</code> if 095 * the {@link #getLoweredBevelBorderUIResource()} has not yet been 096 * called. 097 */ 098 private static Border loweredBevelBorderUIResource; 099 100 101 /** 102 * A shared instance of a {@link BevelBorderUIResource} whose 103 * <code>bevelType</code> is {@link 104 * javax.swing.border.BevelBorder#RAISED}, or <code>null</code> if 105 * the {@link #getRaisedBevelBorderUIResource()} has not yet been 106 * called. 107 */ 108 private static Border raisedBevelBorderUIResource; 109 110 111 /** 112 * A shared instance of a {@link LineBorderUIResource} for 113 * a one-pixel thick black line, or <code>null</code> if 114 * the {@link #getBlackLineBorderUIResource()} has not yet been 115 * called. 116 */ 117 private static Border blackLineBorderUIResource; 118 119 120 /** 121 * Returns a shared instance of an etched border which also 122 * is marked as an {@link UIResource}. 123 * 124 * @see javax.swing.border.EtchedBorder 125 */ 126 public static Border getEtchedBorderUIResource() 127 { 128 /* Swing is not designed to be thread-safe, so there is no 129 * need to synchronize the access to the global variable. 130 */ 131 if (etchedBorderUIResource == null) 132 etchedBorderUIResource = new EtchedBorderUIResource(); 133 return etchedBorderUIResource; 134 } 135 136 137 /** 138 * Returns a shared instance of {@link BevelBorderUIResource} whose 139 * <code>bevelType</code> is {@link 140 * javax.swing.border.BevelBorder#LOWERED}. 141 * 142 * @see javax.swing.border.BevelBorder 143 */ 144 public static Border getLoweredBevelBorderUIResource() 145 { 146 /* Swing is not designed to be thread-safe, so there is no 147 * need to synchronize the access to the global variable. 148 */ 149 if (loweredBevelBorderUIResource == null) 150 loweredBevelBorderUIResource = new BevelBorderUIResource( 151 BevelBorder.LOWERED); 152 return loweredBevelBorderUIResource; 153 } 154 155 156 /** 157 * Returns a shared instance of {@link BevelBorderUIResource} whose 158 * <code>bevelType</code> is {@link 159 * javax.swing.border.BevelBorder#RAISED}. 160 * 161 * @see javax.swing.border.BevelBorder 162 */ 163 public static Border getRaisedBevelBorderUIResource() 164 { 165 /* Swing is not designed to be thread-safe, so there is no 166 * need to synchronize the access to the global variable. 167 */ 168 if (raisedBevelBorderUIResource == null) 169 raisedBevelBorderUIResource = new BevelBorderUIResource( 170 BevelBorder.RAISED); 171 return raisedBevelBorderUIResource; 172 } 173 174 175 /** 176 * Returns a shared instance of {@link LineBorderUIResource} for 177 * a black, one-pixel width border. 178 * 179 * @see javax.swing.border.LineBorder 180 */ 181 public static Border getBlackLineBorderUIResource() 182 { 183 /* Swing is not designed to be thread-safe, so there is no 184 * need to synchronize the access to the global variable. 185 */ 186 if (blackLineBorderUIResource == null) 187 blackLineBorderUIResource = new LineBorderUIResource(Color.black); 188 return blackLineBorderUIResource; 189 } 190 191 192 /** 193 * The wrapped border. 194 */ 195 private Border delegate; 196 197 198 /** 199 * Constructs a <code>BorderUIResource</code> for wrapping 200 * a <code>Border</code> object. 201 * 202 * @param delegate the border to be wrapped. 203 */ 204 public BorderUIResource(Border delegate) 205 { 206 if (delegate == null) 207 throw new IllegalArgumentException(); 208 209 this.delegate = delegate; 210 } 211 212 213 /** 214 * Paints the border around an enclosed component by calling 215 * the <code>paintBorder</code> method of the wrapped delegate. 216 * 217 * @param c the component whose border is to be painted. 218 * @param g the graphics for painting. 219 * @param x the horizontal position for painting the border. 220 * @param y the vertical position for painting the border. 221 * @param width the width of the available area for painting the border. 222 * @param height the height of the available area for painting the border. 223 */ 224 public void paintBorder(Component c, Graphics g, 225 int x, int y, int width, int height) 226 { 227 delegate.paintBorder(c, g, x, y, width, height); 228 } 229 230 231 /** 232 * Measures the width of this border by calling the 233 * <code>getBorderInsets</code> method of the wrapped 234 * delegate. 235 * 236 * @param c the component whose border is to be measured. 237 * 238 * @return an Insets object whose <code>left</code>, <code>right</code>, 239 * <code>top</code> and <code>bottom</code> fields indicate the 240 * width of the border at the respective edge. 241 */ 242 public Insets getBorderInsets(Component c) 243 { 244 return delegate.getBorderInsets(c); 245 } 246 247 248 /** 249 * Determines whether this border fills every pixel in its area 250 * when painting by calling the <code>isBorderOpaque</code> 251 * method of the wrapped delegate. 252 * 253 * @return <code>true</code> if the border is fully opaque, or 254 * <code>false</code> if some pixels of the background 255 * can shine through the border. 256 */ 257 public boolean isBorderOpaque() 258 { 259 return delegate.isBorderOpaque(); 260 } 261 262 263 /** 264 * A {@link javax.swing.border.BevelBorder} that also implements the 265 * {@link UIResource} marker interface. This is useful for 266 * implementing pluggable look-and-feels: When switching the current 267 * LookAndFeel, only those borders are replaced that are marked as 268 * {@link UIResource}. For this reason, a look-and-feel should 269 * always install borders that implement <code>UIResource</code>, 270 * such as the borders provided by this class. 271 * 272 * @author Brian Jones (cbj@gnu.org) 273 * @author Sascha Brawer (brawer@dandelis.ch) 274 */ 275 public static class BevelBorderUIResource 276 extends BevelBorder 277 implements UIResource, Serializable 278 { 279 private static final long serialVersionUID = -1275542891108351642L; 280 281 /** 282 * Constructs a BevelBorderUIResource whose colors will be derived 283 * from the background of the enclosed component. The background 284 * color is retrieved each time the border is painted, so a border 285 * constructed by this method will automatically reflect a change 286 * to the component’s background color. 287 * 288 * <p><img src="../border/doc-files/BevelBorder-1.png" 289 * width="500" height="150" 290 * alt="[An illustration showing raised and lowered BevelBorders]" /></p> 291 * 292 * @param bevelType the desired appearance of the border. The value 293 * must be either {@link javax.swing.border.BevelBorder#RAISED} 294 * or {@link javax.swing.border.BevelBorder#LOWERED}. 295 * 296 * @throws IllegalArgumentException if <code>bevelType</code> has 297 * an unsupported value. 298 */ 299 public BevelBorderUIResource(int bevelType) 300 { 301 super(bevelType); 302 } 303 304 305 /** 306 * Constructs a BevelBorderUIResource given its appearance type 307 * and two colors for its highlight and shadow. 308 * 309 * <p><img src="../border/doc-files/BevelBorder-2.png" width="500" 310 * height="150" alt="[An illustration showing BevelBorders that were 311 * constructed with this method]" /></p> 312 * 313 * @param bevelType the desired appearance of the border. The value 314 * must be either {@link javax.swing.border.BevelBorder#RAISED} 315 * or {@link javax.swing.border.BevelBorder#LOWERED}. 316 * 317 * @param highlight the color that will be used for the inner side 318 * of the highlighted edges (top and left if if 319 * <code>bevelType</code> is {@link 320 * javax.swing.border.BevelBorder#RAISED}; bottom and right 321 * otherwise). The color for the outer side is a brightened 322 * version of this color. 323 * 324 * @param shadow the color that will be used for the outer side of 325 * the shadowed edges (bottom and right if 326 * <code>bevelType</code> is {@link 327 * javax.swing.border.BevelBorder#RAISED}; top and left 328 * otherwise). The color for the inner side is a brightened 329 * version of this color. 330 * 331 * @throws IllegalArgumentException if <code>bevelType</code> has 332 * an unsupported value. 333 * 334 * @throws NullPointerException if <code>highlight</code> or 335 * <code>shadow</code> is <code>null</code>. 336 */ 337 public BevelBorderUIResource(int bevelType, 338 Color highlight, 339 Color shadow) 340 { 341 super(bevelType, highlight, shadow); 342 } 343 344 345 /** 346 * Constructs a BevelBorderUIResource given its appearance type 347 * and all its colors. 348 * 349 * <p><img src="../border/doc-files/BevelBorder-3.png" width="500" 350 * height="150" alt="[An illustration showing BevelBorders that 351 * were constructed with this method]" /></p> 352 * 353 * @param bevelType the desired appearance of the border. The value 354 * must be either {@link javax.swing.border.BevelBorder#RAISED} 355 * or {@link javax.swing.border.BevelBorder#LOWERED}. 356 * 357 * @param highlightOuter the color that will be used for the outer 358 * side of the highlighted edges (top and left if 359 * <code>bevelType</code> is {@link 360 * javax.swing.border.BevelBorder#RAISED}; bottom and right 361 * otherwise). 362 * 363 * @param highlightInner the color that will be used for the inner 364 * side of the highlighted edges. 365 * 366 * @param shadowOuter the color that will be used for the outer 367 * side of the shadowed edges (bottom and right if 368 * <code>bevelType</code> is {@link 369 * javax.swing.border.BevelBorder#RAISED}; top and left 370 * otherwise). 371 * 372 * @param shadowInner the color that will be used for the inner 373 * side of the shadowed edges. 374 * 375 * @throws IllegalArgumentException if <code>bevelType</code> has 376 * an unsupported value. 377 * 378 * @throws NullPointerException if one of the passed colors 379 * is <code>null</code>. 380 */ 381 public BevelBorderUIResource(int bevelType, 382 Color highlightOuter, 383 Color highlightInner, 384 Color shadowOuter, 385 Color shadowInner) 386 { 387 super(bevelType, 388 highlightOuter, highlightInner, 389 shadowOuter, shadowInner); 390 } 391 } 392 393 394 /** 395 * A {@link javax.swing.border.CompoundBorder} that also implements the 396 * {@link UIResource} marker interface. This is useful for 397 * implementing pluggable look-and-feels: When switching the current 398 * LookAndFeel, only those borders are replaced that are marked as 399 * {@link UIResource}. For this reason, a look-and-feel should 400 * always install borders that implement <code>UIResource</code>, 401 * such as the borders provided by this class. 402 * 403 * @author Brian Jones (cbj@gnu.org) 404 * @author Sascha Brawer (brawer@dandelis.ch) 405 */ 406 public static class CompoundBorderUIResource 407 extends CompoundBorder 408 implements UIResource, Serializable 409 { 410 private static final long serialVersionUID = 7550017084975167341L; 411 412 /** 413 * Constructs a CompoundBorderUIResource with the specified inside 414 * and outside borders. 415 * 416 * @param outsideBorder the outside border, which is painted to the 417 * outside of both <code>insideBorder</code> and the enclosed 418 * component. It is acceptable to pass <code>null</code>, in 419 * which case no outside border is painted. 420 * 421 * @param insideBorder the inside border, which is painted to 422 * between <code>outsideBorder</code> and the enclosed 423 * component. It is acceptable to pass <code>null</code>, in 424 * which case no inside border is painted. 425 */ 426 public CompoundBorderUIResource(Border outsideBorder, 427 Border insideBorder) 428 { 429 super(outsideBorder, insideBorder); 430 } 431 } 432 433 434 /** 435 * An {@link javax.swing.border.EmptyBorder} that also implements the 436 * {@link UIResource} marker interface. This is useful for 437 * implementing pluggable look-and-feels: When switching the current 438 * LookAndFeel, only those borders are replaced that are marked as 439 * {@link UIResource}. For this reason, a look-and-feel should 440 * always install borders that implement <code>UIResource</code>, 441 * such as the borders provided by this class. 442 * 443 * <p><img src="../border/doc-files/EmptyBorder-1.png" 444 * width="290" height="200" 445 * alt="[An illustration of EmptyBorder]" /></p> 446 * 447 * @author Brian Jones (cbj@gnu.org) 448 * @author Sascha Brawer (brawer@dandelis.ch) 449 */ 450 public static class EmptyBorderUIResource 451 extends EmptyBorder 452 implements UIResource, Serializable 453 { 454 private static final long serialVersionUID = -4914187529340071708L; 455 456 /** 457 * Constructs an empty border given the number of pixels required 458 * on each side. 459 * 460 * @param top the number of pixels that the border will need 461 * for its top edge. 462 * 463 * @param left the number of pixels that the border will need 464 * for its left edge. 465 * 466 * @param bottom the number of pixels that the border will need 467 * for its bottom edge. 468 * 469 * @param right the number of pixels that the border will need 470 * for its right edge. 471 */ 472 public EmptyBorderUIResource(int top, int left, int bottom, int right) 473 { 474 super(top, left, bottom, right); 475 } 476 477 478 /** 479 * Constructs an empty border given the number of pixels required 480 * on each side, passed in an Insets object. 481 * 482 * @param insets the Insets for the new border. 483 */ 484 public EmptyBorderUIResource(Insets insets) 485 { 486 super(insets); 487 } 488 } 489 490 491 /** 492 * An {@link javax.swing.border.EtchedBorder} that also implements the 493 * {@link UIResource} marker interface. This is useful for 494 * implementing pluggable look-and-feels: When switching the current 495 * LookAndFeel, only those borders are replaced that are marked as 496 * {@link UIResource}. For this reason, a look-and-feel should 497 * always install borders that implement <code>UIResource</code>, 498 * such as the borders provided by this class. 499 * 500 * <p><img src="../border/doc-files/EtchedBorder-1.png" width="500" 501 * height="200" alt="[An illustration of the two EtchedBorder 502 * variants]" /></p> 503 * 504 * @author Brian Jones (cbj@gnu.org) 505 * @author Sascha Brawer (brawer@dandelis.ch) 506 */ 507 public static class EtchedBorderUIResource 508 extends EtchedBorder 509 implements UIResource, Serializable 510 { 511 private static final long serialVersionUID = -8186391754165296656L; 512 513 /** 514 * Constructs an EtchedBorderUIResource that appears lowered into 515 * the surface. The colors will be derived from the background 516 * color of the enclosed Component when the border gets painted. 517 */ 518 public EtchedBorderUIResource() 519 { 520 super(); 521 } 522 523 524 /** 525 * Constructs an EtchedBorderUIResource with the specified 526 * appearance. The colors will be derived from the background 527 * color of the enclosed Component when the border gets painted. 528 * 529 * <p><img src="../border/doc-files/EtchedBorder-1.png" 530 * width="500" height="200" alt="[An illustration of the two 531 * EtchedBorder variants]" /></p> 532 * 533 * @param etchType the desired appearance of the border. The value 534 * must be either {@link javax.swing.border.EtchedBorder#RAISED} 535 * or {@link javax.swing.border.EtchedBorder#LOWERED}. 536 * 537 * @throws IllegalArgumentException if <code>etchType</code> has 538 * an unsupported value. 539 */ 540 public EtchedBorderUIResource(int etchType) 541 { 542 super(etchType); 543 } 544 545 546 /** 547 * Constructs a lowered EtchedBorderUIResource, explicitly 548 * selecting the colors that will be used for highlight and 549 * shadow. 550 * 551 * @param highlight the color that will be used for painting 552 * the highlight part of the border. 553 * 554 * @param shadow the color that will be used for painting 555 * the shadow part of the border. 556 * 557 * @see EtchedBorderUIResource#EtchedBorderUIResource(int, Color, Color) 558 */ 559 public EtchedBorderUIResource(Color highlight, Color shadow) 560 { 561 super(highlight, shadow); 562 } 563 564 565 /** 566 * Constructs an EtchedBorderUIResource with the specified 567 * appearance, explicitly selecting the colors that will be used 568 * for highlight and shadow. 569 * 570 * <p><img src="../border/doc-files/EtchedBorder-2.png" width="500" 571 * height="200" alt="[An illustration that shows which pixels get 572 * painted in what color]" /></p> 573 * 574 * @param etchType the desired appearance of the border. The value 575 * must be either {@link javax.swing.border.EtchedBorder#RAISED} 576 * or {@link javax.swing.border.EtchedBorder#LOWERED}. 577 * 578 * @param highlight the color that will be used for painting 579 * the highlight part of the border. 580 * 581 * @param shadow the color that will be used for painting 582 * the shadow part of the border. 583 * 584 * @throws IllegalArgumentException if <code>etchType</code> has 585 * an unsupported value. 586 */ 587 public EtchedBorderUIResource(int etchType, 588 Color highlight, Color shadow) 589 { 590 super(etchType, highlight, shadow); 591 } 592 } 593 594 595 /** 596 * A {@link javax.swing.border.LineBorder} that also implements the 597 * {@link UIResource} marker interface. This is useful for 598 * implementing pluggable look-and-feels: When switching the current 599 * LookAndFeel, only those borders are replaced that are marked as 600 * {@link UIResource}. For this reason, a look-and-feel should 601 * always install borders that implement <code>UIResource</code>, 602 * such as the borders provided by this class. 603 * 604 * <p><img src="../border/doc-files/LineBorder-1.png" width="500" 605 * height="200" alt="[An illustration of two LineBorders]" /></p> 606 * 607 * @author Brian Jones (cbj@gnu.org) 608 * @author Sascha Brawer (brawer@dandelis.ch) 609 */ 610 public static class LineBorderUIResource 611 extends LineBorder 612 implements UIResource, Serializable 613 { 614 private static final long serialVersionUID = -6171232338180172310L; 615 616 /** 617 * Constructs a LineBorderUIResource given its color. The border 618 * will be one pixel thick and have plain corners. 619 * 620 * @param color the color for drawing the border. 621 */ 622 public LineBorderUIResource(Color color) 623 { 624 super(color); 625 } 626 627 628 /** 629 * Constructs a LineBorder given its color and thickness. The 630 * border will have plain corners. 631 * 632 * @param color the color for drawing the border. 633 * @param thickness the width of the line in pixels. 634 */ 635 public LineBorderUIResource(Color color, int thickness) 636 { 637 super(color, thickness); 638 } 639 640 641 /* Note: Since JDK1.3, javax.swing.border.LineBorder also has a 642 * constructor which accepts a value for the roundedCorners 643 * property. However, as of JDK1.4.1, the LineBorderUIResource 644 * subclass does not have a corresponding constructor. 645 * 646 * A request for enhancing the Swing API has been filed with Sun: 647 * http://developer.java.sun.com/developer/bugParade/bugs/4879999.html 648 */ 649 } 650 651 652 /** 653 * A {@link javax.swing.border.MatteBorder} that also implements the 654 * {@link UIResource} marker interface. This is useful for 655 * implementing pluggable look-and-feels: When switching the current 656 * LookAndFeel, only those borders are replaced that are marked as 657 * {@link UIResource}. For this reason, a look-and-feel should 658 * always install borders that implement <code>UIResource</code>, 659 * such as the borders provided by this class. 660 * 661 * <p><img src="../border/doc-files/MatteBorder-1.png" width="500" 662 * height="150" alt="[An illustration of two MatteBorders]" /></p> 663 * 664 * @author Brian Jones (cbj@gnu.org) 665 * @author Sascha Brawer (brawer@dandelis.ch) 666 */ 667 public static class MatteBorderUIResource 668 extends MatteBorder 669 implements UIResource, Serializable 670 { 671 private static final long serialVersionUID = -8107923147541851122L; 672 673 /** 674 * Constructs a MatteBorderUIResource given the width on each side 675 * and a fill color. 676 * 677 * <p><img src="../border/doc-files/MatteBorder-2.png" width="500" 678 * height="150" alt="[A picture of a MatteBorder made by this 679 * constructor]" /></p> 680 * 681 * @param top the width of the border at its top edge. 682 * @param left the width of the border at its left edge. 683 * @param bottom the width of the border at its bottom edge. 684 * @param right the width of the border at its right edge. 685 * @param color the color for filling the border. 686 */ 687 public MatteBorderUIResource(int top, int left, 688 int bottom, int right, 689 Color color) 690 { 691 super(top, left, bottom, right, color); 692 } 693 694 695 /** 696 * Constructs a MatteBorderUIResource given the width on each side 697 * and an icon for tiling the border area. 698 * 699 * <p><img src="../border/doc-files/MatteBorder-4.png" width="500" 700 * height="150" alt="[A picture of a MatteBorder made by this 701 * constructor]" /></p> 702 * 703 * @param top the width of the border at its top edge. 704 * @param left the width of the border at its left edge. 705 * @param bottom the width of the border at its bottom edge. 706 * @param right the width of the border at its right edge. 707 * @param tileIcon an icon for tiling the border area. 708 */ 709 public MatteBorderUIResource(int top, int left, 710 int bottom, int right, 711 Icon tileIcon) 712 { 713 super(top, left, bottom, right, tileIcon); 714 } 715 716 717 /** 718 * Constructs a MatteBorderUIResource given an icon for tiling the 719 * border area. The icon width is used for the border insets at 720 * the left and right edge, the icon height for the top and bottom 721 * edge. 722 * 723 * <p><img src="../border/doc-files/MatteBorder-6.png" width="500" 724 * height="150" alt="[A picture of a MatteBorder made by this 725 * constructor]" /></p> 726 * 727 * @param tileIcon an icon for tiling the border area. 728 */ 729 public MatteBorderUIResource(Icon tileIcon) 730 { 731 super(tileIcon); 732 } 733 } 734 735 736 /** 737 * A {@link javax.swing.border.TitledBorder} that also implements the 738 * {@link UIResource} marker interface. This is useful for 739 * implementing pluggable look-and-feels: When switching the current 740 * LookAndFeel, only those borders are replaced that are marked as 741 * {@link UIResource}. For this reason, a look-and-feel should 742 * always install borders that implement <code>UIResource</code>, 743 * such as the borders provided by this class. 744 * 745 * @author Brian Jones (cbj@gnu.org) 746 * @author Sascha Brawer (brawer@dandelis.ch) 747 */ 748 public static class TitledBorderUIResource 749 extends TitledBorder 750 implements UIResource, Serializable 751 { 752 private static final long serialVersionUID = 7667113547406407427L; 753 754 /** 755 * Constructs a TitledBorderUIResource given the text of its title. 756 * 757 * @param title the title text, or <code>null</code> to use no 758 * title text. 759 */ 760 public TitledBorderUIResource(String title) 761 { 762 super(title); 763 } 764 765 766 /** 767 * Constructs an initially untitled TitledBorderUIResource 768 * given another border. 769 * 770 * @param border the border underneath the title, or 771 * <code>null</code> to use a default from 772 * the current look and feel. 773 */ 774 public TitledBorderUIResource(Border border) 775 { 776 super(border); 777 } 778 779 780 /** 781 * Constructs a TitledBorder given its border and title text. 782 * 783 * @param border the border underneath the title, or 784 * <code>null</code> to use a default from 785 * the current look and feel. 786 * 787 * @param title the title text, or <code>null</code> 788 * to use no title text. 789 */ 790 public TitledBorderUIResource(Border border, String title) 791 { 792 super(border, title); 793 } 794 795 796 /** 797 * Constructs a TitledBorderUIResource given its border, title 798 * text, horizontal alignment, and vertical position. 799 * 800 * @param border the border underneath the title, or 801 * <code>null</code> to use a default 802 * from the current look and feel. 803 * 804 * @param title the title text, or <code>null</code> 805 * to use no title text. 806 * 807 * @param titleJustification the horizontal alignment of the title 808 * text in relation to the border. The value must be one of 809 * {@link javax.swing.border.TitledBorder#LEFT}, 810 * {@link javax.swing.border.TitledBorder#CENTER}, 811 * {@link javax.swing.border.TitledBorder#RIGHT}, 812 * {@link javax.swing.border.TitledBorder#LEADING}, 813 * {@link javax.swing.border.TitledBorder#TRAILING}, or 814 * {@link javax.swing.border.TitledBorder#DEFAULT_JUSTIFICATION}. 815 * 816 * @param titlePosition the vertical position of the title text 817 * in relation to the border. The value must be one of 818 * {@link javax.swing.border.TitledBorder#ABOVE_TOP}, 819 * {@link javax.swing.border.TitledBorder#TOP}, 820 * {@link javax.swing.border.TitledBorder#BELOW_TOP}, 821 * {@link javax.swing.border.TitledBorder#ABOVE_BOTTOM}, 822 * {@link javax.swing.border.TitledBorder#BOTTOM}, 823 * {@link javax.swing.border.TitledBorder#BELOW_BOTTOM}, 824 * or {@link javax.swing.border.TitledBorder#DEFAULT_POSITION}. 825 * 826 * @throws IllegalArgumentException if <code>titleJustification</code> 827 * or <code>titlePosition</code> have an unsupported value. 828 */ 829 public TitledBorderUIResource(Border border, String title, 830 int titleJustification, 831 int titlePosition) 832 { 833 super(border, title, titleJustification, titlePosition); 834 } 835 836 837 /** 838 * Constructs a TitledBorder given its border, title text, 839 * horizontal alignment, vertical position, and font. 840 * 841 * @param border the border underneath the title, or 842 * <code>null</code> to use a default 843 * from the current look and feel. 844 * 845 * @param title the title text, or <code>null</code> 846 * to use no title text. 847 * 848 * @param titleJustification the horizontal alignment of the title 849 * text in relation to the border. The value must be one of 850 * {@link javax.swing.border.TitledBorder#LEFT}, 851 * {@link javax.swing.border.TitledBorder#CENTER}, 852 * {@link javax.swing.border.TitledBorder#RIGHT}, 853 * {@link javax.swing.border.TitledBorder#LEADING}, 854 * {@link javax.swing.border.TitledBorder#TRAILING}, or 855 * {@link javax.swing.border.TitledBorder#DEFAULT_JUSTIFICATION}. 856 * 857 * @param titlePosition the vertical position of the title text 858 * in relation to the border. The value must be one of 859 * {@link javax.swing.border.TitledBorder#ABOVE_TOP}, 860 * {@link javax.swing.border.TitledBorder#TOP}, 861 * {@link javax.swing.border.TitledBorder#BELOW_TOP}, 862 * {@link javax.swing.border.TitledBorder#ABOVE_BOTTOM}, 863 * {@link javax.swing.border.TitledBorder#BOTTOM}, 864 * {@link javax.swing.border.TitledBorder#BELOW_BOTTOM}, 865 * or {@link javax.swing.border.TitledBorder#DEFAULT_POSITION}. 866 * 867 * @param titleFont the font for the title text, or <code>null</code> 868 * to use a default from the current look and feel. 869 * 870 * @throws IllegalArgumentException if <code>titleJustification</code> 871 * or <code>titlePosition</code> have an unsupported value. 872 */ 873 public TitledBorderUIResource(Border border, String title, 874 int titleJustification, 875 int titlePosition, 876 Font titleFont) 877 { 878 super(border, title, titleJustification, titlePosition, 879 titleFont); 880 } 881 882 883 /** 884 * Constructs a TitledBorder given its border, title text, 885 * horizontal alignment, vertical position, font, and color. 886 * 887 * @param border the border underneath the title, or 888 * <code>null</code> to use a default 889 * from the current look and feel. 890 * 891 * @param title the title text, or <code>null</code> 892 * to use no title text. 893 * 894 * @param titleJustification the horizontal alignment of the title 895 * text in relation to the border. The value must be one of 896 * {@link javax.swing.border.TitledBorder#LEFT}, 897 * {@link javax.swing.border.TitledBorder#CENTER}, 898 * {@link javax.swing.border.TitledBorder#RIGHT}, 899 * {@link javax.swing.border.TitledBorder#LEADING}, 900 * {@link javax.swing.border.TitledBorder#TRAILING}, or 901 * {@link javax.swing.border.TitledBorder#DEFAULT_JUSTIFICATION}. 902 * 903 * @param titlePosition the vertical position of the title text 904 * in relation to the border. The value must be one of 905 * {@link javax.swing.border.TitledBorder#ABOVE_TOP}, 906 * {@link javax.swing.border.TitledBorder#TOP}, 907 * {@link javax.swing.border.TitledBorder#BELOW_TOP}, 908 * {@link javax.swing.border.TitledBorder#ABOVE_BOTTOM}, 909 * {@link javax.swing.border.TitledBorder#BOTTOM}, 910 * {@link javax.swing.border.TitledBorder#BELOW_BOTTOM}, 911 * or {@link javax.swing.border.TitledBorder#DEFAULT_POSITION}. 912 * 913 * @param titleFont the font for the title text, or <code>null</code> 914 * to use a default from the current look and feel. 915 * 916 * @param titleColor the color for the title text, or <code>null</code> 917 * to use a default from the current look and feel. 918 * 919 * @throws IllegalArgumentException if <code>titleJustification</code> 920 * or <code>titlePosition</code> have an unsupported value. 921 */ 922 public TitledBorderUIResource(Border border, String title, 923 int titleJustification, int titlePosition, 924 Font titleFont, Color titleColor) 925 { 926 super(border, title, titleJustification, titlePosition, 927 titleFont, titleColor); 928 } 929 } 930 } 931