Rawbutton: Rawbutton.java

import java.awt.*;
import java.awt.geom.*;

/**
 * Screen button, built without using a toolkit
 *
 * To use this, you must draw() it and domouse() it when needed
 */
public class Rawbutton { //*1 Object not JComponent
    /**
     * We remember our label, so can redraw
     */
    protected String label; //*2 We remember our label, use for redraw

    /**
     * We remember our location, for redraw *and* for testing mouse input
     */
    protected RectangularShape loc; //*3 We remember our location, use for redraw and mouse

    public Rawbutton (String label, int x, int y) {
	// Stash arg
	this.label = label; //*2

	// You tell us where, but we determine size
	loc = new Rectangle (x, y, 80, 30); //*3
    }

    /**
     * Our parent must call this when it's time to draw us
     */
    public void draw (Graphics g) { //*4 draw() and domouse() are dispatched to us outside of Swing
	Graphics2D g2 = (Graphics2D) g;

	// Background
	g2.setColor (Color.WHITE); //*5 Java2D function, works on other shapes too
	g2.fill (loc); //*5

	// Outline
	g2.setColor (Color.BLACK); //*5
	g2.draw (loc); //*5

	// Label
	g.drawString (label, (int)loc.getX()+10, (int)loc.getY()+25); //*2
    }

    /**
     * Our parent must call this when it gets a mouse click
     */
    public void domouse (int x, int y) { //*4
	if (loc.contains (x, y)) //*5
	    System.out.println ("You pressed the button labeled " + label); //*5
    }
}
[download file]