Constructeur bouton avec image
Rasryv
Messages postés
5
Date d'inscription
Statut
Membre
Dernière intervention
-
KX Messages postés 16761 Date d'inscription Statut Modérateur Dernière intervention -
KX Messages postés 16761 Date d'inscription Statut Modérateur Dernière intervention -
Bonjour à tous,
Pour m'amuser, je cherche à faire un petit programme java qui fait apparaître dans une fenêtre plusieurs personnes que je connais avec leur nom de famille et leur âge pour faire une sorte de jeu des 7 familles. Le problème est que je n'arrive pas à faire un constructeur qui marche, c'est-à-dire qui me crée un bouton avec la bonne image dessus.
Mon constructeur
J'ai ajouté plusieurs boutons à ma fenêtre et je voudrais pouvoir faire le lien entre le bouton et l'image, c'est-à-dire que si j'ajoute ma personne
à un bouton, je voudrais que ce bouton affiche le portrait de Jean Dupuis sans que j'aie à faire hors du constructeur
Est-il possible de rajouter cette relation directement dans le constructeur? J'ai essayé (en faisant
Merci!
Pour m'amuser, je cherche à faire un petit programme java qui fait apparaître dans une fenêtre plusieurs personnes que je connais avec leur nom de famille et leur âge pour faire une sorte de jeu des 7 familles. Le problème est que je n'arrive pas à faire un constructeur qui marche, c'est-à-dire qui me crée un bouton avec la bonne image dessus.
Mon constructeur
Personne(String famille, int age, JButton bouton, ImageIcon portrait){ this.famille=famille; this.age=age; this.bouton=bouton; this.portrait=portrait) }
J'ai ajouté plusieurs boutons à ma fenêtre et je voudrais pouvoir faire le lien entre le bouton et l'image, c'est-à-dire que si j'ajoute ma personne
(Dupuis, 20, Personne[1], "Image/JeanDupuis.GIF")
à un bouton, je voudrais que ce bouton affiche le portrait de Jean Dupuis sans que j'aie à faire hors du constructeur
Personne[1].bouton.setIcon(im=new ImageIcon( "Image/JeanDupuis.GIF").
Est-il possible de rajouter cette relation directement dans le constructeur? J'ai essayé (en faisant
this.bouton.setIcon(image)dans le constructeur) mais ça n'a pas marché: il y a une exception NullPointerException qui est lancée et qui me dit Personne.<init>.
Merci!
A voir également:
- Constructeur bouton avec image
- Image iso - Guide
- Bouton reinitialisation pc - Guide
- Diagnostic bouton photo - Accueil - Outils
- Bouton home clavier ✓ - Forum PC portable
- Bouton on/off comment savoir ✓ - Forum Matériel & Système
2 réponses
J'ai d'ailleurs un autre problème indépendant: comment faire pour remonter à partir de l'un des attributs d'un objet construit à l'objet lui-même? Dans mon exemple, cela reviendrait à pouvoir avoir accès à la personne toute entière ou à l'un de ses attributs en cliquant sur le bouton qui lui est associé. Je ne connais pas de méthode qui puisse m'aider à remonter à la "racine" de l'attribut.
Voici une structure de base dont tu peux t'inspirer :
La classe Main créé la fenêtre et gère les évènements des Carte.
Normalement ton "seul" travail est de modifier les méthodes de la classe Carte qui concernent les évènements souris (qui pour l'instant gèrent juste le déplacement de la carte et l'affichage des évènements sur la console).
Tu devras notamment te servir du lien qu'il y a entre une carte et l'objet Personne, qui a lui même un lien vers la Famille à laquelle il appartient.
PS. N'oublie pas de modifier le chemin d'accès vers les images dans la méthode main, sinon tu ne verras pas grand chose.
La classe Main créé la fenêtre et gère les évènements des Carte.
Normalement ton "seul" travail est de modifier les méthodes de la classe Carte qui concernent les évènements souris (qui pour l'instant gèrent juste le déplacement de la carte et l'affichage des évènements sur la console).
Tu devras notamment te servir du lien qu'il y a entre une carte et l'objet Personne, qui a lui même un lien vers la Famille à laquelle il appartient.
PS. N'oublie pas de modifier le chemin d'accès vers les images dans la méthode main, sinon tu ne verras pas grand chose.
import java.awt.Component; import java.awt.Container; import java.awt.Graphics; import java.awt.Image; import java.awt.Point; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.awt.event.MouseMotionListener; import javax.swing.ImageIcon; import javax.swing.JFrame; class Jeu { public static final int IMG_WIDTH=56, IMG_HEIGHT=87; private final Famille[] tab; public Jeu(Famille...familles) { tab = familles; } public Famille[] familles() { return tab; } } class Famille { private final String id; private final Personne[] tab; public Famille(String nom, Personne...personnes) { id = nom; tab = personnes; for (Personne p : personnes) p.setFamille(this); } @Override public String toString() { return id; } public Personne[] personnes() { return tab; } } class Personne { private final String id; private final Image img; private final Carte carte; private Famille fam; public Personne(String prenom, String fileImage) { id = prenom; img = new ImageIcon(fileImage).getImage(); fam = null; carte = new Carte(this); } public Image image() { return img; } /*friendly*/ void setFamille(Famille famille) { if (fam!=null) throw new RuntimeException(id+" ne peut pas être ajouté à la famille "+famille+" car il appartient déjà à la famille "+fam); else { fam=famille; carte.setName("Carte("+toString()+")"); } } public String toString() { return fam+id; } public Component carte() { return carte; } } class Carte extends Component implements MouseListener, MouseMotionListener { private static final long serialVersionUID = 1L; private final Personne pers; private final Point pos = new Point(0,0); public Carte(Personne p) { pers = p; setSize(Jeu.IMG_WIDTH, Jeu.IMG_HEIGHT); addMouseListener(this); addMouseMotionListener(this); } @Override public void paint(Graphics g) { super.paint(g); g.drawImage(pers.image(), 0, 0, Jeu.IMG_WIDTH, Jeu.IMG_HEIGHT, null); } @Override public void mouseClicked(MouseEvent e) { System.out.println(e); } @Override public void mousePressed(MouseEvent e) { pos.setLocation(e.getPoint()); System.out.println(e); // dessiner la carte sélectionnée par dessus le reste Container cont = getParent(); int z = cont.getComponentZOrder(this); for (Component comp : cont.getComponents()) { int zi = cont.getComponentZOrder(comp); if (zi<z) cont.setComponentZOrder(comp, zi+1); } cont.setComponentZOrder(this, 0); repaint(); } @Override public void mouseReleased(MouseEvent e) { System.out.println(e); } @Override public void mouseEntered(MouseEvent e) { System.out.println(e); } @Override public void mouseExited(MouseEvent e) { System.out.println(e); } @Override public void mouseDragged(MouseEvent e) { setLocation(getLocation().x+e.getX()-pos.x,getLocation().y+e.getY()-pos.y); System.out.println(e); } @Override public void mouseMoved(MouseEvent e) { System.out.println(e); } } public class Main { public static void main(String[] args) { Jeu jeu = new Jeu ( new Famille("Dupuis", new Personne("Jean", "C:/DupuisJean.jpg"), new Personne("Marie", "C:/DupuisMarie.jpg") ), new Famille("Dupond", new Personne("Bertrand", "C:/DupondBertrand.jpg"), new Personne("Jacques", "C:/DupondJacques.jpg") ) ); JFrame frame = new JFrame(); frame.setLayout(null); for (Famille f : jeu.familles()) for (Personne p : f.personnes()) frame.add(p.carte()); frame.setLocationByPlatform(true);//setLocationRelativeTo(null); frame.setSize(500,500); //frame.setExtendedState(JFrame.MAXIMIZED_BOTH); frame.setVisible(true); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } }La confiance n'exclut pas le contrôle