import java.awt.*; import java.awt.geom.*; import javax.swing.*; /* * 窗口中绘图(长方形,椭圆,对角线,圆) * class structure * Point2D-Point * -Ellipse2D * Shape-Rectangular Shape | * | -Rectangel2D-Rectangle * ---Line2D * * -Rectangle2D.Float * Rectangele2D-| * -Rectangle2d.Double */ public class DrawTest { public static void main(String[] args){ EventQueue.invokeLater(new Runnable() { public void run() { DrawFrame frame = new DrawFrame(); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setVisible(true); } }); } } /** * A frame that contains apanel with drawings */ class DrawFrame extends JFrame { public DrawFrame() { setTitle("DrawFrame"); setSize(DEFAULT_WIDTH,DEFAULT_HEIGHT); //add a panel to frame DrawComponent component = new DrawComponent(); add(component); } public static final int DEFAULT_WIDTH = 400; public static final int DEFAULT_HEIGHT = 400; } /** * A component that displays rectangles and ellipses */ class DrawComponent extends JComponent { public void paintComponent(Graphics g) { Graphics2D g2 = (Graphics2D)g; //draw a rectangle double leftX = 100; double topY = 100; double width = 200; double height = 150; Rectangle2D rect = new Rectangle2D.Double(leftX,topY,width,height); g2.draw(rect); //draw a ellipse //*Ellipse2D ellipse = new Ellipse2D.Double(leftX,topY,width,height); Ellipse2D ellipse = new Ellipse2D.Double(); ellipse.setFrame(rect); g2.draw(ellipse); //draw a diagonal line g2.draw(new Line2D.Double(leftX,topY,leftX+width,topY+height)); //draw a circle with the same center double centerX = leftX + width/2; double centerY = topY + height/2; double radius = 150; Ellipse2D circle = new Ellipse2D.Double(); circle.setFrameFromCenter(centerX, centerY,centerX+radius,centerY+radius); //*Ellipse2D circle = new Ellipse2D.Double(leftX,topY,radius*2,radius*2); g2.draw(circle); } }