62,614
社区成员
发帖
与我相关
我的任务
分享
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JMenuBar;
/**
*@author *@version 2009-11-5 上午09:07:54
**/
public class DrawFrame extends JFrame{
/**
* serialVersionUID
*/
private static final long serialVersionUID = -1578708905385949085L;
JButton jButton1 = new JButton("replay");
JMenuBar menuBar = new JMenuBar();
DrawPanel panel = DrawPanel.getInstance();
public DrawFrame(){
jButton1.addActionListener(new ReplayAction());
menuBar.add(jButton1);
setJMenuBar(menuBar);
add(panel);
setSize(300, 300);
setVisible(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public static void main(String[] args) {
new DrawFrame();
}
}
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Point;
import java.awt.RenderingHints;
import java.awt.geom.Path2D;
import java.util.LinkedList;
import javax.swing.JPanel;
/**
*@author lyh
*@version 2009-11-5 上午09:07:29
**/
public class DrawPanel extends JPanel{
/**
*
*/
private static final long serialVersionUID = -1785727004852384096L;
private Path2D path = new Path2D.Double();
private Path2D path2d = new Path2D.Double();
private int type = 1; //默认的type为1画,2是replay
private LinkedList<Point> points = new LinkedList<Point>();
private static DrawPanel drawPanel = new DrawPanel();
public static synchronized DrawPanel getInstance(){
if (drawPanel == null) {
return new DrawPanel();
}
else {
return drawPanel;
}
}
public DrawPanel(){
addMouseListener(new MouserListener(path, points));
addMouseMotionListener(new MouserListener(path, points));
setBackground(Color.white);
}
/**
* 初始化replayer
*/
public void replayer(){
rePlayer replay = new rePlayer();
replay.start();
}
class rePlayer extends Thread{
@Override
public void run() {
path2d.moveTo(points.get(0).x, points.get(0).y);
for (int i = 0; i < points.size(); i++) {
path2d.lineTo(points.get(i).x, points.get(i).y);
try {
sleep(50);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
repaint();
}
path2d.reset();
setType(1);
}
}
/**
* type的get set方法
*/
public void setType(int type){
this.type = type;
}
public int getType(){
return type;
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2d = (Graphics2D)g;
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);//设置抗锯齿
if (type == 1) { //如果是画图直接画
g2d.draw(path);
System.out.println("type=1");
}
else if(type == 2) { //如果是回放类型
g2d.draw(path2d);
System.out.println("type=2");
}
}
}
import java.awt.Point;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionListener;
import java.awt.geom.Path2D;
import java.util.LinkedList;
/**
*@author lyh
*@version 2009-11-5 下午02:09:14
**/
public class MouserListener extends MouseAdapter implements MouseMotionListener{
/**
*
*/
private static final long serialVersionUID = -7481383458319135340L;
Path2D path;
LinkedList<Point> points;
public MouserListener(Path2D path,LinkedList<Point> points){
this.path = path;
this.points = points;
}
public void mousePressed(MouseEvent e) {
path.moveTo(e.getX(), e.getY());
points.add(e.getPoint());
}
public void mouseReleased(MouseEvent e) {
path.lineTo(e.getX(), e.getY());
points.add(e.getPoint());
DrawPanel.getInstance().repaint();
}
public void mouseClicked(MouseEvent e) {
}
@Override
public void mouseDragged(MouseEvent e) {
path.lineTo(e.getX(), e.getY());
points.add(e.getPoint());
DrawPanel.getInstance().repaint();
}
@Override
public void mouseMoved(MouseEvent e) {
}
}
import java.awt.event.ActionEvent;
import javax.swing.AbstractAction;
/**
*@author lyh
*@version 2009-11-5 下午02:51:01
**/
public class ReplayAction extends AbstractAction{
/**
* serialVersionUID
*/
private static final long serialVersionUID = 3198330808622925641L;
@Override
public void actionPerformed(ActionEvent e) {
DrawPanel.getInstance().setType(2);
DrawPanel.getInstance().replayer();
}
}