/* MyButtonBorder.java */ import java.awt.*; import javax.swing.*; import javax.swing.border.*; public class MyButtonBorder extends AbstractBorder { //private static Border buttonBorder = new MyButtonBorder(); private static MyButtonBorder buttonBorder = new MyButtonBorder(); //public static Border getButtonBorder() public static MyButtonBorder getButtonBorder() { return buttonBorder; } public void paintBorder( Component c, Graphics g, int x, int y, int width, int height ) { boolean pressed = false; boolean focused = false; if( c instanceof AbstractButton ) { AbstractButton b = (AbstractButton)c; ButtonModel bm = b.getModel(); pressed = bm.isPressed(); focused = (pressed && bm.isArmed()) || (b.isFocusPainted() && b.hasFocus() ); } Insets in = getBorderInsets( c ); Polygon p1 = new Polygon(); p1.addPoint( x+in.left, y ); p1.addPoint( x, y+(height/2) ); p1.addPoint( x+in.left, y+height ); Polygon p2 = new Polygon(); p2.addPoint( x+width-in.right, y ); p2.addPoint( x+width, y+(height/2) ); p2.addPoint( x+width-in.right, y+height ); if( pressed ) { g.setColor( c.getForeground() ); } else if( focused ) { g.setColor( SystemColor.green ); } else { g.setColor( SystemColor.red ); } g.fillPolygon( p1 ); g.fillPolygon( p2 ); } public Insets getBorderInsets( Component c ) { return new Insets( 5, 10, 5, 10 ); } }