OvalBorder.java Source code

Java tutorial

Introduction

Here is the source code for OvalBorder.java

Source

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();
    }
}