简单的画图程序,我在画图时记住点,重绘时在画一遍,好像不行,帮忙看看,有什么好办法?
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
public class ScribbleDemo extends JFrame {
public ScribbleDemo() {
// Create a PaintPanel and add it to the content pane
getContentPane().add(new ScribblePanel(), BorderLayout.CENTER);
} /** Main method */
public static void main(String[] args) {
ScribbleDemo frame = new ScribbleDemo();
frame.setTitle("ScribbleDemo");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(300, 300);
frame.setVisible(true);
}
}// ScribblePanel for scribbling using the mouse
class ScribblePanel extends JPanel
implements MouseListener, MouseMotionListener {
final int CIRCLESIZE = 20; // Circle diameter used for erasing
private Point lineStart = new Point(0, 0); // Line start point
Point []p1=new Point[200];
int i=0;
protected void paintComponent(Graphics g)
{
super.paintComponent(g);
Point start=p1[0];
Point end=new Point();
for(int l=1;l<i;i++)
{
end=p1[l];
g.drawLine(start.x,start.y,end.x,end.y);
start=p1[l];
}
}
public ScribblePanel() {
// Register listener for the mouse event
addMouseListener(this);
addMouseMotionListener(this);
} public void mouseClicked(MouseEvent e) {
} public void mouseEntered(MouseEvent e) {
} public void mouseExited(MouseEvent e) {
} public void mouseReleased(MouseEvent e) {
} public void mousePressed(MouseEvent e) {
lineStart.move(e.getX(), e.getY());
p1[i]=lineStart;
i++;
} public void mouseDragged(MouseEvent e) {
// Create a Graphics object for drawing
Graphics g = getGraphics(); if (e.isMetaDown()) { // Detect right button pressed
// Erase the drawing using an oval
g.setColor(getBackground());
g.fillOval(e.getX() - (CIRCLESIZE / 2),
e.getY() - (CIRCLESIZE / 2), CIRCLESIZE, CIRCLESIZE);
}
else {
g.setColor(Color.black);
g.drawLine(lineStart.x, lineStart.y,
e.getX(), e.getY());
}
lineStart.move(e.getX(), e.getY());
p1[i]=lineStart;
i++;
// Dispose this graphics context
g.dispose();
} public void mouseMoved(MouseEvent e) {
}
}
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
public class ScribbleDemo extends JFrame {
public ScribbleDemo() {
// Create a PaintPanel and add it to the content pane
getContentPane().add(new ScribblePanel(), BorderLayout.CENTER);
} /** Main method */
public static void main(String[] args) {
ScribbleDemo frame = new ScribbleDemo();
frame.setTitle("ScribbleDemo");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(300, 300);
frame.setVisible(true);
}
}// ScribblePanel for scribbling using the mouse
class ScribblePanel extends JPanel
implements MouseListener, MouseMotionListener {
final int CIRCLESIZE = 20; // Circle diameter used for erasing
private Point lineStart = new Point(0, 0); // Line start point
Point []p1=new Point[200];
int i=0;
protected void paintComponent(Graphics g)
{
super.paintComponent(g);
Point start=p1[0];
Point end=new Point();
for(int l=1;l<i;i++)
{
end=p1[l];
g.drawLine(start.x,start.y,end.x,end.y);
start=p1[l];
}
}
public ScribblePanel() {
// Register listener for the mouse event
addMouseListener(this);
addMouseMotionListener(this);
} public void mouseClicked(MouseEvent e) {
} public void mouseEntered(MouseEvent e) {
} public void mouseExited(MouseEvent e) {
} public void mouseReleased(MouseEvent e) {
} public void mousePressed(MouseEvent e) {
lineStart.move(e.getX(), e.getY());
p1[i]=lineStart;
i++;
} public void mouseDragged(MouseEvent e) {
// Create a Graphics object for drawing
Graphics g = getGraphics(); if (e.isMetaDown()) { // Detect right button pressed
// Erase the drawing using an oval
g.setColor(getBackground());
g.fillOval(e.getX() - (CIRCLESIZE / 2),
e.getY() - (CIRCLESIZE / 2), CIRCLESIZE, CIRCLESIZE);
}
else {
g.setColor(Color.black);
g.drawLine(lineStart.x, lineStart.y,
e.getX(), e.getY());
}
lineStart.move(e.getX(), e.getY());
p1[i]=lineStart;
i++;
// Dispose this graphics context
g.dispose();
} public void mouseMoved(MouseEvent e) {
}
}
import javax.swing.*;
import java.awt.event.*;public class ScribbleDemo extends JFrame {
Image img = null;
Graphics og = null;//just for buffer,双缓冲
public ScribbleDemo() {
// Create a PaintPanel and add it to the content pane
getContentPane().add(new ScribblePanel(), BorderLayout.CENTER);
} public void paint(Graphics g) {
if (og != null) {
g.drawImage(img, 0, 0, this);
}
} /** Main method */
public static void main(String[] args) {
ScribbleDemo frame = new ScribbleDemo();
frame.setTitle("ScribbleDemo");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(300, 300);
frame.setVisible(true);
}// ScribblePanel for scribbling using the mouse
class ScribblePanel extends JPanel implements MouseListener,
MouseMotionListener {
final int CIRCLESIZE = 20; // Circle diameter used for erasing
private Point lineStart = new Point(0, 0); // Line start point Point[] p1 = new Point[200];
int i = 0;
protected void paintComponent(Graphics g) {
super.paintComponent(g);
Point start = p1[0];
Point end = new Point();
for (int l = 1; l < i; i++) {
end = p1[l];
g.drawLine(start.x, start.y, end.x, end.y);
start = p1[l];
}
} public ScribblePanel() {
// Register listener for the mouse event
addMouseListener(this);
addMouseMotionListener(this);
} public void mouseClicked(MouseEvent e) {
} public void mouseEntered(MouseEvent e) {
} public void mouseExited(MouseEvent e) {
} public void mouseReleased(MouseEvent e) {
} public void mousePressed(MouseEvent e) {
lineStart.move(e.getX(), e.getY());
p1[i] = lineStart;
i++;
} public void mouseDragged(MouseEvent e) {
// Create a Graphics object for drawing
Graphics g = getGraphics(); if (e.isMetaDown()) { // Detect right button pressed
// Erase the drawing using an oval
g.setColor(getBackground());
g.fillOval(e.getX() - (CIRCLESIZE / 2),
e.getY() - (CIRCLESIZE / 2), CIRCLESIZE, CIRCLESIZE);
//内存中同样缓冲------------------------------------------------
Dimension dim = this.getSize();
img = this.createImage(dim.width,dim.height);
og = img.getGraphics();
og.setColor(getBackground());
og.fillOval(e.getX() - (CIRCLESIZE / 2),
e.getY() - (CIRCLESIZE / 2), CIRCLESIZE, CIRCLESIZE);
//------------------------------------------------------------ } else {
g.setColor(Color.black);
g.drawLine(lineStart.x, lineStart.y,
e.getX(), e.getY());
//------------------------------------------
Dimension dim = this.getSize();
img = this.createImage(dim.width,dim.height);
og = img.getGraphics(); og.setColor(Color.black);
og.drawLine(lineStart.x, lineStart.y,
e.getX(), e.getY());
//------------------------------------------
} lineStart.move(e.getX(), e.getY());
p1[i] = lineStart;
i++;
// Dispose this graphics context
g.dispose();
} public void mouseMoved(MouseEvent e) {
} }
}