Bonjour,

Me voici ici, car j'éprouve des doutes sur la conception de mon programme.

L'objectif est simple :
- 1] Créer une fenêtre,
- 2] Dans cette fenêtre avoir 3 espaces distincts,
- 3] Dans chaque espace pouvoir y mettre des images,
- 4] Et enfin pouvoir cliquer glisser une image d'un espace dans l'un des 2 autres

Exemple :
Visualisation des 3 espaces :
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
 
+-------------------------------------+
|                                     |
|                                     |
|                                     |
+------------------+------------------+
|                  |                  |
|                  |                  |
|                  |                  |
|                  |                  |
|                  |                  |
|                  |                  |
|                  |                  |
|                  |                  |
|                  |                  |
+------------------+------------------+
Visualisation avec des images :

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
 
+-------------------------------------+
| +--+  +--+  +--+   +--+  +--+  +--+ |
| |  |  |  |  |  |   |  |  |  |  |  | |
| +--+  +--+  +--+   +--+  +--+  +--+ |
+------------------+------------------+
|  +--+ +--+ +--+  |  +--+ +--+ +--+  |
|  |  | |  | |  |  |  |  | |  | |  |  |
|  +--+ +--+ +--+  |  +--+ +--+ +--+  |
|  +--+ +--+ +--+  |  +--+ +--+ +--+  |
|  |  | |  | |  |  |  |  | |  | |  |  |
|  +--+ +--+ +--+  |  +--+ +--+ +--+  |
|  +--+ +--+ +--+  |  +--+ +--+ +--+  |
|  |  | |  | |  |  |  |  | |  | |  |  |
|  +--+ +--+ +--+  |  +--+ +--+ +--+  |
+------------------+------------------+
Ce que j'ai fait :
- Une classe qui contient ma JFrame :
- J'ai créé 3 classes qui héritent de JPanel : HAUT GAUCHE et DROITE,
Ces 3 jpanels sont dans le constructeur de ma Jframe,
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
 
public class MaFenetre extends JFrame {
	Haut haut;
	Gauche gauche;
	Droit droit;
 
	public MaFenetre() {
		// Toute l'initialisation
		this.initDebut();
 
		// Ce sont ces lignes qui me gênent car je transmet la fenêtre
		// Cela me choque mais m'est utile pour la suite
		this.haut = new Haut(this);
		this.gauche = new Gauche(this);
		this.droit = new Droit(this);
 
		// Je passe le layout qui fera peut etre un jour l'objet d'une question^^
		this.getContentPane().add(this.haut);
		this.getContentPane().add(this.gauche);
		this.getContentPane().add(this.droit);
 
		this.initFin();
	}
}
 
//Example pour Haut :
public class Haut extends JPanel {
	MaFenetre maFenetre;
	ArrayList<String> mesAdressesDImage;
 
	public Gauche(MaFenetre f) {
		this.maFenetre = f;
 
		// J'obtient ma liste des adresse d'images a l'aide d'un fichier qui les listes
		this.initMesAdresse();
	}
 
	public void afficherImage() {
		for(String s : this.mesAdressesDImage) {
			SmallPicture p = new SmallPicture(s, this.maFenetre);
			// J'ajoute le JPanel a mon panel actuel, j'ommet une fois de plus le layout
			this.add(p);
		}
	}
}
- J'ai aussi une classe qui hérite de JPanel et implemente MouseListener, et qui se charge d'afficher les images
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
 
public class SmallPicture extends JPanel implements MouseListener{
 
	BufferedImage picture;
	MaFenete maFenetre;
 
	public SmallPicture(String adresseImg, MaFenetre f) {
		this.picture = null;
		this.maFenetre = f;
 
		try {
		    this.pictureCard = ImageIO.read(new File(adresseImg));
		} catch (IOException e) {
			e.printStackTrace();
		}
 
		this.addMouseListener(this);
	}
 
	public void paintComponent(Graphics g) {
		super.paintComponent(g);
		if(this.picture != null) {
			g.drawImage(this.picture, 0, 0, 60, 44, 17, 44, 295, 249, this);
		}
	}
 
	@Override
	public void mouseClicked(MouseEvent e) {
		// Je supprime le visuel du jpanel et je repaint
		this.setVisible(false);
		this.repaint();
 
		// J'efface l'image du jpanel gauche
		this.maFenetre.gauche.remove(this);
		// Je l'ajoute au jpanel haut
		this.maFenetre.haut.add(this);
		// Je le rend a nouveau visible et je repaint
		this.setVisible(true);
		this.repaint();
	}
}
L'objectif final n'est pas tout a fait atteint, mais c'est pas ce qui à l'heure actuel me dérange le plus.
Ce qui me gêne c'est que dans chaque classe que j'ai, il y a toujours un attribut avec la fenêtre de départ. Cela vous dérange t'il ? Si oui comment feriez vous ?
(Je ne demande pas de code juste les "lignes" directrice.)

Merci Bien de m'avoir lu =)