Java基础之在窗口中绘图——绘制圆弧和椭圆(Sketcher 3 drawing arcs and ellipses)
控制台程序。
1 import javax.swing.JComponent; 2 import java.util.*; 3 import java.awt.*; 4 import java.awt.geom.*; 5 6 @SuppressWarnings("serial") 7 public class SketcherView extends JComponent implements Observer { 8 public SketcherView(Sketcher theApp) { 9 this.theApp = theApp; 10 } 11 12 // Method called by Observable object when it changes 13 public void update(Observable o, Object rectangle) { 14 // Code to respond to changes in the model... 15 } 16 17 // Method to draw on the view 18 @Override 19 public void paint(Graphics g) { 20 // Temporary code... 21 Graphics2D g2D = (Graphics2D)g; // Get a Java 2D device context 22 Point2D.Double position = new Point2D.Double(50,10); // Initial position 23 double width = 150; // Width of ellipse 24 double height = 100; // Height of ellipse 25 double start = 30; // Start angle for arc 26 double extent = 120; // Extent of arc 27 double diameter = 40; // Diameter of circle 28 29 // Define open arc as an upper segment of an ellipse 30 Arc2D.Double top = new Arc2D.Double(position.x, position.y, 31 width, height, 32 start, extent, 33 Arc2D.OPEN); 34 35 // Define open arc as lower segment of ellipse shifted up relative to 1st 36 Arc2D.Double bottom = new Arc2D.Double( 37 position.x, position.y - height + diameter, 38 width, height, 39 start + 180, extent, 40 Arc2D.OPEN); 41 42 // Create a circle centered between the two arcs 43 Ellipse2D.Double circle1 = new Ellipse2D.Double( 44 position.x + width/2 - diameter/2,position.y, 45 diameter, diameter); 46 47 // Create a second circle concentric with the first and half the diameter 48 Ellipse2D.Double circle2 = new Ellipse2D.Double( 49 position.x + width/2 - diameter/4, position.y + diameter/4, 50 diameter/2, diameter/2); 51 52 // Draw all the shapes 53 g2D.setPaint(Color.BLACK); // Draw in black 54 g2D.draw(top); 55 g2D.draw(bottom); 56 57 g2D.setPaint(Color.BLUE); // Draw in blue 58 g2D.draw(circle1); 59 g2D.draw(circle2); 60 g2D.drawString("Arcs and ellipses", 80, 100); // Draw some text 61 62 } 63 64 private Sketcher theApp; // The application object 65 }
其他部分与上一例同。