]>
Commit | Line | Data |
---|---|---|
d933abbe | 1 | /* ImageIcon.java -- |
b9d896d6 | 2 | Copyright (C) 2002, 2004, 2005 Free Software Foundation, Inc. |
7bde45b2 BM |
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., 59 Temple Place, Suite 330, Boston, MA | |
19 | 02111-1307 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 | ||
d6c2458f | 38 | package javax.swing; |
7bde45b2 | 39 | |
d6c2458f MK |
40 | import java.awt.Component; |
41 | import java.awt.Graphics; | |
42 | import java.awt.Image; | |
b9d896d6 | 43 | import java.awt.MediaTracker; |
d6c2458f | 44 | import java.awt.Toolkit; |
8e99fb4f | 45 | import java.awt.image.ImageObserver; |
4dfcdad1 GH |
46 | import java.io.Serializable; |
47 | import java.net.URL; | |
48 | ||
7bde45b2 | 49 | |
4dfcdad1 GH |
50 | public class ImageIcon |
51 | implements Icon, Serializable | |
7bde45b2 | 52 | { |
4dfcdad1 | 53 | private static final long serialVersionUID = 532615968316031794L; |
b9d896d6 RK |
54 | |
55 | /** A dummy Component that is used in the MediaTracker. */ | |
56 | protected static Component component = new Component(){}; | |
57 | ||
58 | /** The MediaTracker used to monitor the loading of images. */ | |
59 | protected static MediaTracker tracker = new MediaTracker(component); | |
60 | ||
61 | /** The ID that is used in the tracker. */ | |
62 | private static int id; | |
63 | ||
4dfcdad1 | 64 | Image image; |
8e99fb4f GH |
65 | String description; |
66 | ImageObserver observer; | |
7bde45b2 | 67 | |
b9d896d6 RK |
68 | /** The image loading status. */ |
69 | private int loadStatus; | |
70 | ||
8e99fb4f | 71 | public ImageIcon() |
4dfcdad1 | 72 | { |
4dfcdad1 | 73 | } |
d933abbe | 74 | |
8e99fb4f GH |
75 | public ImageIcon(String file) |
76 | { | |
77 | this(file, file); | |
78 | } | |
79 | ||
80 | public ImageIcon(String file, String description) | |
81 | { | |
82 | this(Toolkit.getDefaultToolkit().getImage(file), description); | |
83 | } | |
84 | ||
85 | public ImageIcon(byte[] imageData) | |
86 | { | |
87 | this(imageData, null); | |
88 | } | |
89 | ||
90 | public ImageIcon(byte[] imageData, String description) | |
4dfcdad1 | 91 | { |
8e99fb4f | 92 | this(Toolkit.getDefaultToolkit().createImage(imageData), description); |
4dfcdad1 GH |
93 | } |
94 | ||
95 | public ImageIcon(URL url) | |
96 | { | |
8e99fb4f | 97 | this(url, null); |
4dfcdad1 GH |
98 | } |
99 | ||
8e99fb4f | 100 | public ImageIcon(URL url, String description) |
4dfcdad1 | 101 | { |
8e99fb4f GH |
102 | this(Toolkit.getDefaultToolkit().getImage(url), description); |
103 | } | |
104 | ||
105 | public ImageIcon(Image image) | |
106 | { | |
107 | this(image, null); | |
108 | } | |
4dfcdad1 | 109 | |
8e99fb4f GH |
110 | public ImageIcon(Image image, String description) |
111 | { | |
b9d896d6 RK |
112 | setImage(image); |
113 | setDescription(description); | |
8e99fb4f | 114 | } |
d933abbe | 115 | |
8e99fb4f GH |
116 | public ImageObserver getImageObserver() |
117 | { | |
118 | return observer; | |
4dfcdad1 | 119 | } |
d933abbe | 120 | |
8e99fb4f | 121 | public void setImageObserver(ImageObserver newObserver) |
4dfcdad1 | 122 | { |
8e99fb4f | 123 | observer = newObserver; |
4dfcdad1 GH |
124 | } |
125 | ||
126 | public Image getImage() | |
127 | { | |
128 | return image; | |
129 | } | |
130 | ||
d933abbe GH |
131 | public void setImage(Image image) |
132 | { | |
b9d896d6 RK |
133 | loadImage(image); |
134 | this.image = image; | |
d933abbe GH |
135 | } |
136 | ||
4dfcdad1 GH |
137 | public String getDescription() |
138 | { | |
8e99fb4f | 139 | return description; |
4dfcdad1 GH |
140 | } |
141 | ||
142 | public void setDescription(String description) | |
143 | { | |
8e99fb4f | 144 | this.description = description; |
4dfcdad1 GH |
145 | } |
146 | ||
147 | public int getIconHeight() | |
148 | { | |
149 | return image.getHeight(observer); | |
150 | } | |
151 | ||
152 | public int getIconWidth() | |
153 | { | |
154 | return image.getWidth(observer); | |
155 | } | |
156 | ||
157 | public void paintIcon(Component c, Graphics g, int x, int y) | |
158 | { | |
8e99fb4f | 159 | g.drawImage(image, x, y, observer != null ? observer : c); |
4dfcdad1 | 160 | } |
b9d896d6 RK |
161 | |
162 | /** | |
163 | * Loads the image and blocks until the loading operation is finished. | |
164 | * | |
165 | * @param image the image to be loaded | |
166 | */ | |
167 | protected void loadImage(Image image) | |
168 | { | |
169 | try | |
170 | { | |
171 | tracker.addImage(image, id); | |
172 | id++; | |
173 | tracker.waitForID(id - 1); | |
174 | } | |
175 | catch (InterruptedException ex) | |
176 | { | |
177 | ; // ignore this for now | |
178 | } | |
179 | finally | |
180 | { | |
181 | loadStatus = tracker.statusID(id - 1, false); | |
182 | } | |
183 | } | |
184 | ||
185 | /** | |
186 | * Returns the load status of the icon image. | |
187 | * | |
188 | * @return the load status of the icon image | |
189 | * | |
190 | * @see {@link MediaTracker.COMPLETE} | |
191 | * @see {@link MediaTracker.ABORTED} | |
192 | * @see {@link MediaTracker.ERRORED} | |
193 | */ | |
194 | public int getImageLoadStatus() | |
195 | { | |
196 | return loadStatus; | |
197 | } | |
7bde45b2 | 198 | } |