1 33 34 package edu.rice.cs.util.swing; 35 36 import javax.swing.*; 37 import java.awt.*; 38 39 public class LayeredIcon implements Icon { 40 private Icon[] _layers; 41 private int[] _xoffs; 42 private int[] _yoffs; 43 private int _w=0; 44 private int _h=0; 45 public LayeredIcon(Icon[] layers, int[] x, int[] y) { 46 _layers = layers; 47 _xoffs = x; 48 _yoffs = y; 49 if (layers.length != x.length || x.length != y.length) { 50 throw new IllegalArgumentException ("Array lengths don't match"); 51 } 52 _w = 0; _h = 0; 53 for (int i=0; i < layers.length; i++) { 54 if (layers[i] != null) { 55 _w = Math.max(_w, layers[i].getIconWidth() + x[i]); 56 _h = Math.max(_h, layers[i].getIconHeight() + x[i]); 57 } 58 } 59 } 60 public int getIconHeight(){ 61 return _h; 62 } 63 public int getIconWidth(){ 64 return _w; 65 } 66 public void paintIcon(Component c, Graphics g, int x, int y){ 67 for (int i=0; i < _layers.length; i++) { 68 Icon ico = _layers[i]; 69 if (ico != null) _layers[i].paintIcon(c,g, x+_xoffs[i], y+_yoffs[i]); 70 } 71 } 72 73 public Icon[] getLayers(){ 74 return _layers; 75 } 76 public int[] getXOffsets() { 77 return _xoffs; 78 } 79 public int[] getYOffsets(){ 80 return _xoffs; 81 } 82 } | Popular Tags |