Conseils conception d'un programme
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:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
|
+-------------------------------------+
| |
| |
| |
+------------------+------------------+
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
+------------------+------------------+ |
Visualisation avec des images :
Code:
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:
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:
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 =)