在前面我们实现了画一条直线,那么如何画曲线呢?如何让画笔如同手中的铅笔一样想怎样画就怎样画?那么今天就来实现画铅笔线。
package PaintBoard;
import java.awt.Graphics;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionListener;
import javax.swing.JFrame;
public class MyPanint extends JFrame {
public void showUI(){
this.setSize(400, 400);
this.setLocationRelativeTo(null);
this.setDefaultCloseOperation(3);
this.setTitle("简易画图板");
this.setVisible(true);
Graphics g=this.getGraphics();
Listener1 lisn1=new Listener1(g);
this.addMouseMotionListener(lisn1);
this.addMouseListener(lisn1);
}
// public void paint(Graphics g){
// super.paint(g);
// }
public static void main(String[] args) {
MyPanint mp=new MyPanint();
mp.showUI();
}
}
package PaintBoard;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import java.util.ArrayList;
public class Listener1 implements MouseListener,MouseMotionListener{
int x1,y1,x2,y2;
int x,y;
ArrayList<Position> list1=new ArrayList<>();
ArrayList<Position> list2=new ArrayList<>();
private Graphics g;
public Listener1(Graphics g) {
this.g = g;
}
public void mouseClicked(MouseEvent e) {
}
public void mousePressed(MouseEvent e) {
}
public void mouseReleased(MouseEvent e) {
x2=e.getX();
y2=e.getY();
Position pos=new Position(x2, y2);
list1.add(pos);
}
public void mouseEntered(MouseEvent e) {
}
public void mouseExited(MouseEvent e) {
}
public void mouseDragged(MouseEvent e) {
x=e.getX();
y=e.getY();
Position ps=new Position(x, y);
list2.add(ps);
System.out.println(""+list2.size());
for(int i=1;i<list2.size();i++){
Position pos1=list2.get(i-1);
Position pos2=list2.get(i);
if(Math.abs(pos1.getX()-pos2.getX())>10||Math.abs(pos1.getY()-pos2.getY())>10){
continue;
}else{
g.setColor(Color.RED);
g.drawLine(pos1.getX() ,pos1.getY(),pos2.getX(), pos2.getY());
}
}
}
public void mouseMoved(MouseEvent e) {
// x1=e.getX();
// y1=e.getY();
// System.out.println(""+x1);
}
}
package PaintBoard;
public class Position {
int x,y;
public int getX() {
return x;
}
public void setX(int x) {
this.x = x;
}
public int getY() {
return y;
}
public void setY(int y) {
this.y = y;
}
public Position(int x, int y) {
this.x = x;
this.y = y;
}
}
铅笔线实现的思想就是将鼠标拖拽移动的点的坐标存在链表里面,然后遍历链表,将线条画出来。
画图板就写到这里,只是写了比较典型的一些功能,其余的大多比较的简单,有兴趣的同学可以试着做出电脑上面画图板的效果。