38 |
|
|
39 |
package javax.swing; |
package javax.swing; |
40 |
|
|
41 |
|
import java.awt.Color; |
42 |
import java.awt.Component; |
import java.awt.Component; |
43 |
import java.awt.Container; |
import java.awt.Container; |
44 |
import java.awt.Graphics; |
import java.awt.Graphics; |
45 |
|
import java.awt.Rectangle; |
46 |
|
import java.awt.Shape; |
47 |
import java.util.Hashtable; |
import java.util.Hashtable; |
48 |
import java.util.Iterator; |
import java.util.Iterator; |
49 |
import java.util.Map; |
import java.util.Map; |
161 |
TreeMap layers; // Layer Number (Integer) -> Layer Size (Integer) |
TreeMap layers; // Layer Number (Integer) -> Layer Size (Integer) |
162 |
Hashtable componentToLayer; // Component -> Layer Number (Integer) |
Hashtable componentToLayer; // Component -> Layer Number (Integer) |
163 |
|
|
164 |
|
private transient Rectangle rectCache; |
165 |
|
|
166 |
public JLayeredPane() |
public JLayeredPane() |
167 |
{ |
{ |
168 |
layers = new TreeMap (); |
layers = new TreeMap (); |
255 |
ret[1] = getComponents ().length; |
ret[1] = getComponents ().length; |
256 |
Iterator i = layers.entrySet ().iterator (); |
Iterator i = layers.entrySet ().iterator (); |
257 |
while (i.hasNext()) |
while (i.hasNext()) |
258 |
{ |
{ |
259 |
Map.Entry pair = (Map.Entry) i.next(); |
Map.Entry pair = (Map.Entry) i.next(); |
260 |
Integer layerNum = (Integer) pair.getKey (); |
Integer layerNum = (Integer) pair.getKey (); |
261 |
Integer layerSz = (Integer) pair.getValue (); |
Integer layerSz = (Integer) pair.getValue (); |
262 |
if (layerNum.intValue() == layer.intValue()) |
int layerInt = layerNum.intValue(); |
263 |
|
if (layerInt == layer.intValue()) |
264 |
{ |
{ |
265 |
ret[0] = ret[1] - layerSz.intValue (); |
ret[0] = ret[1] - layerSz.intValue (); |
266 |
return ret; |
break; |
267 |
|
} |
268 |
|
// In the following case there exists no layer with the specified |
269 |
|
// number, so we return an empty interval here with the index at which |
270 |
|
// such a layer would be inserted |
271 |
|
else if (layerInt > layer.intValue()) |
272 |
|
{ |
273 |
|
ret[1] = ret[0]; |
274 |
|
break; |
275 |
} |
} |
276 |
else |
else |
277 |
{ |
{ |
278 |
ret[1] -= layerSz.intValue (); |
ret[1] -= layerSz.intValue (); |
279 |
} |
} |
280 |
} |
} |
281 |
// should have found the layer during iteration |
return ret; |
|
throw new IllegalArgumentException (); |
|
282 |
} |
} |
283 |
|
|
284 |
/** |
/** |
642 |
* @param index an ignored parameter, for compatibility. |
* @param index an ignored parameter, for compatibility. |
643 |
*/ |
*/ |
644 |
protected void addImpl(Component comp, Object layerConstraint, int index) |
protected void addImpl(Component comp, Object layerConstraint, int index) |
645 |
{ |
{ |
646 |
Integer layer; |
Integer layer; |
647 |
if (layerConstraint != null && layerConstraint instanceof Integer) |
if (layerConstraint != null && layerConstraint instanceof Integer) |
648 |
layer = (Integer) layerConstraint; |
layer = (Integer) layerConstraint; |
656 |
componentToLayer.put (comp, layer); |
componentToLayer.put (comp, layer); |
657 |
incrLayer (layer); |
incrLayer (layer); |
658 |
|
|
659 |
super.addImpl(comp, null, newIdx); |
super.addImpl(comp, null, newIdx); |
660 |
} |
} |
661 |
|
|
662 |
/** |
/** |
663 |
* Sets the layer property for a JComponent. |
* Sets the layer property for a JComponent. |
694 |
*/ |
*/ |
695 |
public void paint(Graphics g) |
public void paint(Graphics g) |
696 |
{ |
{ |
697 |
g.setColor(getBackground()); |
if (isOpaque()) |
698 |
g.fillRect(0, 0, getWidth(), getHeight()); |
{ |
699 |
|
Color oldColor = g.getColor(); |
700 |
|
Rectangle clip = g.getClipBounds(); |
701 |
|
g.setColor(getBackground()); |
702 |
|
g.fillRect(clip.x, clip.y, clip.width, clip.height); |
703 |
|
g.setColor(oldColor); |
704 |
|
} |
705 |
super.paint(g); |
super.paint(g); |
706 |
} |
} |
707 |
|
|