import javax.swing.*; import java.awt.*; import java.awt.event.*; public class DesGribouillis2 extends JFrame { JPanel canvas = new JPanel(); Color brush_color = Color.black; private int last_x, last_y; public static void main(String argv[]) { DesGribouillis2 toplevel = new DesGribouillis2(); // initialiser la disposition et rendre visible toplevel.pack(); toplevel.show(); } public DesGribouillis2() { setTitle("DesGribouillis2"); Container contentPane = getContentPane(); //NB: Layout par defaut de contentPane: BorderLayout // Zone de dessin : fond blanc canvas.setBackground(Color.white); // Affecter une taille par defaut Dimension dim = new Dimension(400, 400); canvas.setPreferredSize(dim); // mettre au centre du 'contentPane' contentPane.add(BorderLayout.CENTER, canvas); // Definir, instancier et enregistrer le MouseListener // (en utilisant les "inner classes" et les "adapters" canvas.addMouseListener(new MouseAdapter() { public void mousePressed(MouseEvent e) { last_x = e.getX(); last_y = e.getY(); } }); // Definir, instancier et enregistrer le MouseMotionListener canvas.addMouseMotionListener(new MouseMotionAdapter() { public void mouseDragged(MouseEvent e) { Graphics g = canvas.getGraphics(); g.setColor(brush_color); int x = e.getX(); int y = e.getY(); g.drawLine(last_x, last_y, x, y); last_x = x; last_y = y; } }); // Panel contenant les RadioButtons qui changent la couleur // du background JPanel panel1 = new JPanel(); contentPane.add(BorderLayout.SOUTH, panel1); // cet objet rendra les RadioButtons exclusifs ButtonGroup bgroup1 = new ButtonGroup(); // ajouter chaque bouton au panel pour qu'il s'affiche panel1.add(new JLabel("Background Color: ")); panel1.add(new BgButton("Noir", bgroup1, Color.black)); panel1.add(new BgButton("White", bgroup1, Color.white)); panel1.add(new BgButton("Jaune", bgroup1, Color.yellow)); panel1.add(new BgButton("Rouge", bgroup1, Color.red)); panel1.add(new BgButton("Vert", bgroup1, Color.green)); // Panel contenant les RadioButtons qui changent la couleur // du foreground JPanel panel2 = new JPanel(); contentPane.add(BorderLayout.NORTH, panel2); // cet objet rendra les RadioButtons exclusifs ButtonGroup bgroup2 = new ButtonGroup(); // ajouter chaque bouton au panel pour qu'il s'affiche panel2.add(new JLabel("Foreround Color: ")); panel2.add(new FgButton("Noir", bgroup2, Color.black)); panel2.add(new FgButton("White", bgroup2, Color.white)); panel2.add(new FgButton("Jaune", bgroup2, Color.yellow)); panel2.add(new FgButton("Rouge", bgroup2, Color.red)); panel2.add(new FgButton("Vert", bgroup2, Color.green)); } // classe de boutons qui changent la couleur de la zone de dessin class BgButton extends JRadioButton { // classe imbriquee Color color; public BgButton(String name, ButtonGroup bgroup, Color _color) { super(name); color = _color; // ajouter chaque bouton au RadioGroup pour le rendre exclusif bgroup.add(this); // A COMPLETER: // rendre le boutton actif de telle sorte qu'il change la // couleur du background du canvas //...... } } // classe de boutons qui changent la couleur du pinceau class FgButton extends JRadioButton { // classe imbriquee Color color; public FgButton(String name, ButtonGroup bgroup, Color _color) { super(name); color = _color; // ajouter chaque bouton au RadioGroup pour le rendre exclusif bgroup.add(this); // A COMPLETER: // rendre le boutton actif de telle sorte qu'il change // 'brush_color' (la couleur du trace) //...... } } }