import java.awt.Color;
import java.awt.Component;
import java.awt.Graphics;
import java.awt.Insets;
import javax.swing.border.AbstractBorder;
public class RectangleBorder extends AbstractBorder {
protected Insets thickness;
protected Color lineColor;
protected Insets gap;
public RectangleBorder(Color color) {
this(color, new Insets(1, 1, 1, 1));
}
public RectangleBorder(Color color, Insets thickness) {
this(color, thickness, thickness);
}
public RectangleBorder(Color color, Insets thickness, Insets gap) {
lineColor = color;
this.thickness = thickness;
this.gap = gap;
}
public void paintBorder(Component c, Graphics g, int x, int y, int width, int height) {
Color oldColor = g.getColor();
g.setColor(lineColor);
// top
for (int i = 0; i < thickness.top; i++) {
g.drawLine(x, y + i, x + width, y + i);
}
// bottom
for (int i = 0; i < thickness.bottom; i++) {
g.drawLine(x, y + height - i - 1, x + width, y + height - i - 1);
}
// right
for (int i = 0; i < thickness.right; i++) {
g.drawLine(x + width - i - 1, y, x + width - i - 1, y + height);
}
// left
for (int i = 0; i < thickness.left; i++) {
g.drawLine(x + i, y, x + i, y + height);
}
g.setColor(oldColor);
}
/**
* Returns the insets of the border.
*
* @param c
* the component for which this border insets value applies
*/
public Insets getBorderInsets(Component c) {
return gap;
}
public Insets getBorderInsets(Component c, Insets insets) {
insets.left = gap.left;
insets.top = gap.top;
insets.right = gap.right;
insets.bottom = gap.bottom;
return insets;
}
/**
* Returns the color of the border.
*/
public Color getLineColor() {
return lineColor;
}
/**
* Returns the thickness of the border.
*/
public Insets getThickness() {
return thickness;
}
/**
* Returns whether or not the border is opaque.
*/
public boolean isBorderOpaque() {
return false;
}
public Insets getGap() {
return gap;
}
}