1 3 package com.sshtools.ui.swing; 4 5 import java.awt.Color ; 6 import java.awt.Component ; 7 import java.awt.Graphics ; 8 import javax.swing.Icon ; 9 import javax.swing.SwingConstants ; 10 import javax.swing.UIManager ; 11 12 public class ArrowIcon implements Icon , SwingConstants { 13 private Color shadow; 14 private Color darkShadow; 15 private Color highlight; 16 private int direction; 17 18 public ArrowIcon(int direction, Color shadow, Color darkShadow, Color highlight) { 19 this.shadow = shadow; 20 this.darkShadow = darkShadow; 21 this.highlight = highlight; 22 setDirection(direction); 23 } 24 25 public ArrowIcon(int direction) { 26 this(direction, UIManager.getColor("controlShadow"), UIManager.getColor("controlDkShadow"), UIManager 27 .getColor("controlLtHighlight")); 28 } 29 30 public int getIconHeight() { 31 return 16; 32 } 33 34 public int getIconWidth() { 35 return 16; 36 } 37 38 public int getDirection() { 39 return direction; 40 } 41 42 public void setDirection(int dir) { 43 direction = dir; 44 } 45 46 public void paintIcon(Component c, Graphics g, int x, int y) { 47 int h = getIconHeight(); 48 int w = getIconWidth(); 49 int size = Math.min((h - 4) / 3, (w - 4) / 3); 50 size = Math.max(size, 2); 51 paintTriangle(g, x + ((w - size) / 2), y + ((h - size) / 2), size, direction, true); 52 } 53 54 public void paintTriangle(Graphics g, int x, int y, int size, int direction, boolean isEnabled) { 55 Color oldColor = g.getColor(); 56 int mid, i, j; 57 j = 0; 58 size = Math.max(size, 2); 59 mid = (size / 2) - 1; 60 g.translate(x, y); 61 if (isEnabled) 62 g.setColor(darkShadow); 63 else 64 g.setColor(shadow); 65 switch (direction) { 66 case NORTH: 67 for (i = 0; i < size; i++) { 68 g.drawLine(mid - i, i, mid + i, i); 69 } 70 if (!isEnabled) { 71 g.setColor(highlight); 72 g.drawLine(mid - i + 2, i, mid + i, i); 73 } 74 break; 75 case SOUTH: 76 if (!isEnabled) { 77 g.translate(1, 1); 78 g.setColor(highlight); 79 for (i = size - 1; i >= 0; i--) { 80 g.drawLine(mid - i, j, mid + i, j); 81 j++; 82 } 83 g.translate(-1, -1); 84 g.setColor(shadow); 85 } 86 j = 0; 87 for (i = size - 1; i >= 0; i--) { 88 g.drawLine(mid - i, j, mid + i, j); 89 j++; 90 } 91 break; 92 case WEST: 93 for (i = 0; i < size; i++) { 94 g.drawLine(i, mid - i, i, mid + i); 95 } 96 if (!isEnabled) { 97 g.setColor(highlight); 98 g.drawLine(i, mid - i + 2, i, mid + i); 99 } 100 break; 101 case EAST: 102 if (!isEnabled) { 103 g.translate(1, 1); 104 g.setColor(highlight); 105 for (i = size - 1; i >= 0; i--) { 106 g.drawLine(j, mid - i, j, mid + i); 107 j++; 108 } 109 g.translate(-1, -1); 110 g.setColor(shadow); 111 } 112 j = 0; 113 for (i = size - 1; i >= 0; i--) { 114 g.drawLine(j, mid - i, j, mid + i); 115 j++; 116 } 117 break; 118 } 119 g.translate(-x, -y); 120 g.setColor(oldColor); 121 } 122 } | Popular Tags |