Frame不支持main方法的,你可以在Frame内部添加一个支持paint方法的控件,如Panel等等.

解决方案 »

  1.   

    import java.awt.BorderLayout;
    import java.awt.Color;
    import java.awt.Dimension;
    import java.awt.Frame;
    import java.awt.Graphics;
    import java.awt.Graphics2D;
    import java.awt.Label;
    import java.awt.Point;
    import java.awt.Toolkit;
    import java.awt.event.MouseEvent;
    import java.awt.event.MouseListener;
    import java.awt.event.MouseMotionListener;
    import java.awt.event.WindowAdapter;
    import java.awt.event.WindowEvent;
    import java.util.ArrayList;import javax.swing.SwingUtilities;public class DrawLine extends Frame
    {    public static void main(String[] args)
        {
            DrawLine frame = new DrawLine();
            Dimension dmnScreen = Toolkit.getDefaultToolkit().getScreenSize();
            Dimension dmnMain = new Dimension(650, 550);        frame.setTitle("画图测试");
            frame.setSize(dmnMain);
            frame.setLocation(
                (dmnScreen.width - dmnMain.width) / 2,
                (dmnScreen.height - dmnMain.height) / 2);
            frame.setVisible(true);
        }
        private ArrayList altPtDown = new ArrayList();
        private ArrayList altPtUp = new ArrayList();
        private Graphics2D big;
        private Label lblStatus = new Label();
        private Point ptDown;
        private Point ptMove;
        private Point ptMoveOld;
        private String strStatus;    DrawLine()
        {
            super ();
            init();
        }    private void init()
        {
            add(lblStatus, BorderLayout.SOUTH);
            addWindowListener(new WindowAdapter()
            {
                public void windowClosing(WindowEvent arg0)
                {
                    System.exit(0);
                }
            });        this.addMouseMotionListener(new MouseMotionListener()
            {
                public void mouseDragged(MouseEvent arg0)
                {
                    if (SwingUtilities.isLeftMouseButton(arg0))
                    {
                        ptMove = arg0.getPoint();
                        repaint();
                    }
                }            public void mouseMoved(MouseEvent arg0)
                {            }
            });        this.addMouseListener(new MouseListener()
            {
                public void mouseClicked(MouseEvent arg0)
                {            }            public void mouseEntered(MouseEvent arg0)
                {            }            public void mouseExited(MouseEvent arg0)
                {            }            public void mousePressed(MouseEvent arg0)
                {
                    ptDown = new Point(arg0.getPoint());
                    ptMove = new Point(ptDown);
                    ptMoveOld = new Point(ptDown);
                    altPtDown.add(ptDown);
                }            public void mouseReleased(MouseEvent arg0)
                {
                    ptMove = new Point(arg0.getPoint());
                    altPtUp.add(ptMove);
                    ptDown = null;
                    ptMove = null;
                    ptMoveOld = null;
                }
            });
        }    //当窗口被遮住,再显示的时候,调用此方法重绘
        public void paint(Graphics g)
        {
            super.paint(g);
            big = (Graphics2D) g;
            g.setColor(Color.BLACK);        for (int i = 0; i < altPtDown.size(); i++)
            {
                ptDown = (Point) altPtDown.get(i);
                ptMove = (Point) altPtUp.get(i);
                if (ptMove.x > ptDown.x)
                {
                    if (ptMove.y > ptDown.y)
                    {
                        g.drawRect(
                            ptDown.x,
                            ptDown.y,
                            ptMove.x - ptDown.x,
                            ptMove.y - ptDown.y);
                        g.drawOval(
                            ptDown.x,
                            ptDown.y,
                            ptMove.x - ptDown.x,
                            ptMove.y - ptDown.y);
                    }
                    else
                    {
                        g.drawRect(
                            ptDown.x,
                            ptMove.y,
                            ptMove.x - ptDown.x,
                            ptDown.y - ptMove.y);
                        g.drawOval(
                            ptDown.x,
                            ptMove.y,
                            ptMove.x - ptDown.x,
                            ptDown.y - ptMove.y);
                    }
                }
                else
                {
                    if (ptMove.y > ptDown.y)
                    {
                        g.drawRect(
                            ptMove.x,
                            ptDown.y,
                            ptDown.x - ptMove.x,
                            ptMove.y - ptDown.y);
                        g.drawOval(
                            ptMove.x,
                            ptDown.y,
                            ptDown.x - ptMove.x,
                            ptMove.y - ptDown.y);
                    }
                    else
                    {
                        g.drawRect(
                            ptMove.x,
                            ptMove.y,
                            ptDown.x - ptMove.x,
                            ptDown.y - ptMove.y);
                        g.drawOval(
                            ptMove.x,
                            ptMove.y,
                            ptDown.x - ptMove.x,
                            ptDown.y - ptMove.y);
                    }
                }
            }
        }
      

  2.   

    private void swapPoint(Point aPt, Point aPts)
        {
            int intTmp;        if (aPt.x > aPts.x)
            {
                intTmp = aPt.x;
                aPt.x = aPts.x;
                aPts.x = intTmp;
            }        if (aPt.y > aPts.y)
            {
                intTmp = aPt.y;
                aPt.y = aPts.y;
                aPts.y = intTmp;
            }
        }    /* (non-Javadoc)
         * @see java.awt.Component#update(java.awt.Graphics)
         */
        //当画图时调用此方法重绘
        public void update(Graphics g)
        {
            super.paint(g);
            big = (Graphics2D) g;        if (ptDown == null)
                return;
            if (ptMove == null)
                return;
            if (ptMoveOld == null)
                return;
            //Erase Old ======================
            g.setColor(getBackground());
            g.drawLine(ptDown.x, ptDown.y, ptMoveOld.x, ptMoveOld.y);
            if (ptMoveOld.x > ptDown.x)
            {
                if (ptMoveOld.y > ptDown.y)
                {
                    g.drawRect(
                        ptDown.x,
                        ptDown.y,
                        ptMoveOld.x - ptDown.x,
                        ptMoveOld.y - ptDown.y);
                    g.drawOval(
                        ptDown.x,
                        ptDown.y,
                        ptMoveOld.x - ptDown.x,
                        ptMoveOld.y - ptDown.y);
                }
                else
                {
                    g.drawRect(
                        ptDown.x,
                        ptMoveOld.y,
                        ptMoveOld.x - ptDown.x,
                        ptDown.y - ptMoveOld.y);
                    g.drawOval(
                        ptDown.x,
                        ptMoveOld.y,
                        ptMoveOld.x - ptDown.x,
                        ptDown.y - ptMoveOld.y);
                }
            }
            else
            {
                if (ptMoveOld.y > ptDown.y)
                {
                    g.drawRect(
                        ptMoveOld.x,
                        ptDown.y,
                        ptDown.x - ptMoveOld.x,
                        ptMoveOld.y - ptDown.y);
                    g.drawOval(
                        ptMoveOld.x,
                        ptDown.y,
                        ptDown.x - ptMoveOld.x,
                        ptMoveOld.y - ptDown.y);
                }
                else
                {
                    g.drawRect(
                        ptMoveOld.x,
                        ptMoveOld.y,
                        ptDown.x - ptMoveOld.x,
                        ptDown.y - ptMoveOld.y);
                    g.drawOval(
                        ptMoveOld.x,
                        ptMoveOld.y,
                        ptDown.x - ptMoveOld.x,
                        ptDown.y - ptMoveOld.y);
                }
            }        //Draw New ======================
            g.setColor(Color.BLACK);
            g.drawLine(ptDown.x, ptDown.y, ptMove.x, ptMove.y);
            if (ptMove.x > ptDown.x)
            {
                if (ptMove.y > ptDown.y)
                {
                    g.drawRect(
                        ptDown.x,
                        ptDown.y,
                        ptMove.x - ptDown.x,
                        ptMove.y - ptDown.y);
                    g.drawOval(
                        ptDown.x,
                        ptDown.y,
                        ptMove.x - ptDown.x,
                        ptMove.y - ptDown.y);
                }
                else
                {
                    g.drawRect(
                        ptDown.x,
                        ptMove.y,
                        ptMove.x - ptDown.x,
                        ptDown.y - ptMove.y);
                    g.drawOval(
                        ptDown.x,
                        ptMove.y,
                        ptMove.x - ptDown.x,
                        ptDown.y - ptMove.y);
                }
            }
            else
            {
                if (ptMove.y > ptDown.y)
                {
                    g.drawRect(
                        ptMove.x,
                        ptDown.y,
                        ptDown.x - ptMove.x,
                        ptMove.y - ptDown.y);
                    g.drawOval(
                        ptMove.x,
                        ptDown.y,
                        ptDown.x - ptMove.x,
                        ptMove.y - ptDown.y);
                }
                else
                {
                    g.drawRect(
                        ptMove.x,
                        ptMove.y,
                        ptDown.x - ptMove.x,
                        ptDown.y - ptMove.y);
                    g.drawOval(
                        ptMove.x,
                        ptMove.y,
                        ptDown.x - ptMove.x,
                        ptDown.y - ptMove.y);
                }
            }        ptMoveOld = ptMove;
            strStatus =
                ptDown.x
                    + ", "
                    + ptDown.y
                    + "  "
                    + Math.abs(ptDown.x - ptMove.x)
                    + ", "
                    + Math.abs(ptDown.y - ptMove.y);
            lblStatus.setText(strStatus);
        }
    }你也可以看看JAVA自带的演示DEMO!
      

  3.   

    对,看看jdk自带的DEMO,内容很丰富呀.