Salut,
J'aimerais dessiner un point sur une image situ�e dans un jlabel, j'aimerais que le point soit dessin� � l'endroit o� je clique avec ma souris.
Auriez vous des id�es ?
Merci d'avance !
Salut,
J'aimerais dessiner un point sur une image situ�e dans un jlabel, j'aimerais que le point soit dessin� � l'endroit o� je clique avec ma souris.
Auriez vous des id�es ?
Merci d'avance !
Tu nous montre le code de cr�ation du JLabel ?
Labor improbus omnia vincit un travail acharn� vient � bout de tout - Ambroise Par� (1510-1590)
Consulter sans mod�ration la FAQ ainsi que les bons ouvrages : http://jmdoudoux.developpez.com/cours/developpons/java/
Voici le code ma page, j'aimerais que quand l'utilisateur clique sur le bouton ajouter il puisse ajouter un point sur l'image dans le jlabel.
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
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232 import java.awt.Color; import java.awt.Graphics2D; import java.awt.Point; import java.awt.event.*; import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; import java.util.ArrayList; import javax.imageio.ImageIO; import javax.swing.*; public class FenetrePrincipale extends JFrame implements ActionListener,MouseListener { /** * */ private static final long serialVersionUID = -2914420119520760074L; private JButton BTN_OUVRIR; private JButton BTN_PRECEDENT; private JButton BTN_SUIVANT; private JButton BTN_AJOUTER; private JPanel PANEL_BTN_AJOUTER; private JPanel PANEL_BTN_SUIVANT; private JPanel PANEL_BTN_PRECEDENT; private JPanel PANEL_BTN_OUVRIR; private JPanel PANEL_IMAGE; private JLabel LABEL_IMAGE; private int nbrImage; private int imgACTIVE; private ArrayList<String> tabCheminFichier; public FenetrePrincipale(){ tabCheminFichier = new ArrayList<String>(); nbrImage = 0; imgACTIVE = 0; setExtendedState(this.MAXIMIZED_BOTH); PANEL_IMAGE=new JPanel(); PANEL_IMAGE.setLayout(null); PANEL_IMAGE.setBounds(100, 100, 1000, 1000); PANEL_BTN_OUVRIR=new JPanel(); PANEL_BTN_OUVRIR.setLayout(null); PANEL_BTN_OUVRIR.setBounds(0, 0, 200, 200); PANEL_BTN_PRECEDENT=new JPanel(); PANEL_BTN_PRECEDENT.setLayout(null); PANEL_BTN_PRECEDENT.setBounds(300, 0, 200, 200); PANEL_BTN_SUIVANT=new JPanel(); PANEL_BTN_SUIVANT.setLayout(null); PANEL_BTN_SUIVANT.setBounds(500, 0, 200, 200); PANEL_BTN_AJOUTER=new JPanel(); PANEL_BTN_AJOUTER.setLayout(null); PANEL_BTN_AJOUTER.setBounds(0, 200, 100, 50); BTN_OUVRIR = new JButton("Ouvrir"); BTN_OUVRIR.setLayout(null); BTN_OUVRIR.setBounds(0,0,100,50); BTN_AJOUTER = new JButton("Ajouter"); BTN_AJOUTER.setLayout(null); BTN_AJOUTER.setBounds(0, 0, 100, 50); BTN_PRECEDENT = new JButton("Precedent"); BTN_PRECEDENT.setLayout(null); BTN_PRECEDENT.setBounds(0,0,100,50); BTN_PRECEDENT.setEnabled(false); BTN_SUIVANT = new JButton("Suivant"); BTN_SUIVANT.setLayout(null); BTN_SUIVANT.setBounds(0,0,100,50); BTN_SUIVANT.setEnabled(false); BTN_OUVRIR.addActionListener(this); BTN_PRECEDENT.addActionListener(this); BTN_SUIVANT.addActionListener(this); BTN_AJOUTER.addActionListener(this); LABEL_IMAGE = new JLabel(); LABEL_IMAGE.setLayout(null); LABEL_IMAGE.setBounds(100,100,1000,1000); PANEL_BTN_AJOUTER.add(BTN_AJOUTER); PANEL_BTN_OUVRIR.add(BTN_OUVRIR); PANEL_BTN_PRECEDENT.add(BTN_PRECEDENT); PANEL_BTN_SUIVANT.add(BTN_SUIVANT); PANEL_IMAGE.add(LABEL_IMAGE); add(PANEL_BTN_OUVRIR); add(PANEL_BTN_AJOUTER); add(PANEL_BTN_PRECEDENT); add(PANEL_BTN_SUIVANT); add(PANEL_IMAGE); setVisible(true); } @Override public void actionPerformed(ActionEvent e) { if(e.getSource()==BTN_OUVRIR){ JFileChooser jfc = new JFileChooser(); jfc.showOpenDialog(null); File f = jfc.getSelectedFile(); if(f.exists()==true){ if(nbrImage>=1){ BTN_PRECEDENT.setEnabled(true); } nbrImage = nbrImage + 1; imgACTIVE = nbrImage; remove(LABEL_IMAGE); try { BufferedImage image = ImageIO.read(f); LABEL_IMAGE.setText("Image"+nbrImage+"Image en cours"+imgACTIVE); LABEL_IMAGE.setIcon(new ImageIcon(image.getScaledInstance(700, 800, 700))); } catch (Exception e1) { } tabCheminFichier.add(jfc.getSelectedFile().toString()); PANEL_IMAGE.add(LABEL_IMAGE); add(PANEL_IMAGE); repaint(); validate(); } } if(e.getSource()==BTN_PRECEDENT){ String chemin = tabCheminFichier.get(imgACTIVE-2); imgACTIVE=imgACTIVE-1; try { BufferedImage image = ImageIO.read(new File(chemin)); LABEL_IMAGE.setText("Image"+nbrImage+"Image en cours"+imgACTIVE); LABEL_IMAGE.setIcon(new ImageIcon(image.getScaledInstance(700, 800, 700))); } catch (IOException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } PANEL_IMAGE.add(LABEL_IMAGE); add(PANEL_IMAGE); repaint(); validate(); if(imgACTIVE == 1){ BTN_PRECEDENT.setEnabled(false); } if(imgACTIVE != nbrImage){ BTN_SUIVANT.setEnabled(true); } } if(e.getSource()==BTN_SUIVANT){ String chemin = tabCheminFichier.get(imgACTIVE); imgACTIVE=imgACTIVE+1; try { BufferedImage image = ImageIO.read(new File(chemin)); LABEL_IMAGE.setText("Image"+nbrImage+"Image en cours"+imgACTIVE); LABEL_IMAGE.setIcon(new ImageIcon(image.getScaledInstance(700, 800, 700))); } catch (IOException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } PANEL_IMAGE.add(LABEL_IMAGE); add(PANEL_IMAGE); repaint(); validate(); if(imgACTIVE == tabCheminFichier.size()){ BTN_SUIVANT.setEnabled(false); } BTN_PRECEDENT.setEnabled(true); } if(e.getSource()==BTN_AJOUTER){ String chemin = tabCheminFichier.get(imgACTIVE-1); BufferedImage image = null; try { image = ImageIO.read(new File(chemin)); Graphics2D g2d = (Graphics2D)image.getGraphics(); g2d.drawString("HelloWord",100,100); //LABEL_IMAGE.paintComponents(g2d); LABEL_IMAGE.setIcon(new ImageIcon(image.getScaledInstance(700, 800, 700))); } catch (IOException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } PANEL_IMAGE.add(LABEL_IMAGE); add(PANEL_IMAGE); repaint(); validate(); } } @Override public void mouseClicked(MouseEvent e) { // TODO Auto-generated method stub // Clique gauche de la souris if(e.getButton()==MouseEvent.BUTTON1) { // Récupération de la position Point position = e.getPoint(); System.out.println("["+position.x +","+ position.y+"]"); } } @Override public void mouseEntered(MouseEvent arg0) { // TODO Auto-generated method stub } @Override public void mouseExited(MouseEvent arg0) { // TODO Auto-generated method stub } @Override public void mousePressed(MouseEvent arg0) { // TODO Auto-generated method stub } @Override public void mouseReleased(MouseEvent arg0) { // TODO Auto-generated method stub } }
D'apr�s ton code (ligne 180), l'image est r�cup�r�e par :
c'est sur cette image que tu veux dessiner un point ?
Code : S�lectionner tout - Visualiser dans une fen�tre � part image = ImageIO.read(new File(chemin));
de quelle taille le point (parce que un seul pixel �a va pas faire lourd) ?
Labor improbus omnia vincit un travail acharn� vient � bout de tout - Ambroise Par� (1510-1590)
Consulter sans mod�ration la FAQ ainsi que les bons ouvrages : http://jmdoudoux.developpez.com/cours/developpons/java/
Oui l'image est bien r�cup�r� comme �a et pour l'instant lorsque je clique sur ajouter j'�cris "HelloWorld" dessus.
Je pense que le plus simple serai d'afficher un "X" en string pour simuler l'ajout d'un point.
Il faudrait donc que quand l'utilisateur clique sur ajouter, l'�cran se fige jusqu'a qu'il est cliqu� sur l'endroit voulu sur l'image.
En gros je veut reproduire en quelque sorte cette fonction de matlab :
[xsel,ysel] = ginput(1);
X = round(xsel); Y = round(ysel);
Tu as pens� � r�cup�rer les coordonn�es du clic de la souris :
avec cela tu peux "�crire" ton X ou mieux, dessiner 2 traits qui se croisent (�a fera plus propre ...)
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5
6 LABEL_IMAGE.addMouseListener(new java.awt.event.MouseAdapter() { public void mouseClicked(java.awt.event.MouseEvent evt) { int x = evt.getX(); int y = evt.getY(); } });
Labor improbus omnia vincit un travail acharn� vient � bout de tout - Ambroise Par� (1510-1590)
Consulter sans mod�ration la FAQ ainsi que les bons ouvrages : http://jmdoudoux.developpez.com/cours/developpons/java/
Salut,
Ce sera aussi beaucoup plus simple � placer (parce qu'un caract�re �a se place par rapport � une baseline et son c�t�, et calculer le centre du x, m�me pour une police simplifi�e, c'est chaud).
Par contre, je pense qu'il est beaucoup plus simple de dessiner dans une image (une copie de l'image, pour pouvoir effacer facilement au besoin) et de placer cette image dans le JLabel, que de chercher � dessiner par dessus l'image dans le JLabel (en red�finisant une m�thode paintXXX... En plus, pas besoin de m�moriser les coordonn�es du point dans des variables.
Autre solution, utiliser un JLayer (mais dessiner dans une image reste quand m�me plus simple).
L'expression "�a marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le probl�me.
La plupart des r�ponses � vos questions sont d�j� dans les FAQs ou les Tutoriels, ou peut-�tre dans une autre discussion : utilisez la recherche interne.
Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
Une question correctement pos�e et r�dig�e et vous aurez plus de chances de r�ponses adapt�es et rapides.
N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'�diteur de messages).
Nouveau sur le forum ? Consultez Les R�gles du Club.
Cela conviendrais si je n'avais qu'on photo, mais la l'utilisateur � la possibilit� d'ouvrir plusieurs photo, je voudrais donc que les points se sauvegarde sur la photo pour que quand il puisse revenir dessus les points soit enregistr�.
Mais merci pour la premi�re solution !![]()
Je pense avoir une id�e de la solution de mon probl�me,
est ce que tu crois que se serais une bonne id�e de cr�er un nouveau fichier avec la photo modifi� pour ensuite pouvoir la r�ouvrir apr�s?
La solution de dessiner dans l'image reste la plus simple, m�me si on peut aussi le faire si on dessine dans le JLabel. Peu importe en fait.
Par contre figer l'�cran, tant qu'on a pas cliqu� le point, ce n'est pas une bonne id�e (enfin je suppose qu'il s'agit de bloquer la fen�tre, parce que bloquer l'�cran �a va agacer) :
D�j�, �a ne va pas �tre sp�cialement simple � faire,
�a va plus g�ner qu'autre chose (on ne pourra pas abandonner si on s'est tromp� en cliquant sur ajouter),
et puis si je re�ois un mail urgent, je ne peux pas basculer pour aller jeter un coup d'oeil, je suis oblig� de cliquer le point avant ? chez moi �a signifie "d�sinstallation imm�diate".
et en plus je n'en vois pas l'int�r�t. Pourquoi bloquer l'UI, pourquoi je ne pourrais pas bouger ma fen�tre pour la replacer pour mieux voir o� je clique, genre si j'ai un reflet sur l'�cran), ou n'importe
L'expression "�a marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le probl�me.
La plupart des r�ponses � vos questions sont d�j� dans les FAQs ou les Tutoriels, ou peut-�tre dans une autre discussion : utilisez la recherche interne.
Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
Une question correctement pos�e et r�dig�e et vous aurez plus de chances de r�ponses adapt�es et rapides.
N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'�diteur de messages).
Nouveau sur le forum ? Consultez Les R�gles du Club.
L'expression "�a marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le probl�me.
La plupart des r�ponses � vos questions sont d�j� dans les FAQs ou les Tutoriels, ou peut-�tre dans une autre discussion : utilisez la recherche interne.
Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
Une question correctement pos�e et r�dig�e et vous aurez plus de chances de r�ponses adapt�es et rapides.
N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'�diteur de messages).
Nouveau sur le forum ? Consultez Les R�gles du Club.
Parce que le probl�me de tout �a c'est que l'utilisateur peut ouvrir plusieurs image et � l'aide des boutons suivant et precedent, il doit pouvoir choisir l'image sur laquelle il veut dessiner un point. Et � partir du moment ou il a dessiner, les coordonn�es du point doivent �tre enregistrer pour s'en servir apr�s..
Je vais continuer de r�fl�chir ^^
Merci en tout cas !
En plus de dessiner le point, il faudrait probablement enregistrer les coordonn�es quelque part (fichier texte, base de donn�es, ...)
Ce qui serait d'ailleurs le d�but de la mise en place d'un syst�me d'annulation en cas d'erreur de clic.
Labor improbus omnia vincit un travail acharn� vient � bout de tout - Ambroise Par� (1510-1590)
Consulter sans mod�ration la FAQ ainsi que les bons ouvrages : http://jmdoudoux.developpez.com/cours/developpons/java/
Partager