IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Java Discussion :

Afficher images lors d'un clique sur bouton dans une Jframe différentes


Sujet :

Java

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Février 2013
    Messages
    5
    Détails du profil
    Informations personnelles :
    Âge : 31
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 5
    Points : 3
    Points
    3
    Par défaut Afficher images lors d'un clique sur bouton dans une Jframe différentes
    Bonjour,

    J'ai un problème qui semble simple à première vu mais je ne trouve pas de solution...j'espère que vous pourrez éclairer ma lanterne !

    Je vous expose mon problème.
    J'ai 3 classes : Une classe Salon, une Objet et une PanelObjet.

    La classe PanelObjet gère l'affichage d'image dans la classe Objet.
    La classe Salon est une Jframe avec des boutons.
    La classe Objet est une Jframe avec des images.

    J'ai donc deux fenêtres "windows" différentes.
    Je désire que lorsque l'on clique sur un bouton dans Salon, une image apparaisse dans la classe Objet !

    J'ai créé mon code tous marche parfaitement (l'affichage des images etc..) MAIS lorsque je clique sur mon bouton mon image n’apparaît pas...

    Voici ce que j'ai fait pour l'instant :
    La classe PanelObjet
    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
     
    public class PanelObjet extends JComponent {
     
    	/**
             * 
             */
    	private static final long serialVersionUID = 1L;
    	private BufferedImage clef1;
    	private BufferedImage objets1;
    	public static boolean magique = false;
     
    	public PanelObjet() {
     
    		try {
    			clef1 = ImageIO.read(new File("./images/clef1.jpg"));
    			objets1 = ImageIO.read(new File("./images/objets.jpg"));
    		} catch (IOException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
     
    	}
     
    	public void paintComponent(Graphics g) {
     
    		g.drawImage(objets1, 0, 0, (objets1.getWidth(this)),
    				(objets1.getHeight(this)), this);
     
     
    		if (magique == true) {
    			g.drawImage(clef1, 7, 5, (clef1.getWidth(this)),
    					(clef1.getHeight(this)), this);
    		}
     
    	}
    }
    La classe Objet :
    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
     
    public class Objets extends JFrame {
     
    	/**
             * 
             */
    	private static final long serialVersionUID = 1L;
    	private PanelObjet graphic = new PanelObjet();
    	public Lance lance;
     
     
    	/**
             * Constructeur de la classe niveau1
             */
    	public Objets() {
     
    		setLocation(0,430);
    		setTitle("Tes objets");
    		setSize(465, 88);
    		this.getContentPane().add(graphic);
    		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    		this.setResizable(false);
    		this.setVisible(true);
     
     
    	}
     
     
    }
    La classe Salon :
    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
    public class Salon extends JFrame {
     
    	/**
             * 
             */
    	private static final long serialVersionUID = 1L;
    	private Panel graphic = new Panel("salon");
    	public Lance lance;
    	public static boolean montrer = false;
    	public static boolean montrer2 = false;
     
    	/**
             * Constructeur de la classe niveau1
             */
    	public Salon() {
     
    		setTitle("Escape Room");
    		setSize(812, 420);
    		this.setContentPane(graphic);
    		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    		this.setResizable(false);
    		this.setVisible(true);
     
     
    		final JButton clef1 = new JButton("");
    		clef1.setBounds(555, 364, 20, 22);
    		getContentPane().add(clef1);
    		clef1.addActionListener(new ActionListener() {
    			public void actionPerformed(ActionEvent arg0) {
    				PanelObjet.magique = true;
    				repaint();
    			}
    		});
     
    		}
     
    	}
    Je pense que mon problème se situe au niveau de ma valeur booleenne qui n'est pas détecté par PanelObjet lorqu'elle est vraie.

    Pour moi la solution serait "d'actualiser" la classe PanelObjet et Objet pour qu'elles se rendent compte que la valeur est devenue vraie

    Je sais aussi qu'il faudrait ajouter la méthode repaint() dans Objet mais je ne sais pas trop où.

    Mon message est assez long, merci d'avance à tous ceux qui vont se pencher sur mon problème

    Cordialement

  2. #2
    Membre chevronné
    Inscrit en
    Mai 2006
    Messages
    1 364
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 1 364
    Points : 1 984
    Points
    1 984
    Par défaut
    Citation Envoyé par de393 Voir le message
    Je pense que mon problème se situe au niveau de ma valeur booleenne qui n'est pas détecté par PanelObjet lorqu'elle est vraie.
    Non, ca c'est exclu. Si la valeur a changé, et que tu rafraichis le bon composant, la valeur lue sera correcte. D'autant que le changement se fait dans le thread EDT, donc pas de probleme de multithread.

    Citation Envoyé par de393 Voir le message
    Pour moi la solution serait "d'actualiser" la classe PanelObjet et Objet pour qu'elles se rendent compte que la valeur est devenue vraie

    Je sais aussi qu'il faudrait ajouter la méthode repaint() dans Objet mais je ne sais pas trop où.
    Le problème, c'est qu'on ne voit pas ou tu crées les instances d'Objet (dont le nom est tres moche, ca aurait été mieux de choisir autre chose). Mais bon, dans la classe Salon, quand on clique sur ton bouton, c'est la méthode repaint de l'objet Salon qui va etre appelée et pas celle de l'objet Objet. J'imagine que l'erreur vient de la. Pour aller plus loin, il faudrait voir comment tu instancies Objet et quel est le lien entre ses instances et la classe Salon. Mais à vue de nez, je dirais qu'il y a un probleme d'architecture qui t'oblige a passer par une variable statique et que le probleme vient de la.

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Février 2013
    Messages
    5
    Détails du profil
    Informations personnelles :
    Âge : 31
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 5
    Points : 3
    Points
    3
    Par défaut
    Merci pour votre réponse.

Discussions similaires

  1. Réponses: 6
    Dernier message: 13/11/2012, 08h17
  2. Réponses: 1
    Dernier message: 01/02/2010, 11h57
  3. Réponses: 14
    Dernier message: 20/08/2008, 17h11
  4. Réponses: 10
    Dernier message: 30/07/2007, 18h42
  5. Réponses: 15
    Dernier message: 13/03/2007, 17h25

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo