Mega Code Archive

 
Categories / Java / Swing JFC
 

Demonstrate the custom CurvedBorder class

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