01: /*
02: * Copyright (c) 2004 JGoodies Karsten Lentzsch. All Rights Reserved.
03: *
04: * Redistribution and use in source and binary forms, with or without
05: * modification, are permitted provided that the following conditions are met:
06: *
07: * o Redistributions of source code must retain the above copyright notice,
08: * this list of conditions and the following disclaimer.
09: *
10: * o Redistributions in binary form must reproduce the above copyright notice,
11: * this list of conditions and the following disclaimer in the documentation
12: * and/or other materials provided with the distribution.
13: *
14: * o Neither the name of JGoodies Karsten Lentzsch nor the names of
15: * its contributors may be used to endorse or promote products derived
16: * from this software without specific prior written permission.
17: *
18: * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
19: * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
20: * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
21: * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
22: * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
23: * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
24: * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
25: * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
26: * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
27: * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
28: * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29: */
30: package com.pagosoft.swing;
31:
32: import java.awt.*;
33:
34: import javax.swing.*;
35: import javax.swing.border.*;
36:
37: public class ShadowBorder extends AbstractBorder {
38: private static ShadowBorder instance;
39:
40: public static ShadowBorder getInstance() {
41: if (instance == null) {
42: instance = new ShadowBorder();
43: }
44: return instance;
45: }
46:
47: private ShadowBorder() {
48: }
49:
50: private Insets borderInsets = new Insets(0, 0, 5, 5);
51: private Image shadow = new ImageIcon(ShadowBorder.class
52: .getResource("shadow.png")).getImage();
53:
54: public void paintBorder(Component c, Graphics g, int x, int y,
55: int width, int height) {
56: g.drawImage(shadow, x + 5, y + height - 5, x + 10, y + height,
57: 0, 6, 5, 11, null, c);
58: g.drawImage(shadow, x + 10, y + height - 5, x + width - 5, y
59: + height, 5, 6, 6, 11, null, c);
60: g.drawImage(shadow, x + width - 5, y + 5, x + width, y + 10, 6,
61: 0, 11, 5, null, c);
62: g.drawImage(shadow, x + width - 5, y + 10, x + width, y
63: + height - 5, 6, 5, 11, 6, null, c);
64: g.drawImage(shadow, x + width - 5, y + height - 5, x + width, y
65: + height, 6, 6, 11, 11, null, c);
66: }
67:
68: public Insets getBorderInsets(Component c) {
69: return borderInsets;
70: }
71:
72: public boolean isBorderOpaque() {
73: return false;
74: }
75: }
|