import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Point;
import java.awt.RenderingHints;
import java.awt.geom.Line2D;
import java.awt.image.BufferedImage;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionAdapter;
import java.util.ArrayList;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JSlider;
import javax.swing.SwingUtilities;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import javax.swing.event.MouseInputAdapter;
public class FHP extends JPanel {
// int FreeHandCount = 0;
// BufferedImage image;
FreeHandDraw freehand = new FreeHandDraw();
Color color;
public ArrayList<FreeHandDraw> arrFreeHand = new ArrayList<FreeHandDraw>();
// ArrayList xmlFreeHand = new ArrayList();
public FHP() {
addMouseListener(new MouseAdapter() {
public void mousePressed(MouseEvent e) {
freehand.setNewFreeHand(true);
freehand.setFreehandX(e.getX());
freehand.setFreehandY(e.getY());
arrFreeHand.add(freehand);
}
public void mouseReleased(MouseEvent e) {
repaint();
// FreeHandCount++;
}
});
addMouseMotionListener(new MouseMotionAdapter() {
public void mouseDragged(MouseEvent e) {
// Index of last element in list:
int lastIndex = arrFreeHand.size()-1;
FreeHandDraw free = arrFreeHand.get(lastIndex);
free.setFreehandX(e.getX());
free.setFreehandY(e.getY());
repaint();
}
}); // closing curley brace was missing
}
protected void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2 = (Graphics2D) g;
g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
g2.setPaint(color);
freehand.drawme(g);
}
public static void main(String[] args){
SwingUtilities.invokeLater(new Runnable(){
public void run(){
FHP free = new FHP();
JFrame f = new JFrame();
f.getContentPane().add(free);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setSize(700, 700);
f.setLocationRelativeTo(null); // center
f.setVisible(true);
}
});
}
public class FreeHandDraw {
int[] freehandX = new int[10000];
int[] freehandY = new int[10000];
boolean newFreeHand = false;
int index = 0;
Color color;
public void drawme(Graphics g) {
g.setColor(getColor());
for (int i = 0; i < index - 1; i++) {
int x = freehandX[i];
int y = freehandY[i];
int x2 = freehandX[i + 1];
int y2 = freehandY[i + 1];
g.drawLine(x, y, x2, y2);
}
}
public void setColor(Color str) { color = str; }
public Color getColor() { return color; }
public int getIndex() { return index; }
public void setFreehandX(int is) {
freehandX[index] = is;
}
public void setFreehandY(int is) {
freehandY[index++] = is;
}
public void setIndex(int i) { index = i; }
public boolean isNewFreeHand() { return newFreeHand; }
public void setNewFreeHand(boolean newFreeHand) {
this.newFreeHand = newFreeHand;
}
}
}