Draw curve with mouse
import java.awt.BasicStroke;
import java.awt.BorderLayout;
import java.awt.Canvas;
import java.awt.Color;
import java.awt.Container;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.GridLayout;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.geom.CubicCurve2D;
import java.awt.geom.Line2D;
import java.awt.geom.QuadCurve2D;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
public class CubicCurveMouse extends JFrame {
DrawingCanvas canvas;
JLabel label = new JLabel("Mouse Location (x, y): ");
JLabel coords = new JLabel("");
public CubicCurveMouse() {
super();
Container container = getContentPane();
JPanel panel = new JPanel();
panel.setLayout(new GridLayout(1, 2));
panel.add(label);
panel.add(label);
panel.add(coords);
container.add(panel, BorderLayout.SOUTH);
canvas = new DrawingCanvas();
container.add(canvas);
addWindowListener(new WindowEventHandler());
setSize(300,300);
setVisible(true);
}
class WindowEventHandler extends WindowAdapter {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
}
public static void main(String arg[]) {
new CubicCurveMouse();
}
class DrawingCanvas extends Canvas {
float x1, y1, xc1cur, yc1cur, xc1new, yc1new, xc2cur, yc2cur, xc2new,
yc2new, x4cur, y4cur, x4new, y4new;
int pressNo = 0;
int dragFlag1 = -1;
int dragFlag2 = -1;
boolean clearFlag = false;
float dashes[] = { 5f, 5f };
BasicStroke stroke;
public DrawingCanvas() {
setBackground(Color.white);
addMouseListener(new MyMouseListener());
addMouseMotionListener(new MyMouseListener());
setSize(400, 400);
stroke = new BasicStroke(1f, BasicStroke.CAP_BUTT,
BasicStroke.JOIN_BEVEL, 10f, dashes, 0f);
}
public void update(Graphics g) {
paint(g);
}
public void paint(Graphics g) {
Graphics2D g2D = (Graphics2D) g;
if (pressNo == 1) {
g2D.setXORMode(getBackground());
g2D.setColor(Color.black);
g2D.setStroke(stroke);
// Erase the currently existing line
g2D.draw(new Line2D.Float(x1, y1, x4cur, y4cur));
// Draw the new line
g2D.draw(new Line2D.Float(x1, y1, x4new, y4new));
// Update the currently existing coordinate values
x4cur = x4new;
y4cur = y4new;
}else if (pressNo == 2) {
g2D.setXORMode(getBackground());
g2D.setColor(Color.black);
g2D.setStroke(stroke);
if (dragFlag1 != -1) {
g2D.draw(new QuadCurve2D.Float(x1, y1, xc1cur, yc1cur,
x4new, y4new));
}
dragFlag1++; // Reset the drag-flag
g2D.draw(new QuadCurve2D.Float(x1, y1, xc1new, yc1new, x4new,
y4new));
xc1cur = xc1new;
yc1cur = yc1new;
}else if (pressNo == 3) {
g2D.setXORMode(getBackground());
g2D.setColor(Color.black);
if (dragFlag2 != -1) {
g2D.draw(new CubicCurve2D.Float(x1, y1, xc1new, yc1new,
xc2cur, yc2cur, x4new, y4new));
}
dragFlag2++; // Reset the drag flag
g2D.draw(new CubicCurve2D.Float(x1, y1, xc1new, yc1new, xc2new,
yc2new, x4new, y4new));
xc2cur = xc2new;
yc2cur = yc2new;
}
if (clearFlag) {
g2D.setXORMode(getBackground());
g2D.setColor(Color.black);
g2D.setStroke(stroke);
g2D.draw(new Line2D.Float(x1, y1, x4new, y4new));
g2D.draw(new QuadCurve2D.Float(x1, y1, xc1new, yc1new, x4new,
y4new));
clearFlag = false;
}
}
class MyMouseListener extends MouseAdapter implements MouseMotionListener {
public void mousePressed(MouseEvent e) {
if (pressNo == 0) {
pressNo++;
x1 = x4cur = e.getX();
y1 = y4cur = e.getY();
} else if (pressNo == 1) {
pressNo++;
xc1cur = e.getX();
yc1cur = e.getY();
} else if (pressNo == 2) {
pressNo++;
xc2cur = e.getX();
yc2cur = e.getY();
}
}
public void mouseReleased(MouseEvent e) {
if (pressNo == 1) {
x4new = e.getX();
y4new = e.getY();
canvas.repaint();
} else if (pressNo == 2) {
xc1new = e.getX();
yc1new = e.getY();
canvas.repaint();
} else if (pressNo == 3) {
xc2new = e.getX();
yc2new = e.getY();
canvas.repaint();
pressNo = 0;
dragFlag1 = -1;
dragFlag2 = -1;
clearFlag = true;
}
}
public void mouseDragged(MouseEvent e) {
if (pressNo == 1) {
x4new = e.getX();
y4new = e.getY();
String string = "(" + Integer.toString(e.getX()) + ", "
+ Integer.toString(e.getY()) + ")";
coords.setText(string);
canvas.repaint();
} else if (pressNo == 2) {
xc1new = e.getX();
yc1new = e.getY();
String string = "(" + Integer.toString(e.getX()) + ", "
+ Integer.toString(e.getY()) + ")";
coords.setText(string);
canvas.repaint();
} else if (pressNo == 3) {
xc2new = e.getX();
yc2new = e.getY();
String string = "(" + Integer.toString(e.getX()) + ", "
+ Integer.toString(e.getY()) + ")";
coords.setText(string);
canvas.repaint();
}
}
public void mouseMoved(MouseEvent e) {
String string = "(" + Integer.toString(e.getX()) + ", "
+ Integer.toString(e.getY()) + ")";
coords.setText(string);
}
}
}
}
Related examples in the same category