Bonjour,

après plusieurs heures de recherche je me décide de mettre un message pour solliciter un coup de pouce.

Je souhaiterais dessiner avec ma souris sur un JPanel et sauvegarder mon image dessinée.
J'ai réussi à dessiner sur mon JPanel mais la méthode utilisée ne doit pas être bonne puisque je n'arrive pas à récupérer le graphique dessiné au moment de la sauvegarde.

Voici ma classe "MonDessin" qui permet de dessiner sur mon JPanel et de sauvegarder l'image via le bouton "Enregistrer".


Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
 
 
import javax.imageio.ImageIO;
import javax.swing.*;
import java.awt.*;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
 
 
public class MonDessin extends JFrame {
 
    private JPanel monPanel;
    private int xPressed, xDragged, yPressed, yDragged;
    private boolean isActive = false;
 
    public MonDessin() {
 
        this.setTitle("Test");
        this.setSize(800, 800);
        this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
 
 
        JPanel container = new JPanel ();
 
 
        monPanel = new JPanel();
        monPanel.setPreferredSize(new Dimension(150, 75));
        monPanel.setBackground(Color.WHITE);
 
        monPanel.addMouseMotionListener(
                new MouseMotionListener() {
 
                    public void mouseDragged(MouseEvent e) {
 
                        if (isActive) {
 
                            xPressed = xDragged;
                            yPressed = yDragged;
 
                            xDragged = e.getXOnScreen();
                            yDragged = e.getYOnScreen();
 
                            repaint();
                        }
                    }
 
                    public void mouseMoved(MouseEvent e) {
 
                        isActive = true;
                    }
                }
        );
        monPanel.addMouseListener(
                new MouseListener() {
 
                    //  Invoked when a mouse button has been pressed on a component.
                    public void mousePressed(MouseEvent e) {
 
                        if (isActive) {
 
                            xPressed = e.getXOnScreen();
                            yPressed = e.getYOnScreen();
                            xDragged = xPressed;
                            yDragged = yPressed;
 
                            repaint();
                        }
                    }
 
                    //Invoked when the mouse has been clicked on a component.
                    public void mouseClicked(MouseEvent e) {
                    }
 
                    //Invoked when a mouse button has been released on a component.
                    public void mouseReleased(MouseEvent e) {
                    }
 
                    //Invoked when the mouse enters a component.
                    public void mouseEntered(MouseEvent e) {
 
                        isActive = true;
                        xDragged = e.getXOnScreen();
                        yDragged = e.getYOnScreen();
                    }
 
                    //Invoked when the mouse exits a component.
                    public void mouseExited(MouseEvent e) {
 
                        isActive = false;
                    }
                }
        );
 
        container.add(monPanel);
 
        JButton b_enregistrer = new JButton("Enregistrer");
        b_enregistrer.setPreferredSize(new Dimension(200, 55));
        b_enregistrer.addActionListener(
                f -> {
                    try {
                        BufferedImage bimage = new BufferedImage(150, 75, BufferedImage.TYPE_INT_RGB);
                        monPanel.paint(bimage.getGraphics());
                        Graphics g = bimage.getGraphics();
                        g.setColor(monPanel.getForeground());
                        g.setFont(monPanel.getFont());
                        ImageIO.write(bimage, "JPEG", new File("MonDessin.jpg"));
                    } catch (IOException ex) {
                        ex.printStackTrace();
                    }
                }
        );
 
        container.add(b_enregistrer);
 
        this.setContentPane(container);
    }
 
 
    @Override
    public void paint(Graphics g) {
 
        int offsetX = 1;
        int offsetY = 25;
 
        if (!isActive) {
            super.paint(g);
        } else {
            g.drawLine(xPressed - offsetX, yPressed - offsetY, xDragged - offsetX, yDragged - offsetY);
        }
    }
 
}
Pourriez-vous me dire où cela cloche svp ?

Berni.