上次写了一个可以跟随鼠标移动的代码,但是存在很多的bug 这次通过精简,实现了可移动划线的代码。通过调用父类的paint()方法可以实现清除路迹,然后通过Point()类数组来记录鼠标每次的按下以及抬起的位置,每次重绘之前的线段。除此之外还按照同理实现了矩形的跟随鼠标拉伸。之后会继续完善绘图程序。不多说了直接上代码。
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package mypaint;
import java.awt.AlphaComposite;
import java.awt.BasicStroke;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.List;
import java.awt.Point;
import java.awt.RenderingHints;
import java.awt.Shape;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionAdapter;
import java.awt.event.MouseMotionListener;
import java.awt.geom.Rectangle2D;
import java.util.ArrayList;
import javax.swing.JColorChooser;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
/**
*
* @author Asus
*/
public class NewJFrame extends JFrame implements MouseListener,MouseMotionListener{
public Color color=new Color(0,0,0);
public static int flag=0,flag2=0,total=0,total1=0;
public static int startx,starty,endx,endy,x,y;
public Point []ps=new Point[1000];//直线数组
public Point []ps1=new Point[1000];//矩形数组
//public Point []ps2=new Point[1000];
@Override
public void paint(Graphics g) {
super.paint(g); //To change body of generated methods, choose Tools | Templates.
g.setColor(color);
if(flag==1)
{
if(total!=0)
for(int i=0;i<total-1;i=i+2)
{
//System.out.println(ps[i].x+"+"+ps[i].y);
g.drawLine(ps[i].x, ps[i].y, ps[i+1].x, ps[i+1].y);
}
if(total1!=0)
for(int i=0;i<total1-1;i=i+2)
{
//System.out.println(ps[i].x+"+"+ps[i].y);
g.drawRect(ps1[i].x, ps1[i].y, Math.abs(ps1[i].x-ps1[i+1].x), Math.abs(ps1[i].y-ps1[i+1].y));
}
g.drawLine(startx, starty, endx, endy);
}else if(flag==2){
if(total!=0)
for(int i=0;i<total-1;i=i+2)
{
//System.out.println(ps[i].x+"+"+ps[i].y);
g.drawLine(ps[i].x, ps[i].y, ps[i+1].x, ps[i+1].y);
}
if(total1!=0)
for(int i=0;i<total1-1;i=i+2)
{
//System.out.println(ps[i].x+"+"+ps[i].y);
g.drawRect(ps1[i].x, ps1[i].y, Math.abs(ps1[i].x-ps1[i+1].x), Math.abs(ps1[i].y-ps1[i+1].y));
}
g.drawRect(startx, starty,Math.abs(startx-endx) ,Math.abs(starty-endy));
}
}
/**
* Creates new form NewJFrame
*/
public NewJFrame() {
initComponents();
this.addMouseListener(this);
this.addMouseMotionListener(this);
}
/**
* This method is called from within the constructor to initialize the form.
* WARNING: Do NOT modify this code. The content of this method is always
* regenerated by the Form Editor.
*/
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">
private void initComponents() {