Download: growline.zip
A "grow line" is a line that is continually redrawn as the mouse is dragged from a fixed pivot point.
getGraphics()
setXORMode
drawLine
growline.java
import 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