KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > sshtools > ui > awt > ImageButton


1 package com.sshtools.ui.awt;
2
3 import java.awt.Color JavaDoc;
4 import java.awt.Image JavaDoc;
5 import java.awt.Insets JavaDoc;
6 import java.awt.ItemSelectable JavaDoc;
7 import java.awt.SystemColor JavaDoc;
8 import java.awt.event.ActionEvent JavaDoc;
9 import java.awt.event.ActionListener JavaDoc;
10 import java.awt.event.ItemEvent JavaDoc;
11 import java.awt.event.ItemListener JavaDoc;
12 import java.awt.event.MouseEvent JavaDoc;
13 import java.awt.event.MouseListener JavaDoc;
14 import java.util.Vector JavaDoc;
15
16 import com.sshtools.ui.awt.tooltips.ToolTipManager;
17
18 /**
19  * An button implementation that can display an image.
20  *
21  * @author $author$
22  */

23 public class ImageButton extends ImageTextLabel implements MouseListener JavaDoc, ItemSelectable JavaDoc {
24
25     private boolean mouseIsDown = false;
26     private Vector JavaDoc listeners, itemListeners;
27     private int darkness = -5263441;
28     private Image JavaDoc grayImage = null;
29     private String JavaDoc actionCommand;
30     private Color JavaDoc borderColor;
31     private boolean hoverButton;
32     private boolean mouseInComponent;
33     private int hoverBorder, depressedBorder, normalBorder;
34     private String JavaDoc toolTipText;
35     private Color JavaDoc hoverBackground = SystemColor.controlLtHighlight;
36     private Color JavaDoc hoverForeground = SystemColor.controlText;
37     private Color JavaDoc normalBackground = SystemColor.control;
38     private Color JavaDoc normalForeground = SystemColor.controlText;
39     private Color JavaDoc depressedBackground = SystemColor.controlShadow;
40     private Color JavaDoc depressedForeground = SystemColor.controlHighlight;
41     private boolean pressed;
42
43     public ImageButton() {
44         this(null, null, null);
45     }
46
47     public ImageButton(Image JavaDoc image, String JavaDoc text, String JavaDoc actionCommand) {
48         this(image, text, actionCommand, FLAT, FLAT, NONE);
49     }
50
51     public ImageButton(Image JavaDoc image, String JavaDoc text, String JavaDoc actionCommand, int hoverBorder, int depressedBorder, int normalBorder) {
52         super(image, text);
53         this.actionCommand = actionCommand;
54         this.hoverBorder = hoverBorder;
55         this.depressedBorder = depressedBorder;
56         this.normalBorder = normalBorder;
57         setMargin(new Insets JavaDoc(4, 2, 4, 2));
58         setBorderType(hoverBorder);
59         addMouseListener(this);
60         normalBackground = getBackground();
61         normalForeground = getForeground();
62     }
63     
64     public void setEnabled(boolean enabled) {
65         if(!enabled) {
66             setBorderType(normalBorder);
67             super.setBackground(normalBackground);
68             super.setForeground(normalForeground);
69         }
70         super.setEnabled(enabled);
71         repaint();
72     }
73     
74     public void setBaseBackground(Color JavaDoc base) {
75         if(base == null) {
76             setBackground(SystemColor.control);
77             hoverBackground = SystemColor.controlHighlight;
78             depressedBackground = SystemColor.controlShadow;
79         }
80         else {
81             setBackground(base);
82             hoverBackground = base.brighter();
83             depressedBackground = base.darker();
84         }
85     }
86     
87     public void setBaseForeground(Color JavaDoc base) {
88         if(base == null) {
89             setForeground(SystemColor.controlText);
90             hoverForeground = SystemColor.controlText;
91             depressedForeground = SystemColor.controlHighlight;
92         }
93         else {
94             hoverForeground = base.darker();
95             depressedForeground = base.brighter();
96             setForeground(base);
97         }
98     }
99     
100     public void setBackground(Color JavaDoc background) {
101         this.normalBackground = background;
102         super.setBackground(background);
103     }
104     
105     public void setForeground(Color JavaDoc foreground) {
106         this.normalForeground = foreground;
107         super.setForeground(foreground);
108     }
109
110     /**
111      * Set the type of border to use when this is a hover button
112      *
113      * @param hoverBorder
114      */

115     public void setHoverBorder(int hoverBorder) {
116         this.hoverBorder = hoverBorder;
117     }
118
119     /**
120      * Set if this is a 'hover button'. If <code>true</code> a border will be
121      * raised when the user moves the mouse pointer over this component.
122      *
123      * @param hoverButton
124      */

125     public void setHoverButton(boolean hoverButton) {
126         this.hoverButton = hoverButton;
127         setBorderType(hoverButton ? (mouseInComponent ? hoverBorder : normalBorder) : hoverBorder);
128
129     }
130     
131     /**
132      * Set the background color to use when hovering over a button. <code>null</code>
133      * means use default color.
134      *
135      * @param hoverBackground background color
136      */

137     public void setHoverBackground(Color JavaDoc hoverBackground) {
138         this.hoverBackground = hoverBackground;
139     }
140     
141     /**
142      * Set the foreground color to use when hovering over a button. <code>null</code>
143      * means use default color.
144      *
145      * @param hoverForeground foreground color
146      */

147     public void setHoverForeground(Color JavaDoc hoverForeground) {
148         this.hoverForeground = hoverForeground;
149     }
150
151     /**
152      * Get the action command
153      */

154     public String JavaDoc getActionCommand() {
155         return actionCommand;
156     }
157
158     /**
159      * Set the action command
160      *
161      * @param actionCommand
162      * action command
163      */

164     public void setActionCommand(String JavaDoc actionCommand) {
165         this.actionCommand = actionCommand;
166     }
167
168     public void setToolTipText(String JavaDoc toolTipText) {
169         this.toolTipText = toolTipText;
170     }
171
172     public String JavaDoc getToolTipText() {
173         return toolTipText;
174     }
175
176 // public boolean mouseDown(Event event, int x, int y) {
177
// if (isEnabled()) {
178
// mouseIsDown = true;
179
// setBorderType(depressedBorder);
180
// }
181
// return true;
182
// }
183

184 // public boolean mouseEnter(Event event, int x, int y) {
185
// if (isEnabled()) {
186
// if (hoverButton) {
187
// setBorderType(hoverBorder);
188
// }
189
// }
190
// if (toolTipText != null) {
191
// ToolTipManager.getInstance().requestToolTip(this, toolTipText);
192
// }
193
// mouseInComponent = true;
194
// return true;
195
// }
196

197 // public boolean mouseUp(Event event, int x, int y) {
198
// mouseIsDown = false;
199
// if (isEnabled()) {
200
// if (this.inside(x, y)) {
201
// setBorderType(normalBorder);
202
// paint(this.getGraphics());
203
// event.id = 1001;
204
// event.arg = this.getImage();
205
// return action(event, event.arg);
206
// }
207
// }
208
// return false;
209
// }
210

211     public void addActionListener(ActionListener JavaDoc l) {
212         if (listeners == null) {
213             listeners = new Vector JavaDoc();
214         }
215         listeners.addElement(l);
216     }
217     
218     public void addItemListener(ItemListener JavaDoc l) {
219         if (itemListeners == null) {
220             itemListeners = new Vector JavaDoc();
221         }
222         itemListeners.addElement(l);
223     }
224
225     public void removeActionListener(ActionListener JavaDoc l) {
226         if (listeners != null) {
227             listeners.removeElement(l);
228         }
229     }
230     
231     public void removeItemListener(ItemListener JavaDoc l) {
232         if (itemListeners != null) {
233             itemListeners.removeElement(l);
234         }
235     }
236     
237     boolean itemEvent(boolean selected) {
238         ItemEvent JavaDoc evt = null;
239         for (int i = itemListeners == null ? -1 : itemListeners.size() - 1; i >= 0; i--) {
240             if (evt == null) {
241                 evt = new ItemEvent JavaDoc(this, selected ? ItemEvent.SELECTED :
242                     ItemEvent.DESELECTED, this, 0);
243             }
244             ((ItemListener JavaDoc) itemListeners.elementAt(i)).itemStateChanged(evt);
245         }
246         return false;
247         
248     }
249
250     boolean actionEvent(int modifiers) {
251         ActionEvent JavaDoc evt = null;
252         for (int i = listeners == null ? -1 : listeners.size() - 1; i >= 0; i--) {
253             if (evt == null) {
254                 evt = new ActionEvent JavaDoc(this, 1001, actionCommand, modifiers);
255             }
256             ((ActionListener JavaDoc) listeners.elementAt(i)).actionPerformed(evt);
257         }
258         return false;
259     }
260
261 // public boolean mouseExit(Event event, int x, int y) {
262
// mouseInComponent = false;
263
// if (hoverButton) {
264
// setBorderType(normalBorder);
265
// } else {
266
// if (mouseIsDown) {
267
// paint(this.getGraphics());
268
// }
269
// }
270
// if (toolTipText != null) {
271
// ToolTipManager.getInstance().requestToolTip(null, null);
272
// }
273
// return true;
274
// }
275

276     public int getDarkness() {
277         return darkness;
278     }
279
280     public void setDarkness(int darkness) {
281         this.darkness = darkness;
282     }
283
284     public Image JavaDoc getGrayImage() {
285         return grayImage;
286     }
287
288     public void setGrayImage(Image JavaDoc grayImage) {
289         this.grayImage = grayImage;
290     }
291
292     /*
293      * private void createGrayImage(Graphics g) { java.awt.image.ImageFilter
294      * filter = new GrayFilter(darkness); java.awt.image.ImageProducer producer =
295      * new FilteredImageSource(this.getImage().getSource(), filter); grayImage =
296      * this.createImage(producer); int border = this.getBorder(); if (getScale() ==
297      * STRETCH) this.prepareImage(grayImage, getWidth() - 2 * border,
298      * getHeight() - 2 * border, this); else this.prepareImage(grayImage, this);
299      * super.paint(g); }
300      */

301
302     /*
303      * (non-Javadoc)
304      *
305      * @see java.awt.event.MouseListener#mouseClicked(java.awt.event.MouseEvent)
306      */

307     public void mouseClicked(MouseEvent JavaDoc e) {
308         // TODO Auto-generated method stub
309

310     }
311
312     /*
313      * (non-Javadoc)
314      *
315      * @see java.awt.event.MouseListener#mousePressed(java.awt.event.MouseEvent)
316      */

317     public void mousePressed(MouseEvent JavaDoc e) {
318         if (isEnabled()) {
319             mouseIsDown = true;
320             setBorderType(depressedBorder);
321             super.setBackground(depressedBackground);
322             super.setForeground(depressedForeground);
323         }
324     }
325
326     /*
327      * (non-Javadoc)
328      *
329      * @see java.awt.event.MouseListener#mouseReleased(java.awt.event.MouseEvent)
330      */

331     public void mouseReleased(MouseEvent JavaDoc event) {
332         mouseIsDown = false;
333         if (isEnabled()) {
334             if (this.inside(event.getX(), event.getY())) {
335                 setBorderType(normalBorder);
336                 paint(this.getGraphics());
337                 actionEvent(event.getModifiers());
338             }
339         }
340
341     }
342
343     /*
344      * (non-Javadoc)
345      *
346      * @see java.awt.event.MouseListener#mouseEntered(java.awt.event.MouseEvent)
347      */

348     public void mouseEntered(MouseEvent JavaDoc e) {
349         if (isEnabled()) {
350             if (hoverButton && !pressed) {
351                 setBorderType(hoverBorder);
352                 if(hoverForeground != null) {
353                     super.setForeground(hoverForeground);
354                 }
355                 if(hoverBackground != null) {
356                     super.setBackground(hoverBackground);
357                 }
358                 itemEvent(true);
359             }
360         }
361         if (toolTipText != null) {
362             ToolTipManager.getInstance().requestToolTip(this, toolTipText);
363         }
364         mouseInComponent = true;
365
366     }
367
368     /*
369      * (non-Javadoc)
370      *
371      * @see java.awt.event.MouseListener#mouseExited(java.awt.event.MouseEvent)
372      */

373     public void mouseExited(MouseEvent JavaDoc e) {
374         mouseInComponent = false;
375         if (hoverButton) {
376             if(!pressed) {
377                 setBorderType(normalBorder);
378                 if(hoverForeground != null) {
379                     super.setForeground(normalForeground);
380                 }
381                 if(hoverBackground != null) {
382                     super.setBackground(normalBackground);
383                 }
384                 itemEvent(true);
385             }
386         } else {
387             if (mouseIsDown) {
388                 paint(this.getGraphics());
389             }
390         }
391         if (toolTipText != null) {
392             ToolTipManager.getInstance().requestToolTip(null, null);
393         }
394     }
395
396     /**
397      * @param b
398      */

399     public void setPressed(boolean pressed) {
400         this.pressed = pressed;
401         if(pressed) {
402             setBorderType(depressedBorder);
403             super.setBackground(depressedBackground);
404             super.setForeground(depressedForeground);
405         }
406         else {
407             setBorderType(normalBorder);
408             super.setBackground(normalBackground);
409             super.setForeground(normalForeground);
410         };
411         repaint();
412         
413     }
414
415     /* (non-Javadoc)
416      * @see java.awt.ItemSelectable#getSelectedObjects()
417      */

418     public Object JavaDoc[] getSelectedObjects() {
419         return new Object JavaDoc[] { this };
420     }
421 }
Popular Tags