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 :
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 :
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 +-------------------------------------+ | +--+ +--+ +--+ +--+ +--+ +--+ | | | | | | | | | | | | | | | | +--+ +--+ +--+ +--+ +--+ +--+ | +------------------+------------------+ | +--+ +--+ +--+ | +--+ +--+ +--+ | | | | | | | | | | | | | | | | | +--+ +--+ +--+ | +--+ +--+ +--+ | | +--+ +--+ +--+ | +--+ +--+ +--+ | | | | | | | | | | | | | | | | | +--+ +--+ +--+ | +--+ +--+ +--+ | | +--+ +--+ +--+ | +--+ +--+ +--+ | | | | | | | | | | | | | | | | | +--+ +--+ +--+ | +--+ +--+ +--+ | +------------------+------------------+
- 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,
- 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
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); } } }
L'objectif final n'est pas tout a fait atteint, mais c'est pas ce qui à l'heure actuel me dérange le plus.
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(); } }
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 =)
Partager