1 /*
2 Copyright 2002-2006 Martin van den Bemt
3
4 Licensed under the Apache License, Version 2.0 (the "License");
5 you may not use this file except in compliance with the License.
6 You may obtain a copy of the License at
7
8 http://www.apache.org/licenses/LICENSE-2.0
9
10 Unless required by applicable law or agreed to in writing, software
11 distributed under the License is distributed on an "AS IS" BASIS,
12 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 See the License for the specific language governing permissions and
14 limitations under the License.
15 */
16 package org.xulux.guilayer.swing.extensions;
17
18 import java.awt.Color;
19 import java.awt.Component;
20 import java.awt.Graphics;
21
22 import javax.swing.Icon;
23 import javax.swing.JCheckBox;
24
25 /**
26 * Overriding JCheckBox so the background is painted correctly
27 * based on the color set in the widget.
28 * If the size is bigger than the image that is being shown as the
29 * checkbox, it otherwise would paint the whole area in the background
30 * color.
31 *
32 * @author <a href="mailto:martin@mvdb.net">Martin van den Bemt</a>
33 * @version $Id: NyxJCheckBox.java,v 1.1 2005/12/18 12:58:18 mvdb Exp $
34 */
35 public class NyxJCheckBox extends JCheckBox {
36
37 /**
38 * the real background color
39 */
40 private Color realBg;
41 /**
42 * return the real background ?
43 */
44 private boolean returnRealBackground;
45
46 /**
47 * the main contructor.
48 *
49 */
50 public NyxJCheckBox() {
51 super();
52 }
53
54 /**
55 * Set the real background for the icon.
56 * @param color the real background color
57 */
58 public void setRealBackground(Color color) {
59 this.realBg = color;
60 }
61
62 /**
63 *
64 * @return the real background color for the icon
65 */
66 public Color getRealBackground() {
67 return this.realBg;
68 }
69
70 /**
71 * Embed the icon in an iconstub
72 * @see javax.swing.AbstractButton#setIcon(javax.swing.Icon)
73 */
74 public void setIcon(Icon defaultIcon) {
75 super.setIcon(new IconStub(defaultIcon));
76 }
77
78 /**
79 * embed the icon in an icon stub
80 * @see javax.swing.AbstractButton#setSelectedIcon(javax.swing.Icon)
81 */
82 public void setSelectedIcon(Icon selectedIcon) {
83 super.setSelectedIcon(new IconStub(selectedIcon));
84 }
85
86 protected boolean focusTraversable = true;
87
88 public void setFocusTraversable(boolean b) {
89 this.focusTraversable = b;
90 }
91
92 /**
93 * @see java.awt.Component#isFocusTraversable()
94 */
95 public boolean isFocusTraversable() {
96 return focusTraversable;
97 }
98
99
100 /**
101 * A stub to surround an icon in, so they get painted
102 * with the correct background set in the widget
103 */
104 public class IconStub implements Icon {
105 /**
106 * the icon
107 */
108 private Icon icon;
109
110 /**
111 * the icon stub
112 * @param icon the icon
113 */
114 public IconStub(Icon icon) {
115 this.icon = icon;
116 }
117
118 /**
119 * @see javax.swing.Icon#getIconHeight()
120 */
121 public int getIconHeight() {
122 if (icon == null) {
123 return 0;
124 }
125 return icon.getIconHeight();
126 }
127
128 /**
129 * @see javax.swing.Icon#getIconWidth()
130 */
131 public int getIconWidth() {
132 if (icon == null) {
133 return 0;
134 }
135 return icon.getIconWidth();
136 }
137
138 /**
139 * Fill a rectangle of the size of the icon with the real
140 * background color.
141 * @see javax.swing.Icon#paintIcon(java.awt.Component, java.awt.Graphics, int, int)
142 */
143 public void paintIcon(Component c, Graphics g, int x, int y) {
144 if (NyxJCheckBox.this.getRealBackground() != null) {
145 g.setColor(getRealBackground());
146 }
147 g.fillRect(x, y, getIconWidth(), getIconHeight());
148 icon.paintIcon(c, g, x, y);
149 }
150 }
151 }