the program draws lines, but every time I draw a new line, the previous one disappears. How can I let it show all the lines drawn? I know my problem is in the array, but how to fix it? thanks for help
import javax.swing.JPanel;
import java.awt.*;
import java.awt.event.*;
import java.util.ArrayList;
public class RubberLinesPanel extends JPanel
{
/**
*
*/
private static final long serialVersionUID = 1L;
private Point point1 = null, point2 = null;
private ArrayList<Point> pointList;
//-----------------------------------------------------------------
// Constructor: Sets up this panel to listen for mouse events.
//-----------------------------------------------------------------
public RubberLinesPanel()
{
pointList = new ArrayList<Point>();
LineListener listener = new LineListener();
addMouseListener (listener);
addMouseMotionListener (listener);
setBackground (Color.black);
setPreferredSize (new Dimension(400, 200));
}
//-----------------------------------------------------------------
// Draws the current line from the intial mouse-pressed point to
// the current position of the mouse.
//-----------------------------------------------------------------
public void paintComponent (Graphics page)
{
super.paintComponent (page);
page.setColor (Color.yellow);
for(Point spot : pointList )
{
if (point1 != null && point2 != null )
page.drawLine (point1.x, point1.y, point2.x, point2.y);
}
}
//*****************************************************************
// Represents the listener for all mouse events.
//*****************************************************************
private class LineListener implements MouseListener,
MouseMotionListener
{
//--------------------------------------------------------------
// Captures the initial position at which the mouse button is
// pressed.
//--------------------------------------------------------------
public void mousePressed (MouseEvent event)
{
point1 = event.getPoint();
pointList.add(point1);
}
//--------------------------------------------------------------
// Gets the current position of the mouse as it is dragged and
// redraws the line to create the rubberband effect.
//--------------------------------------------------------------
public void mouseDragged (MouseEvent event)
{
point2 = event.getPoint();
pointList.add(point2);
repaint();
}
//--------------------------------------------------------------
// Provide empty definitions for unused event methods.
//--------------------------------------------------------------
public void mouseClicked (MouseEvent event) {}
public void mouseReleased (MouseEvent event) {}
public void mouseEntered (MouseEvent event) {}
public void mouseExited (MouseEvent event) {}
public void mouseMoved (MouseEvent event) {}
}
}
import javax.swing.JFrame;
public class RubberLines
{
//-----------------------------------------------------------------
// Creates and displays the application frame.
//-----------------------------------------------------------------
public static void main (String[] args)
{
JFrame frame = new JFrame ("Rubber Lines");
frame.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add (new RubberLinesPanel());
frame.pack();
frame.setVisible(true);
}
}