I am new to Java and I would like to create a very simple draw-GUI, in which the user draws simple forms clicking on the panel and connecting different spots with a line when mouse is pressed in a position and released in another (drag-and-drop). Spots and lines should be stored in two ArrayLists. I managed to get the spots on the panel when clicked but the line is changing coordinates every time the mouse is dropped and a further point is created. I tried many times but I don´t know how to make the lines remain on the panel and "trace" the drag-and-drop-activity.
Thank you in advance for every tip!
import java.util.ArrayList;
import java.util.Arrays;
import java.awt.*;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.geom.Line2D;
import java.awt.geom.Line2D.Double;
import javax.swing.JPanel;
public class PaintPanel extends JPanel {
private ArrayList<Point> pointList;
private ArrayList<Line2D.Double> lineList;
private Point point1, point2;
private Line2D line;
public PaintPanel() {
pointList = new ArrayList<Point>();
lineList = new ArrayList<Line2D.Double>();
addMouseListener(new PaintListener());
}
//takes as parameter objekt of Class Graphics
public void paintComponent(Graphics g) {
// calls constructor of SuperClass
super.paintComponent(g);
this.setBackground(Color.white);
// color to draw
g.setColor(Color.black);
for(Point spot : pointList) {
g.fillOval(spot.x,spot.y, 10, 10);
if(point1 != null & point2 !=null) {
Graphics2D g2 =(Graphics2D) g;
line = new Line2D.Double(point1.getX(), point1.getY(), point2.getX(), point2.getY());
lineList.add((Double) line);
g2.draw(line);
}
}
}
private class PaintListener implements MouseListener{
@Override
public void mouseClicked(MouseEvent e) {
}
@Override
public void mousePressed(MouseEvent e) {
point1 = e.getPoint();
pointList.add(point1);
repaint();
}
public void mouseDragged(MouseEvent e) {
}
@Override
public void mouseReleased(MouseEvent e) {
point2 = e.getPoint();
pointList.add(point2);
repaint();
}
@Override
public void mouseEntered(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mouseExited(MouseEvent e) {
// TODO Auto-generated method stub
}
}
}