Bonjour,
Après acquisition d'une image (qu'importe la source, mais on peut imaginer que cela soit un fichier local), j'aimerai afficher celle-ci dans une fenetre Java. Pour cela, j'utilise le design pattern Observer. J'arrive à afficher une image dans une fenetre, je pense que l'implementation d' Observer et d'Observable doit etre correcte, cependant cela ne marche pas (problème de repaint() ?).
Voici le code que j'utilise:
Classe Pictur qui permet d'afficher une image
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 public class Picture extends JPanel { private Image img; public Picture(String file) { img = new ImageIcon(file).getImage(); repaint(); } public void paint(Graphics g) { super.paint(g); if (img == null) return; int w = img.getWidth(this); int h = img.getHeight(this); boolean zoom = (w > getWidth() || h > getHeight()); if (zoom) g.drawImage(img, 0, 0, getWidth(), getHeight(), this); else g.drawImage(img, (getWidth()-w)/2, (getHeight()-h)/2, this); } }
La fenetre principaleCode:
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 public class Blabla extends Observable{ private String img; public void notifierObservateurs() { //Méthode de l'API setChanged(); notifyObservers(); } /** * Mise à jour * @param image */ public void setImage(String image) { img = image; notifierObservateurs(); } /** * * @return */ public String getImage(){ return img; }
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 public class MainWindow extends JFrame implements Observer{ public MainWindow() { super("Image"); setContentPane(new Picture("")); setSize(500,500); setVisible(true); } public void update(Observable arg0, Object arg1) { if(arg0 instanceof Blabla) { Blabla g = (Blabla) arg0; System.out.println("La nouvelle image est: "+g.getImage()); setContentPane(new Picture(g.getImage())); repaint(); } } }
Code:
1
2
3
4
5
6
7
8
9
10 public class Test { public static void main(String[] args) { Blabla b = new Blabla(); MainWindow mw = new MainWindow(); b.addObserver(mw); b.setImage("E:\\Mes Documents\\06.jpg"); } }