KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > sshtools > ui > swing > ArrowIcon


1 /*
2  */

3 package com.sshtools.ui.swing;
4
5 import java.awt.Color JavaDoc;
6 import java.awt.Component JavaDoc;
7 import java.awt.Graphics JavaDoc;
8 import javax.swing.Icon JavaDoc;
9 import javax.swing.SwingConstants JavaDoc;
10 import javax.swing.UIManager JavaDoc;
11
12 public class ArrowIcon implements Icon JavaDoc, SwingConstants JavaDoc {
13     private Color JavaDoc shadow;
14     private Color JavaDoc darkShadow;
15     private Color JavaDoc highlight;
16     private int direction;
17
18     public ArrowIcon(int direction, Color JavaDoc shadow, Color JavaDoc darkShadow, Color JavaDoc 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 JavaDoc c, Graphics JavaDoc 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 JavaDoc g, int x, int y, int size, int direction, boolean isEnabled) {
55         Color JavaDoc 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