import java.awt.*; import java.awt.geom.*; import java.awt.event.*; import javax.swing.*; /** * Code for subclass IncDecPie */ public class IncdecPie extends Incdec { final static double circleSize = 50.; /** * Superclass constructor does most of the work, we finish the job here, * just choose the layout and the order of the 3 widgets */ public IncdecPie () { setLayout (new GridLayout (3, 1)); makeUp (); makeShow (); makeDown (); } /** * Override base class version */ protected void makeShow () { //*1 We override makeShow show = new Canvas (this); //*1 add (show); //*1 // Don't call refreshShow(), first paint callback will call it } /** * Override base class version */ protected void refreshShow () { //*2 We override refreshShow show.repaint (); //*2 } /** * Paint callback from our canvas, passed up to us, * we redraw from our saved value data */ public void drawCanvas (Graphics g) { Graphics2D g2 = (Graphics2D) g; // Outline g2.draw (new Ellipse2D.Double (0., 0., circleSize, circleSize)); //*3 Draw outline, then filled in segment, using "value" // Filled in segment g2.fill (new Arc2D.Double (0., 0., circleSize, circleSize, 0., 360. * (value-min) / (max-min), Arc2D.PIE)); //*3 } }