Bonjour,
J'ai réussi à afficher une image dans une JFrame et à lui ajouter la fonction de zoom.
Par contre je voudrais afficher des petites boules sur cette image, par un exemple ajout d'un listener dés réception de coordonnées (x,y) ,j'affiche une boule dans cette image.
Auriez vous une idées de la façon dont je dois procéder pour afficher ces petites boules à divers instants. Merci d'avance.
Voici mon code qui affiche l'image avec la fonction de zoom.
Je voudrais par exemple, à un moment donné dessiner sur la cette image qui est affiché , une boule rouge de cette façon :
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 import java.awt.*; import java.awt.event.*; import java.awt.geom.*; import java.awt.image.BufferedImage; import java.io.*; import java.net.*; import javax.imageio.ImageIO; import javax.swing.*; import javax.swing.event.*; import net.atos.graphics.Circle; public class ZoomTest { public static void main(String[] args) { ImagePanel panel = new ImagePanel(); ImageZoom zoom = new ImageZoom(panel); JFrame f = new JFrame(); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); f.getContentPane().add(zoom.getUIPanel(), "North"); f.getContentPane().add(new JScrollPane(panel)); f.setSize(400,400); f.setLocation(200,200); f.setVisible(true); } } class ImagePanel extends JPanel { BufferedImage image; double scale; public ImagePanel() { loadImage(); scale = 1.0; setBackground(Color.black); } protected void paintComponent(Graphics g) { super.paintComponent(g); Graphics2D g2 = (Graphics2D)g; g2.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BICUBIC); int w = getWidth(); int h = getHeight(); int imageWidth = image.getWidth(); int imageHeight = image.getHeight(); double x = (w - scale * imageWidth)/2; double y = (h - scale * imageHeight)/2; AffineTransform at = AffineTransform.getTranslateInstance(x,y); at.scale(scale, scale); g2.drawRenderedImage(image, at); } /** * For the scroll pane. */ public Dimension getPreferredSize() { int w = (int)(scale * image.getWidth()); int h = (int)(scale * image.getHeight()); return new Dimension(w, h); } public void setScale(double s) { scale = s; revalidate(); // update the scroll pane repaint(); } private void loadImage() { File file = new File("E:/route1_28.png"); try { //URL url = getClass().getResource("file:///E:/route1_28.png"); image = ImageIO.read(file); } catch(MalformedURLException mue) { System.out.println("URL trouble: " + mue.getMessage()); } catch(IOException ioe) { System.out.println("read trouble: " + ioe.getMessage()); } } } class ImageZoom { ImagePanel imagePanel; public ImageZoom(ImagePanel ip) { imagePanel = ip; } public JPanel getUIPanel() { SpinnerNumberModel model = new SpinnerNumberModel(1.0, 0.1, 1.4, .01); final JSpinner spinner = new JSpinner(model); spinner.setPreferredSize(new Dimension(45, spinner.getPreferredSize().height)); spinner.addChangeListener(new ChangeListener() { public void stateChanged(ChangeEvent e) { float scale = ((Double)spinner.getValue()).floatValue(); imagePanel.setScale(scale); } }); JPanel panel = new JPanel(); panel.add(new JLabel("scale")); panel.add(spinner); return panel; } }
Mais comment superposés une boule sur une image à chaque fois que j'ai de nouveaux coordonnées !!
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 public class Circle extends JPanel{ private Graphics g ; public void paintComponent(int x, int y){ g.setColor(Color.RED); g.fillOval(500, 618, 50, 20); } }
Merci d'avance
Partager