⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 drawinggizmo.java

📁 Java程序设计(美) David D. Riley著 机械工业出版社 书籍配套 代码
💻 JAVA
字号:
import java.awt.*;import javax.swing.*;/**  DrawingGizmo is like a drawing pen that *  can be moved around a drawing canvas *  This is similar to a turtle from the *  LOGO programming language. * *  Class Invariant *      window is instantiated with a canvas of 260 by 160 colored *      and  the window is colored as established by setBackground *		and  (locX, locY) maintains the position of the drawing tool *			 within the window canvas *      and  direction indicates the direction of travel (in degrees) *          (increasing the direction value rotates clockwise)  */public class DrawingGizmo extends JComponent {    private static JFrame window;    private int locX, locY;    private boolean isDrawing;    private int direction;    private Robot delayTimer;    /** post:   window@pre!=null implies window == window@pre	 *			and  window.getContentPane().getWidth()==200  and  window.getContentPane().getHeight()==160	 *			and  getX() == 127  and  getY() == 77  and  getWidth() == getHeight() == 9	 *			and  isDrawing	 *			and  direction == -90 (the triangle points up)	 *			and  getForeground() == Color.green      */    public DrawingGizmo()  {        super();        if  ( window == null )   {            window = new JFrame( "Drawing Canvas");			window.getContentPane().setLayout(null);			window.setVisible(true);            window.setBounds(50, 50,                             260 + window.getInsets().left + window.getInsets().right,                            160 + window.getInsets().top + window.getInsets().bottom);         }		locX = 127;		locY = 77;		setBounds(locX,locY,9,9);        draw();        direction = -90;        window.getContentPane().add(this);        repaint();        window.repaint();        try {            delayTimer = new Robot();        }        catch (Exception e) {            System.out.println("This System does not support java.awt.Robot usage.");        }    }    /** post:  isDrawing */    public void draw()   {        isDrawing = true;    }    /** post:   !isDrawing */    public void dontDraw()   {        isDrawing = false;        repaint();    }    /** post:  direction == direction@pre + d  (direction rotates clockwise by d degrees) */    public void turnBy(int d)   {        direction = direction + d;        repaint();    }    /** post:  direction == direction@pre + 30  (direction rotates clockwise by 10 degrees) */    public void turnClockwise()   {        turnBy(30);    }    /** post:  direction == direction@pre - 30  (direction rotates counterclockwise by 10 degrees) */    public void turnCounterclockwise()   {        turnBy(-30);    }    /** post:  (locX, locY) is a point at angle direction and d units from (locX@pre, locY@pre)	 *			and  isDrawing implies a line segment is drawn connecting (locX@pre, locY@pre)	 *				 with (locX, locY)      */    public void moveBy( int d )   {        Line line;        int oldX = locX;        int oldY = locY;        locX = oldX + (int)(d * Math.cos(Math.toRadians(direction)));        locY = oldY + (int)(d * Math.sin(Math.toRadians(direction)));        setLocation(locX,locY);        if  ( isDrawing )   {            line = new Line(oldX+4, oldY+4, locX+4, locY+4);			line.setForeground(getForeground());            window.getContentPane().add(line);            line.repaint();        }        repaint();    }    /** post:  (locX, locY) is a point at angle direction and 20 units from (locX@pre, locY@pre)	 *			and  isDrawing implies a line segment is drawn connecting (locX@pre, locY@pre)	 *				 with (locX, locY)      */    public void moveForward()   {        moveBy(20);    }        /** post:  the window is recolored to match c */    public void setBackground(Color c)   {        window.setBackground(c);    }    /**   post: thisis drawn as an arrow at position (locX,locY),      *              angled according to direction	 *          and isDrawing implies the arrow is colored green	 *			otherwise the arrow is colored red      */    public void paint(Graphics g)  {		if (isDrawing)			g.setColor( Color.green );		else			g.setColor( Color.red );        ((Graphics2D)g).rotate(Math.toRadians(direction), getWidth()/2, getHeight()/2);        g.drawLine(2, 1, 8, 4);        g.drawLine(8, 4, 2, 7);        g.drawLine(0, 4, 8, 4);        g.drawLine(6, 3, 6, 5);        g.drawLine(5, 3, 5, 5);        g.drawLine(4, 2, 4, 6);        g.drawLine(3, 2, 3, 6);    }       public void delay2Sec() {        delayTimer.delay(2000);    }       public void delayBy(int t) {        delayTimer.delay(t);    }   /** This internal class is used to construct line segments for the drawing tool. */   private class Line extends JComponent  {    private boolean isMajorDiagonal;    public Line(int x1, int y1, int x2, int y2) {        super();        setBounds(Math.min(x1, x2), Math.min(y1, y2), Math.abs(x1-x2)+1, Math.abs(y1-y2)+1);        isMajorDiagonal = (x1==Math.min(x1,x2) && y1==Math.min(y1,y2)) || (x2==Math.min(x1,x2) && y2==Math.min(y1,y2));             }        public void paint(Graphics g) {        g.setColor(getForeground());        if (isMajorDiagonal)            g.drawLine(0, 0, getWidth()-1, getHeight()-1);        else            g.drawLine(0, getHeight()-1, getWidth()-1, 0);    }}}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -