1:
37:
38:
39: package ;
40:
41: import ;
42: import ;
43: import ;
44: import ;
45:
46: import ;
47: import ;
48: import ;
49: import ;
50: import ;
51: import ;
52: import ;
53: import ;
54: import ;
55: import ;
56: import ;
57: import ;
58: import ;
59: import ;
60: import ;
61: import ;
62: import ;
63: import ;
64: import ;
65: import ;
66: import ;
67:
68:
69:
74: public class MetalBorders
75: {
76:
77:
78: private static Border buttonBorder;
79:
80:
81: private static Border toggleButtonBorder;
82:
83:
84: private static Border desktopIconBorder;
85:
86:
87: private static Border toolbarButtonBorder;
88:
89:
90: private static Border textFieldBorder;
91:
92:
93: private static Border textBorder;
94:
95:
96: private static Border rolloverBorder;
97:
98:
103: private static BasicBorders.MarginBorder marginBorder;
104:
105:
117: public static class ButtonBorder extends AbstractBorder implements UIResource
118: {
119:
120: protected static Insets borderInsets = new Insets(3, 3, 3, 3);
121:
122:
125: public ButtonBorder()
126: {
127:
128: }
129:
130:
140: public void paintBorder(Component c, Graphics g, int x, int y, int w,
141: int h)
142: {
143:
144:
145:
146:
147:
148: if (MetalLookAndFeel.getCurrentTheme() instanceof OceanTheme)
149: paintOceanButtonBorder(c, g, x, y, w, h);
150: else
151: paintDefaultButtonBorder(c, g, x, y, w, h);
152: }
153:
154:
164: private void paintDefaultButtonBorder(Component c, Graphics g, int x,
165: int y, int w, int h)
166: {
167: ButtonModel bmodel = null;
168:
169:
170:
171: if (c instanceof AbstractButton)
172: bmodel = ((AbstractButton) c).getModel();
173: else
174: throw new IllegalStateException("A ButtonBorder is supposed to work "
175: + "only with AbstractButton and"
176: + "subclasses.");
177:
178: Color darkShadow = MetalLookAndFeel.getControlDarkShadow();
179: Color shadow = MetalLookAndFeel.getControlShadow();
180: Color light = MetalLookAndFeel.getControlHighlight();
181: Color middle = MetalLookAndFeel.getControl();
182:
183: if (c.isEnabled())
184: {
185:
186: g.setColor(darkShadow);
187: g.drawRect(x, y, w - 2, h - 2);
188:
189:
190:
191: if (c instanceof JButton && ((JButton) c).isDefaultButton())
192: {
193: g.drawRect(x + 1, y + 1, w - 4, h - 4);
194:
195: g.setColor(light);
196: g.drawLine(x + 2, y + 2, x + w - 4, y + 2);
197: g.drawLine(x + 2, y + 2, x + 2, y + h - 4);
198: g.drawLine(x + 2, y + h - 1, x + w - 1, y + h - 1);
199: g.drawLine(x + w - 1, y + 2, x + w - 1, y + h - 1);
200:
201: g.setColor(middle);
202: g.fillRect(x + w - 2, y + 2, 1, 1);
203: g.fillRect(x + 2, y + h - 2, 1, 1);
204: }
205: else
206: {
207:
208:
209: if (! (bmodel.isPressed() && bmodel.isArmed()))
210: {
211:
212: g.setColor(light);
213: g.drawRect(x + 1, y + 1, w - 2, h - 2);
214:
215:
216: g.setColor(middle);
217: g.drawLine(x + 1, y + h - 2, x + 1, y + h - 2);
218: g.drawLine(x + w - 2, y + 1, x + w - 2, y + 1);
219: }
220:
221:
222: else
223: {
224:
225: g.setColor(light);
226: g.drawLine(x + w - 1, y + 1, x + w - 1, y + h - 1);
227: g.drawLine(x + 1, y + h - 1, x + w - 1, y + h - 1);
228:
229:
230: g.setColor(middle);
231: g.drawLine(x + 1, y + 1, x + w - 2, y + 1);
232: g.drawLine(x + 1, y + 1, x + 1, y + h - 2);
233:
234:
235: g.setColor(shadow);
236: g.drawRect(x + 1, y + h - 2, 0, 0);
237: g.drawRect(x + w - 2, y + 1, 0, 0);
238: }
239: }
240: }
241: else
242: {
243:
244: g.setColor(MetalLookAndFeel.getInactiveControlTextColor());
245: g.drawRect(x, y, w - 2, h - 2);
246: }
247: }
248:
249:
259: private void paintOceanButtonBorder(Component c, Graphics g, int x,
260: int y, int w, int h)
261: {
262: ButtonModel bmodel = null;
263:
264:
265:
266: if (c instanceof AbstractButton)
267: bmodel = ((AbstractButton) c).getModel();
268: else
269: throw new IllegalStateException("A ButtonBorder is supposed to work "
270: + "only with AbstractButton and"
271: + "subclasses.");
272:
273: Color darkShadow = MetalLookAndFeel.getControlDarkShadow();
274: Color shadow = MetalLookAndFeel.getControlShadow();
275: Color light = MetalLookAndFeel.getControlHighlight();
276: Color middle = MetalLookAndFeel.getControl();
277:
278: if (c.isEnabled())
279: {
280:
281:
282:
283: if (bmodel.isPressed() || ((c instanceof JButton)
284: && ((JButton) c).isDefaultButton()))
285: {
286:
287: g.setColor(darkShadow);
288: g.drawRect(x, y, w - 1, h - 1);
289: g.drawRect(x + 1, y + 1, w - 3, h - 3);
290: }
291: else if (bmodel.isRollover() && !(c.getParent() instanceof JToolBar))
292: {
293:
294:
295: g.setColor(shadow);
296: g.drawRect(x, y, w - 1, h - 1);
297: g.drawRect(x + 2, y + 2, w - 5, h - 5);
298: g.setColor(darkShadow);
299: g.drawRect(x + 1, y + 1, w - 3, h - 3);
300: }
301: else
302: {
303: g.setColor(darkShadow);
304: g.drawRect(x, y, w - 1, h - 1);
305: }
306: }
307: else
308: {
309:
310: g.setColor(MetalLookAndFeel.getInactiveControlTextColor());
311: g.drawRect(x, y, w - 2, h - 2);
312: }
313: }
314:
315:
322: public Insets getBorderInsets(Component c)
323: {
324: return borderInsets;
325: }
326:
327:
337: public Insets getBorderInsets(Component c, Insets newInsets)
338: {
339: newInsets.bottom = borderInsets.bottom;
340: newInsets.left = borderInsets.left;
341: newInsets.right = borderInsets.right;
342: newInsets.top = borderInsets.top;
343: return newInsets;
344: }
345: }
346:
347:
350: static class DesktopIconBorder extends AbstractBorder
351: implements UIResource
352: {
353:
356: public DesktopIconBorder()
357: {
358:
359: }
360:
361:
368: public Insets getBorderInsets(Component c)
369: {
370: return getBorderInsets(c, null);
371: }
372:
373:
379: public Insets getBorderInsets(Component c, Insets newInsets)
380: {
381: if (newInsets == null)
382: newInsets = new Insets(3, 3, 2, 3);
383: else
384: {
385: newInsets.top = 3;
386: newInsets.left = 3;
387: newInsets.bottom = 2;
388: newInsets.right = 3;
389: }
390: return newInsets;
391: }
392:
393:
403: public void paintBorder(Component c, Graphics g, int x, int y, int w,
404: int h)
405: {
406: g.setColor(MetalLookAndFeel.getControlDarkShadow());
407: g.drawRect(x, y, w - 1, h - 1);
408: }
409:
410: }
411:
412:
415: public static class Flush3DBorder extends AbstractBorder
416: implements UIResource
417: {
418: private static final Insets borderInsets = new Insets(2, 2, 2, 2);
419:
420:
423: public Flush3DBorder()
424: {
425:
426: }
427:
428:
435: public Insets getBorderInsets(Component c)
436: {
437: return borderInsets;
438: }
439:
440:
450: public Insets getBorderInsets(Component c, Insets newInsets)
451: {
452: newInsets.top = borderInsets.top;
453: newInsets.left = borderInsets.left;
454: newInsets.bottom = borderInsets.bottom;
455: newInsets.right = borderInsets.right;
456: return newInsets;
457: }
458:
459:
469: public void paintBorder(Component c, Graphics g, int x, int y, int w,
470: int h)
471: {
472: Color savedColor = g.getColor();
473: g.setColor(MetalLookAndFeel.getControlDarkShadow());
474: g.drawRect(x, y, w - 2, h - 2);
475: g.setColor(MetalLookAndFeel.getControlHighlight());
476: g.drawRect(x + 1, y + 1, w - 2, h - 2);
477: g.setColor(MetalLookAndFeel.getControl());
478: g.drawLine(x + 1, y + h - 2, x + 1, y + h - 2);
479: g.drawLine(x + w - 2, y + 1, x + w - 2, y + 1);
480: g.setColor(savedColor);
481: }
482:
483: }
484:
485:
491: public static class PaletteBorder extends AbstractBorder
492: implements UIResource
493: {
494: private static final Insets borderInsets = new Insets(1, 1, 1, 1);
495:
496:
499: public PaletteBorder()
500: {
501:
502: }
503:
504:
511: public Insets getBorderInsets(Component c)
512: {
513: return borderInsets;
514: }
515:
516:
526: public Insets getBorderInsets(Component c, Insets newInsets)
527: {
528: newInsets.top = borderInsets.top;
529: newInsets.left = borderInsets.left;
530: newInsets.bottom = borderInsets.bottom;
531: newInsets.right = borderInsets.right;
532: return newInsets;
533: }
534:
535:
545: public void paintBorder(Component c, Graphics g, int x, int y, int w,
546: int h)
547: {
548: Color savedColor = g.getColor();
549:
550:
551: g.setColor(MetalLookAndFeel.getPrimaryControlDarkShadow());
552: g.drawRect(x, y, w - 1, h - 1);
553:
554:
555: g.setColor(MetalLookAndFeel.getControl());
556: g.fillRect(x, y, 1, 1);
557: g.fillRect(x + w - 1, y, 1, 1);
558: g.fillRect(x + w - 1, y + h - 1, 1, 1);
559: g.fillRect(x, y + h - 1, 1, 1);
560: g.setColor(savedColor);
561: }
562:
563: }
564:
565:
568: public static class TextFieldBorder extends Flush3DBorder
569: implements UIResource
570: {
571:
574: public TextFieldBorder()
575: {
576:
577: }
578:
579:
589: public void paintBorder(Component c, Graphics g, int x, int y, int w,
590: int h)
591: {
592: boolean enabledTextBorder;
593: if (c instanceof JTextComponent)
594: {
595: JTextComponent tc = (JTextComponent) c;
596: enabledTextBorder = tc.isEnabled() && tc.isEditable();
597: }
598: else
599: enabledTextBorder = false;
600:
601: if (enabledTextBorder)
602: super.paintBorder(c, g, x, y, w, h);
603: else
604: {
605: Color savedColor = g.getColor();
606: g.setColor(MetalLookAndFeel.getControlShadow());
607: g.drawRect(x, y, w - 1, h - 1);
608: g.setColor(savedColor);
609: }
610: }
611:
612: }
613:
614:
617: public static class InternalFrameBorder extends AbstractBorder
618: implements UIResource
619: {
620: private static final Insets borderInsets = new Insets(5, 5, 5, 5);
621:
622:
625: public InternalFrameBorder()
626: {
627:
628: }
629:
630:
637: public Insets getBorderInsets(Component c)
638: {
639: return borderInsets;
640: }
641:
642:
652: public Insets getBorderInsets(Component c, Insets newInsets)
653: {
654: newInsets.top = borderInsets.top;
655: newInsets.left = borderInsets.left;
656: newInsets.bottom = borderInsets.bottom;
657: newInsets.right = borderInsets.right;
658: return newInsets;
659: }
660:
661:
671: public void paintBorder(Component c, Graphics g, int x, int y, int w,
672: int h)
673: {
674:
675: JInternalFrame f = (JInternalFrame) c;
676: if (f.isSelected())
677: g.setColor(MetalLookAndFeel.getPrimaryControlDarkShadow());
678: else
679: g.setColor(MetalLookAndFeel.getControlDarkShadow());
680:
681:
682: g.fillRect(x, y, w, 5);
683: g.fillRect(x, y, 5, h);
684: g.fillRect(x + w - 5, y, 5, h);
685: g.fillRect(x, y + h - 5, w, 5);
686:
687:
688: g.setColor(MetalLookAndFeel.getControl());
689: g.fillRect(x, y, 1, 1);
690: g.fillRect(x + w - 1, y, 1, 1);
691: g.fillRect(x + w - 1, y + h - 1, 1, 1);
692: g.fillRect(x, y + h - 1, 1, 1);
693:
694:
695: g.setColor(MetalLookAndFeel.getBlack());
696: g.drawLine(x + 14, y + 2, x + w - 15, y + 2);
697: g.drawLine(x + 14, y + h - 3, x + w - 15, y + h - 3);
698: g.drawLine(x + 2, y + 14, x + 2, y + h - 15);
699: g.drawLine(x + w - 3, y + 14, x + w - 3, y + h - 15);
700:
701:
702: if (f.isSelected())
703: g.setColor(MetalLookAndFeel.getPrimaryControlShadow());
704: else
705: g.setColor(MetalLookAndFeel.getControlShadow());
706: g.drawLine(x + 15, y + 3, x + w - 14, y + 3);
707: g.drawLine(x + 15, y + h - 2, x + w - 14, y + h - 2);
708: g.drawLine(x + 3, y + 15, x + 3, y + h - 14);
709: g.drawLine(x + w - 2, y + 15, x + w - 2, y + h - 14);
710: }
711:
712: }
713:
714:
718: public static class OptionDialogBorder extends AbstractBorder
719: implements UIResource
720: {
721:
722:
725: public OptionDialogBorder()
726: {
727:
728: }
729:
730:
737: public Insets getBorderInsets(Component c)
738: {
739: return getBorderInsets(c, null);
740: }
741:
742:
748: public Insets getBorderInsets(Component c, Insets newInsets)
749: {
750: if (newInsets == null)
751: newInsets = new Insets(3, 3, 3, 3);
752: else
753: {
754: newInsets.top = 3;
755: newInsets.left = 3;
756: newInsets.bottom = 3;
757: newInsets.right = 3;
758: }
759: return newInsets;
760: }
761:
762:
772: public void paintBorder(Component c, Graphics g, int x, int y, int w,
773: int h)
774: {
775:
776: JInternalFrame f = (JInternalFrame) c;
777: g.setColor(MetalLookAndFeel.getPrimaryControlDarkShadow());
778: if (f.getContentPane() instanceof JOptionPane)
779: {
780: JOptionPane pane = (JOptionPane) f.getContentPane();
781: int type = pane.getMessageType();
782: if (type == JOptionPane.QUESTION_MESSAGE)
783: {
784: Color bc = UIManager.getColor(
785: "OptionPane.questionDialog.border.background");
786: if (bc != null)
787: g.setColor(bc);
788: }
789: if (type == JOptionPane.WARNING_MESSAGE)
790: {
791: Color bc = UIManager.getColor(
792: "OptionPane.warningDialog.border.background");
793: if (bc != null)
794: g.setColor(bc);
795: }
796: else if (type == JOptionPane.ERROR_MESSAGE)
797: {
798: Color bc = UIManager.getColor(
799: "OptionPane.errorDialog.border.background");
800: if (bc != null)
801: g.setColor(bc);
802: }
803: }
804:
805:
806: g.fillRect(x, y, w, 3);
807: g.fillRect(x, y, 3, h);
808: g.fillRect(x + w - 3, y, 3, h);
809: g.fillRect(x, y + h - 3, w, 3);
810:
811:
812: g.setColor(MetalLookAndFeel.getControl());
813: g.fillRect(x, y, 1, 1);
814: g.fillRect(x + w - 1, y, 1, 1);
815: g.fillRect(x + w - 1, y + h - 1, 1, 1);
816: g.fillRect(x, y + h - 1, 1, 1);
817:
818: }
819:
820: }
821:
822:
825: public static class MenuItemBorder extends AbstractBorder
826: implements UIResource
827: {
828:
829: protected static Insets borderInsets = new Insets(2, 2, 2, 2);
830:
831:
834: public MenuItemBorder()
835: {
836:
837: }
838:
839:
850: public void paintBorder(Component c, Graphics g, int x, int y, int w,
851: int h)
852: {
853: Color dark = MetalLookAndFeel.getPrimaryControlDarkShadow();
854: Color light = MetalLookAndFeel.getPrimaryControlHighlight();
855: if (c instanceof JMenu)
856: {
857: JMenu menu = (JMenu) c;
858: if (menu.isSelected())
859: {
860: g.setColor(dark);
861: g.drawLine(x, y, x, y + h);
862: g.drawLine(x, y, x + w, y);
863: g.drawLine(x + w - 2, y + 1, x + w - 2, y + h);
864: g.setColor(light);
865: g.drawLine(x + w - 1, y + 1, x + w - 1, y + h);
866: }
867: }
868: else if (c instanceof JMenuItem)
869: {
870: JMenuItem item = (JMenuItem) c;
871: if (item.isArmed())
872: {
873: g.setColor(dark);
874: g.drawLine(x, y, x + w, y);
875: g.setColor(light);
876: g.drawLine(x, y + h - 1, x + w, y + h - 1);
877: }
878: else
879: {
880:
881: g.setColor(light);
882: g.drawLine(x, y, x, y + h);
883: }
884: }
885: }
886:
887:
894: public Insets getBorderInsets(Component c)
895: {
896: return borderInsets;
897: }
898:
899:
909: public Insets getBorderInsets(Component c, Insets insets)
910: {
911: insets.left = borderInsets.left;
912: insets.top = borderInsets.top;
913: insets.bottom = borderInsets.bottom;
914: insets.right = borderInsets.right;
915: return insets;
916: }
917: }
918:
919:
922: public static class MenuBarBorder
923: extends AbstractBorder
924: implements UIResource
925: {
926:
927: protected static Insets borderInsets = new Insets(1, 0, 1, 0);
928:
929:
930: private static Color borderColor = new Color(153, 153, 153);
931:
932:
935: public MenuBarBorder()
936: {
937:
938: }
939:
940:
951: public void paintBorder(Component c, Graphics g, int x, int y, int w,
952: int h)
953: {
954: g.setColor(borderColor);
955: g.drawLine(x, y + h - 1, x + w, y + h - 1);
956: }
957:
958:
965: public Insets getBorderInsets(Component c)
966: {
967: return borderInsets;
968: }
969:
970:
980: public Insets getBorderInsets(Component c, Insets insets)
981: {
982: insets.left = borderInsets.left;
983: insets.top = borderInsets.top;
984: insets.bottom = borderInsets.bottom;
985: insets.right = borderInsets.right;
986: return insets;
987: }
988: }
989:
990:
993: public static class ScrollPaneBorder
994: extends AbstractBorder
995: implements UIResource
996: {
997:
998: private static Insets insets = new Insets(1, 1, 2, 2);
999:
1000:
1003: public ScrollPaneBorder()
1004: {
1005:
1006: }
1007:
1008:
1013: public Insets getBorderInsets(Component c)
1014: {
1015: return insets;
1016: }
1017:
1018:
1028: public void paintBorder(Component c, Graphics g, int x, int y,
1029: int w, int h)
1030: {
1031: Color darkShadow = MetalLookAndFeel.getControlDarkShadow();
1032: Color shadow = MetalLookAndFeel.getControlShadow();
1033: Color light = MetalLookAndFeel.getWhite();
1034: Color middle = MetalLookAndFeel.getControl();
1035:
1036:
1037: g.setColor(darkShadow);
1038: g.drawLine(x, y, x + w - 2, y);
1039:
1040:
1041: g.drawLine(x, y, x, y + h - 2);
1042:
1043:
1044: g.drawLine(x + w - 2, y, x + w - 2, y + h + 1);
1045:
1046:
1047: g.drawLine(x + 2, y + h - 2, x + w - 2, y + h - 2);
1048:
1049:
1050: g.setColor(light);
1051: g.drawLine(x + w - 1, y, x + w - 1, y + h - 1);
1052:
1053:
1054: g.drawLine(x, y + h - 1, x + w - 1, y + h - 1);
1055:
1056:
1057: g.setColor(middle);
1058: g.drawLine(x + w - 1, y, x + w - 1, y);
1059: g.drawLine(x + w - 2, y + 2, x + w - 2, y + 2);
1060: g.drawLine(x, y + h - 1, x, y + h - 1);
1061: g.drawLine(x + 1, y + h - 2, x + 1, y + h - 2);
1062:
1063: }
1064:
1065: }
1066:
1067:
1071: public static class RolloverButtonBorder
1072: extends MetalBorders.ButtonBorder
1073: {
1074:
1077: public RolloverButtonBorder()
1078: {
1079:
1080: }
1081:
1082:
1092: public void paintBorder(Component c, Graphics g, int x, int y, int w,
1093: int h)
1094: {
1095:
1096:
1097:
1098: super.paintBorder(c, g, x, y, w, h);
1099: }
1100: }
1101:
1102:
1105: static class RolloverMarginBorder extends AbstractBorder
1106: {
1107:
1108: protected static Insets borderInsets = new Insets(3, 3, 3, 3);
1109:
1110:
1113: public RolloverMarginBorder()
1114: {
1115:
1116: }
1117:
1118:
1125: public Insets getBorderInsets(Component c)
1126: {
1127: return getBorderInsets(c, null);
1128: }
1129:
1130:
1139: public Insets getBorderInsets(Component c, Insets newInsets)
1140: {
1141: if (newInsets == null)
1142: newInsets = new Insets(0, 0, 0, 0);
1143:
1144: AbstractButton b = (AbstractButton) c;
1145: Insets margin = b.getMargin();
1146: newInsets.bottom = borderInsets.bottom;
1147: newInsets.left = borderInsets.left;
1148: newInsets.right = borderInsets.right;
1149: newInsets.top = borderInsets.top;
1150: return newInsets;
1151: }
1152: }
1153:
1154:
1157: public static class PopupMenuBorder
1158: extends AbstractBorder
1159: implements UIResource
1160: {
1161:
1162:
1163: protected static Insets borderInsets = new Insets(3, 1, 2, 1);
1164:
1165:
1168: public PopupMenuBorder()
1169: {
1170:
1171: }
1172:
1173:
1180: public Insets getBorderInsets(Component c)
1181: {
1182: return getBorderInsets(c, null);
1183: }
1184:
1185:
1192: public Insets getBorderInsets(Component c, Insets i)
1193: {
1194: Insets insets;
1195: if (i == null)
1196: insets = new Insets(borderInsets.top, borderInsets.left,
1197: borderInsets.bottom, borderInsets.right);
1198: else
1199: {
1200: insets = i;
1201: insets.top = borderInsets.top;
1202: insets.left = borderInsets.left;
1203: insets.bottom = borderInsets.bottom;
1204: insets.right = borderInsets.right;
1205: }
1206:
1207: return insets;
1208: }
1209:
1210:
1222: public void paintBorder(Component c, Graphics g, int x, int y, int w,
1223: int h)
1224: {
1225: Color darkShadow = MetalLookAndFeel.getPrimaryControlDarkShadow();
1226: Color light = MetalLookAndFeel.getPrimaryControlHighlight();
1227:
1228:
1229: g.setColor(darkShadow);
1230: g.drawRect(x, y, w - 1, h - 1);
1231:
1232:
1233: g.setColor(light);
1234: g.drawLine(x + 1, y + 1, x + w - 2, y + 1);
1235: }
1236:
1237: }
1238:
1239:
1244: public static class ToggleButtonBorder
1245: extends ButtonBorder
1246: {
1247:
1250: public ToggleButtonBorder()
1251: {
1252:
1253: }
1254:
1255:
1265: public void paintBorder(Component c, Graphics g, int x, int y, int w,
1266: int h)
1267: {
1268: ButtonModel bmodel = null;
1269:
1270: if (c instanceof AbstractButton)
1271: bmodel = ((AbstractButton) c).getModel();
1272:
1273: Color darkShadow = MetalLookAndFeel.getControlDarkShadow();
1274: Color shadow = MetalLookAndFeel.getControlShadow();
1275: Color light = MetalLookAndFeel.getWhite();
1276: Color middle = MetalLookAndFeel.getControl();
1277:
1278: if (c.isEnabled())
1279: {
1280:
1281: g.setColor(darkShadow);
1282: g.drawRect(x, y, w - 2, h - 2);
1283:
1284: if (!bmodel.isArmed())
1285: {
1286:
1287: g.setColor(light);
1288: g.drawLine(x + 1, y + h - 1, x + w - 1, y + h - 1);
1289: g.drawLine(x + w - 1, y + 1, x + w - 1, y + h - 1);
1290: if (bmodel.isSelected())
1291: g.setColor(middle);
1292: g.drawLine(x + 1, y + 1, x + w - 3, y + 1);
1293: g.drawLine(x + 1, y + 1, x + 1, y + h - 3);
1294:
1295:
1296: g.setColor(shadow);
1297: g.drawLine(x + 1, y + h - 2, x + 1, y + h - 2);
1298: g.drawLine(x + w - 2, y + 1, x + w - 2, y + 1);
1299: }
1300: else
1301: {
1302:
1303: g.setColor(light);
1304: g.drawLine(x + w - 1, y + 1, x + w - 1, y + h - 1);
1305: g.drawLine(x + 1, y + h - 1, x + w - 1, y + h - 1);
1306:
1307:
1308: g.setColor(shadow);
1309: g.drawLine(x + 1, y + 1, x + w - 2, y + 1);
1310: g.drawLine(x + 1, y + 1, x + 1, y + h - 2);
1311:
1312:
1313: g.setColor(shadow);
1314: g.drawLine(x + 1, y + h - 2, x + 1, y + h - 2);
1315: g.drawLine(x + w - 2, y + 1, x + w - 2, y + 1);
1316:
1317: }
1318:
1319: g.setColor(middle);
1320: g.drawLine(x, y + h - 1, x, y + h - 1);
1321: g.drawLine(x + w - 1, y, x + w - 1, y);
1322: }
1323: else
1324: {
1325:
1326: g.setColor(MetalLookAndFeel.getControlDisabled());
1327: g.drawRect(x, y, w - 2, h - 2);
1328: }
1329: }
1330: }
1331:
1332:
1335: public static class ToolBarBorder extends AbstractBorder
1336: implements UIResource, SwingConstants
1337: {
1338:
1341: public ToolBarBorder()
1342: {
1343:
1344: }
1345:
1346:
1353: public Insets getBorderInsets(Component c)
1354: {
1355: return getBorderInsets(c, null);
1356: }
1357:
1358:
1364: public Insets getBorderInsets(Component c, Insets newInsets)
1365: {
1366: JToolBar tb = (JToolBar) c;
1367: if (tb.getOrientation() == JToolBar.HORIZONTAL)
1368: {
1369: if (newInsets == null)
1370: newInsets = new Insets(2, 16, 2, 2);
1371: else
1372: {
1373: newInsets.top = 2;
1374: newInsets.left = 16;
1375: newInsets.bottom = 2;
1376: newInsets.right = 2;
1377: }
1378: return newInsets;
1379: }
1380: else
1381: {
1382: if (newInsets == null)
1383: newInsets = new Insets(16, 2, 2, 2);
1384: else
1385: {
1386: newInsets.top = 16;
1387: newInsets.left = 2;
1388: newInsets.bottom = 2;
1389: newInsets.right = 2;
1390: }
1391: return newInsets;
1392: }
1393:
1394: }
1395:
1396:
1406: public void paintBorder(Component c, Graphics g, int x, int y, int w,
1407: int h)
1408: {
1409:
1410: JToolBar tb = (JToolBar) c;
1411: if (tb.getOrientation() == JToolBar.HORIZONTAL)
1412: {
1413: MetalUtils.fillMetalPattern(tb, g, x + 2, y + 2, x + 11, y + h - 5,
1414: MetalLookAndFeel.getControlHighlight(),
1415: MetalLookAndFeel.getControlDarkShadow());
1416: }
1417: else
1418: {
1419: MetalUtils.fillMetalPattern(tb, g, x + 2, y + 2, x + w - 5, y + 11,
1420: MetalLookAndFeel.getControlHighlight(),
1421: MetalLookAndFeel.getControlDarkShadow());
1422: }
1423: }
1424:
1425: }
1426:
1427:
1432: public static class TableHeaderBorder extends AbstractBorder
1433: {
1434:
1437:
1438:
1439:
1440: protected Insets editorBorderInsets;
1441:
1442:
1445: public TableHeaderBorder()
1446: {
1447: editorBorderInsets = new Insets(1, 1, 1, 1);
1448: }
1449:
1450:
1455: public Insets getBorderInsets(Component c)
1456: {
1457: return editorBorderInsets;
1458: }
1459:
1460:
1470: public void paintBorder(Component c, Graphics g, int x, int y, int w, int h)
1471: {
1472: Color dark = MetalLookAndFeel.getControlDarkShadow();
1473: Color light = MetalLookAndFeel.getWhite();
1474: Color old = g.getColor();
1475: g.setColor(light);
1476: g.drawLine(x, y, x + w - 2, y);
1477: g.drawLine(x, y, x, y + h - 2);
1478: g.setColor(dark);
1479: g.drawLine(x + w - 1, y, x + w - 1, y + h - 1);
1480: g.drawLine(x + 1, y + h - 1, x + w - 1, y + h - 1);
1481: g.setColor(old);
1482: }
1483: }
1484:
1485:
1490: public static Border getButtonBorder()
1491: {
1492: if (buttonBorder == null)
1493: {
1494: Border outer = new ButtonBorder();
1495: Border inner = getMarginBorder();
1496: buttonBorder = new BorderUIResource.CompoundBorderUIResource(outer,
1497: inner);
1498: }
1499: return buttonBorder;
1500: }
1501:
1502:
1509: public static Border getToggleButtonBorder()
1510: {
1511: if (toggleButtonBorder == null)
1512: {
1513: Border outer = new ToggleButtonBorder();
1514: Border inner = getMarginBorder();
1515: toggleButtonBorder = new BorderUIResource.CompoundBorderUIResource(
1516: outer, inner);
1517: }
1518: return toggleButtonBorder;
1519: }
1520:
1521:
1529: public static Border getDesktopIconBorder()
1530: {
1531: if (desktopIconBorder == null)
1532: desktopIconBorder = new DesktopIconBorder();
1533: return desktopIconBorder;
1534: }
1535:
1536:
1543: public static Border getTextFieldBorder()
1544: {
1545: if (textFieldBorder == null)
1546: {
1547: Border inner = getMarginBorder();
1548: Border outer = new TextFieldBorder();
1549: textFieldBorder =
1550: new BorderUIResource.CompoundBorderUIResource(outer, inner);
1551: }
1552: return textFieldBorder;
1553: }
1554:
1555:
1563: public static Border getTextBorder()
1564: {
1565: if (textBorder == null)
1566: {
1567: Border inner = getMarginBorder();
1568: Border outer = new Flush3DBorder();
1569: textBorder =
1570: new BorderUIResource.CompoundBorderUIResource(outer, inner);
1571: }
1572: return textBorder;
1573: }
1574:
1575:
1580: static Border getToolbarButtonBorder()
1581: {
1582: if (toolbarButtonBorder == null)
1583: {
1584: Border outer = new ButtonBorder();
1585: Border inner = new RolloverMarginBorder();
1586: toolbarButtonBorder = new CompoundBorder(outer, inner);
1587: }
1588: return toolbarButtonBorder;
1589: }
1590:
1591:
1596: static Border getMarginBorder()
1597: {
1598: if (marginBorder == null)
1599: marginBorder = new BasicBorders.MarginBorder();
1600: return marginBorder;
1601: }
1602:
1603:
1608: static Border getRolloverBorder()
1609: {
1610: if (rolloverBorder == null)
1611: {
1612: Border outer = new MetalBorders.RolloverButtonBorder();
1613: Border inner = MetalBorders.getMarginBorder();
1614: rolloverBorder = new BorderUIResource.CompoundBorderUIResource(outer,
1615: inner);
1616: }
1617: return rolloverBorder;
1618: }
1619:
1620: }