Download: growline.zip
A "grow line" is a line that is continually redrawn as the mouse is dragged from a fixed pivot point.
getGraphics()setXORModedrawLine
growline.javaimport java.awt.*;
import java.awt.event.*;
import java.util.*;
import java.awt.geom.*;
import javax.swing.*;
class growline extends JPanel implements MouseMotionListener
{
ArrayList<Line2D> lines;
Point base, current;
boolean isDragging;
growline()
{
isDragging = false;
lines = new ArrayList<Line2D>();
addMouseListener(new MouseHandler());
addMouseMotionListener(this);
}
public void paintComponent(Graphics g)
{
super.paintComponent(g);
Graphics2D g2 = (Graphics2D) g;
for (Line2D line: lines) g2.draw(line);
}
private class MouseHandler extends MouseAdapter
{
public void mousePressed(MouseEvent event)
{
isDragging = true;
current = event.getPoint();
base = event.getPoint();
}
public void mouseReleased(MouseEvent event)
{
isDragging = false;
current = event.getPoint();
Graphics g = getGraphics();
int bx = base.x;
int by = base.y;
g.setXORMode(Color.WHITE);
g.drawLine(bx,by,current.x,current.y);
g.setPaintMode();
g.setColor(Color.BLACK);
lines.add(new Line2D.Double(bx,by,current.x,current.y));
repaint();
}
}
public void mouseDragged(MouseEvent event)
{
Graphics g = getGraphics();
int bx = base.x;
int by = base.y;
g.setXORMode(Color.WHITE);
g.drawLine(bx,by,current.x,current.y);
current = event.getPoint();
g.drawLine(bx,by,current.x,current.y);
g.setPaintMode();
g.setColor(Color.BLACK);
}
public void mouseMoved(MouseEvent event)
{
}
public static void main(String[] args)
{
EventQueue.invokeLater(new Runnable() {
public void run()
{
growline panel = new growline();
JFrame frame = new JFrame("Grow Line");
frame.add(panel);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(400,400);
frame.setVisible(true);
}
});
}
}
Maintained by John Loomis, updated Tue Feb 26 18:22:45 2019