import java.awt.Color;
import java.awt.Component;
import java.awt.Graphics;
import java.awt.GridLayout;
import java.awt.Insets;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.border.Border;
public class OvalBorder implements Border {
protected int ovalWidth = 6;
protected int ovalHeight = 6;
protected Color lightColor = Color.white;
protected Color darkColor = Color.gray;
public OvalBorder() {
ovalWidth = 6;
ovalHeight = 6;
}
public OvalBorder(int w, int h) {
ovalWidth = w;
ovalHeight = h;
}
public OvalBorder(int w, int h, Color topColor, Color bottomColor) {
ovalWidth = w;
ovalHeight = h;
lightColor = topColor;
darkColor = bottomColor;
}
public Insets getBorderInsets(Component c) {
return new Insets(ovalHeight, ovalWidth, ovalHeight, ovalWidth);
}
public boolean isBorderOpaque() {
return true;
}
public void paintBorder(Component c, Graphics g, int x, int y, int width,
int height) {
width--;
height--;
g.setColor(lightColor);
g.drawLine(x, y + height - ovalHeight, x, y + ovalHeight);
g.drawArc(x, y, 2 * ovalWidth, 2 * ovalHeight, 180, -90);
g.drawLine(x + ovalWidth, y, x + width - ovalWidth, y);
g.drawArc(x + width - 2 * ovalWidth, y, 2 * ovalWidth, 2 * ovalHeight,
90, -90);
g.setColor(darkColor);
g.drawLine(x + width, y + ovalHeight, x + width, y + height
- ovalHeight);
g.drawArc(x + width - 2 * ovalWidth, y + height - 2 * ovalHeight,
2 * ovalWidth, 2 * ovalHeight, 0, -90);
g
.drawLine(x + ovalWidth, y + height, x + width - ovalWidth, y
+ height);
g.drawArc(x, y + height - 2 * ovalHeight, 2 * ovalWidth,
2 * ovalHeight, -90, -90);
}
public static void main(String[] s) {
JFrame f = new JFrame("Oval Border");
f.setSize(100, 100);
JPanel p = new JPanel(new GridLayout(0, 1, 5, 5));
JLabel l = new JLabel("Oval Border");
l.setBorder(new OvalBorder());
p.add(l);
p.setBorder(new OvalBorder());
f.getContentPane().add(p);
f.show();
}
}