CurvedExample.java Source code

Java tutorial

Introduction

Here is the source code for CurvedExample.java

Source

import java.awt.Color;
import java.awt.Component;
import java.awt.Graphics;
import java.awt.Insets;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JSlider;
import javax.swing.border.AbstractBorder;

public class CurvedExample extends JPanel {

    public CurvedExample() {
        super(true);

        JSlider mySlider = new JSlider();
        mySlider.setMajorTickSpacing(20);
        mySlider.setMinorTickSpacing(10);
        mySlider.setPaintTicks(true);
        mySlider.setPaintLabels(true);

        CurvedBorder border = new CurvedBorder(10, Color.darkGray);
        mySlider.setBorder(border);

        add(mySlider);
    }

    public static void main(String s[]) {
        JFrame frame = new JFrame("Custom Curved Border");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(300, 150);
        frame.setContentPane(new CurvedExample());
        frame.setVisible(true);
    }
}

class CurvedBorder extends AbstractBorder {
    private Color wallColor = Color.gray;

    private int sinkLevel = 10;

    public CurvedBorder() {
    }

    public CurvedBorder(int sinkLevel) {
        this.sinkLevel = sinkLevel;
    }

    public CurvedBorder(Color wall) {
        this.wallColor = wall;
    }

    public CurvedBorder(int sinkLevel, Color wall) {
        this.sinkLevel = sinkLevel;
        this.wallColor = wall;
    }

    public void paintBorder(Component c, Graphics g, int x, int y, int w, int h) {
        g.setColor(getWallColor());

        //  Paint a tall wall around the component
        for (int i = 0; i < sinkLevel; i++) {
            g.drawRoundRect(x + i, y + i, w - i - 1, h - i - 1, sinkLevel - i, sinkLevel);
            g.drawRoundRect(x + i, y + i, w - i - 1, h - i - 1, sinkLevel, sinkLevel - i);
            g.drawRoundRect(x + i, y, w - i - 1, h - 1, sinkLevel - i, sinkLevel);
            g.drawRoundRect(x, y + i, w - 1, h - i - 1, sinkLevel, sinkLevel - i);
        }
    }

    public Insets getBorderInsets(Component c) {
        return new Insets(sinkLevel, sinkLevel, sinkLevel, sinkLevel);
    }

    public Insets getBorderInsets(Component c, Insets i) {
        i.left = i.right = i.bottom = i.top = sinkLevel;
        return i;
    }

    public boolean isBorderOpaque() {
        return true;
    }

    public int getSinkLevel() {
        return sinkLevel;
    }

    public Color getWallColor() {
        return wallColor;
    }
}