import javax.swing.*; import javax.swing.event.*; import java.awt.*; import java.awt.event.*; import java.util.*; public class Trace extends JFrame { private java.util.List points = new ArrayList(); private Dimension dim = new Dimension(300, 300); private int numColor = 0; private static final Color [] COLORS = {Color.black, Color.red, Color.yellow, Color.blue, Color.green}; Trace() { super("Tracés"); addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } }); JPanel graphics = new JPanel() { private Color foreground = Color.black; public Color getBackground() { return Color.white; } public void setForeground(Color c) { foreground = c; } public Color getForeground() { return foreground; } public void paintComponent(Graphics g) { super.paintComponent(g); if (! points.isEmpty()) { Iterator i = points.iterator(); Point p1 = (Point) i.next(); while (i.hasNext()) { Point p2 = (Point) i.next(); g.drawLine(p1.x, p1.y, p2.x, p2.y); p1 = p2; } } } }; graphics.addMouseListener(new MouseAdapter() { public void mousePressed(MouseEvent e) { if ((e.getModifiers() & MouseEvent.BUTTON3_MASK) != 0) { points.clear(); } points.add(e.getPoint()); if (e.isShiftDown()) { numColor = ++numColor % COLORS.length; ((Component) e.getSource()).setForeground(COLORS[numColor]); } ((Component) e.getSource()).repaint(); } }); setContentPane(graphics); pack(); setVisible(true); } public Dimension getPreferredSize() { return dim; } public static void main(String [] args) { new Trace(); } }