001: // $Id: BorderPanel.java,v 1.8 2000/08/16 21:37:56 ylafon Exp $
002: // (c) COPYRIGHT MIT and INRIA, 1997.
003: // Please first read the full copyright statement in file COPYRIGHT.html
004:
005: package org.w3c.tools.widgets;
006:
007: import java.awt.Color;
008: import java.awt.Container;
009: import java.awt.Dimension;
010: import java.awt.Graphics;
011: import java.awt.Insets;
012: import java.awt.Panel;
013:
014: /**
015: * A Panel with a border (SOLID, RAISED, LOWERED, IN or OUT)
016: * @author Benoit.Mahe@sophia.inria.fr
017: * @author Thierry.Kormann@sophia.inria.fr
018: */
019:
020: public class BorderPanel extends Panel {
021:
022: public static final int SOLID = 0;
023: public static final int RAISED = 1;
024: public static final int LOWERED = 2;
025: public static final int IN = 3;
026: public static final int OUT = 4;
027:
028: private static final int DEFAULT_THICKNESS = 2;
029: private int type;
030: private int thickness;
031:
032: protected Insets insets = null;
033:
034: /**
035: * Constructor.
036: * @param type The border type (SOLID, RAISED, LOWERED, IN or OUT)
037: * @param thickness The border thickness.
038: */
039: public BorderPanel(int type, int thickness) {
040: this .type = type;
041: this .thickness = thickness;
042: build();
043: }
044:
045: /**
046: * Constructor.
047: * @param type The border type (SOLID, RAISED, LOWERED, IN or OUT)
048: */
049: public BorderPanel(int type) {
050: this .type = type;
051: thickness = DEFAULT_THICKNESS;
052: build();
053: }
054:
055: private void build() {
056: insets = new Insets(thickness, thickness, thickness, thickness);
057: }
058:
059: /**
060: * Paint the border (if any), and then, paint the components.
061: * @param graphics the specified Graphics window
062: */
063: public void paint(Graphics graphics) {
064: if (thickness > 0) {
065: // in some case getSize() doesn't return the right size.
066: Dimension size = size();
067: graphics.setColor(getBackground());
068: switch (type) {
069: case SOLID:
070: graphics.setColor(getForeground());
071: for (int i = 0; i < thickness; ++i)
072: graphics.drawRect(i, i, size.width - i * 2 - 1,
073: size.height - i * 2 - 1);
074: break;
075: case RAISED:
076: for (int i = 0; i < thickness; ++i)
077: graphics.draw3DRect(i, i, size.width - i * 2 - 1,
078: size.height - i * 2 - 1, true);
079: break;
080: case LOWERED:
081: for (int i = 0; i < thickness; ++i)
082: graphics.draw3DRect(i, i, size.width - i * 2 - 1,
083: size.height - i * 2 - 1, false);
084: break;
085: case IN:
086: graphics.draw3DRect(0, 0, size.width - 1,
087: size.height - 1, false);
088: graphics.draw3DRect(thickness - 1, thickness - 1,
089: size.width - thickness * 2 + 1, size.height
090: - thickness * 2 + 1, true);
091: break;
092: case OUT:
093: graphics.draw3DRect(0, 0, size.width - 1,
094: size.height - 1, true);
095: graphics.draw3DRect(thickness - 1, thickness - 1,
096: size.width - thickness * 2 + 1, size.height
097: - thickness * 2 + 1, false);
098: break;
099: }
100: }
101: super .paint(graphics);
102: }
103:
104: public Insets getInsets() {
105: return insets;
106: }
107:
108: public void setInsets(Insets insets) {
109: this.insets = insets;
110: }
111:
112: }
|