Java实时画线

  1. package Package;
  2. import java.awt.*;
  3. import java.awt.event.*;
  4. import javax.swing.*;
  5. import java.util.ArrayList;
  6. /**
  7.  * @author atlightsgh@gmail.com 2008-11-26
  8.  */
  9. public class MouseTester {
  10.     public static void main(String[] args) {
  11.         EventQueue.invokeLater(new Runnable() {
  12.             public void run() {
  13.                 new Frame();
  14.             }
  15.         });
  16.     }
  17. }
  18. class Frame extends JFrame {
  19.     private final int width = 800;
  20.     private final int height = 600;
  21.     Frame() {
  22.         this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  23.         this.setTitle("Title");
  24.         this.setSize(width, height);
  25.         this.setVisible(true);
  26.         this.add(new myPanel());
  27.     }
  28.     class myPanel extends JPanel {
  29.         private ArrayList<Line> Lines;
  30.         private Line l;
  31.         myPanel() {
  32.             Lines = new ArrayList<Line>();
  33.             l = new Line();
  34.             setBackground(Color.WHITE);
  35.             MouseListener Listener = new MouseListener();
  36.             addMouseListener(Listener);
  37.             addMouseMotionListener(Listener);
  38.         }
  39.         public void paintComponent(Graphics g) {
  40.             Graphics2D g2 = (Graphics2D) g;         
  41.             g2.clearRect(00, width, height);
  42.             for (Line e : Lines) {
  43.                 g2.drawLine(e.x1, e.y1, e.x2, e.y2);
  44.             }
  45.             g2.drawLine(l.x1, l.y1, l.x2, l.y2);
  46.         }
  47.         // 鼠标事件响应,同时接受鼠标点击和鼠标移动事件.
  48.         public class MouseListener extends MouseAdapter implements
  49.                 MouseMotionListener {
  50.             public void mousePressed(MouseEvent e) {
  51.                 l.x1 = e.getX();
  52.                 l.y1 = e.getY();
  53.             }
  54.             public void mouseReleased(MouseEvent e) {
  55.                 l.x2 = e.getX();
  56.                 l.y2 = e.getY();
  57.                 try {
  58.                     Lines.add(l.clone());
  59.                 } catch (CloneNotSupportedException e1) {
  60.                     e1.printStackTrace();
  61.                 }
  62.             }
  63.             //不断连续画当前鼠标的线
  64.             public void mouseDragged(MouseEvent e) {
  65.                 l.x2 = e.getX();
  66.                 l.y2 = e.getY();
  67.                 myPanel.this.repaint();
  68.             }
  69.         }
  70.     }
  71. }
  72. class Line implements Cloneable {
  73.     int x1;
  74.     int y1;
  75.     int x2;
  76.     int y2;
  77.     public Line() {
  78.         x1 = y1 = x2 = y2 = 0;
  79.     }
  80.     public Line clone() throws CloneNotSupportedException {
  81.         return (Line) super.clone();
  82.     }
  83.     private Line(int x1, int y1, int x2, int y2) {
  84.         this.x1 = x1;
  85.         this.y1 = y1;
  86.         this.x2 = x2;
  87.         this.y2 = y2;
  88.     }
  89.     public String toString() {
  90.         return "[x1=" + x1 + ",y1=" + y1 + ",x2=" + x2 + ",y2=" + y2 + "]";
  91.     }
  92. }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值