MouseListener

Fermé
SW92 Messages postés 8 Date d'inscription dimanche 30 novembre 2014 Statut Membre Dernière intervention 5 janvier 2015 - 4 janv. 2015 à 19:05
SW92 Messages postés 8 Date d'inscription dimanche 30 novembre 2014 Statut Membre Dernière intervention 5 janvier 2015 - 5 janv. 2015 à 00:16
<code [/download/telecharger-34055318-java-runtime-environment java]>package madsi.tp.interfaceGraphique.simulation;

import java.awt.*;

import javax.swing.*;
import javax.swing.border.TitledBorder;

import java.awt.event.*;

public class CompteTelephonique extends JFrame implements ActionListener{
	private JLabel zone;
	private JButton appeler,ajouter;
	public int credit;
	public CompteTelephonique(){
		this.setTitle("Mon compte téléphonique");
		this.setLayout(new FlowLayout());
		credit =0;
		zone = new JLabel("Crédit restant: "+credit+"F");
		appeler = new JButton("Appeler");
		appeler.addActionListener(this);
		ajouter = new JButton("Ajouter Crédit");
		ajouter.addActionListener(this);
		this.add(zone,BorderLayout.NORTH);
		this.add(appeler);
		this.add(ajouter);
		
		this.setVisible(true);
		this.pack();
		}
	public static void main (String [] args){
		new CompteTelephonique();
		}
	public void actionPerformed(ActionEvent e) {
		if (e.getSource()==ajouter){
			JDialog jD = new JDialog(this,"Sélectionner une carte",true);
			jD.setLayout(new FlowLayout());
			JLabel carte1000 = new JLabel(new ImageIcon("img/carte1000.png"));
			carte1000.addMouseListener(new CarteClikListener(this,jD,1000));
			JLabel carte2000 = new JLabel(new ImageIcon("img/carte2000.png"));
			carte2000.addMouseListener(new CarteClikListener(this,jD,2000));
			JLabel carte5000 = new JLabel(new ImageIcon("img/carte5000.png"));
			carte5000.addMouseListener(new CarteClikListener(this,jD,5000));
			JLabel carte10000 = new JLabel(new ImageIcon("img/carte10000.png"));
			carte10000.addMouseListener(new CarteClikListener(this,jD,10000));
			JPanel jP = new JPanel();
			jP.add(carte1000);
			jP.add(carte2000);
			jP.add(carte5000);
			jP.add(carte10000);
			jD.add(jP);
			jD.setLocationRelativeTo(this.getParent());
			jD.setResizable(false);
			jD.pack();
			jD.setVisible(true);
			}

		}
}



Bnsoir à tous
Il s'agit d'un exo que l'on m'a donné et je suis un peut blocquer es ce que vs pourrait m'aider ?

La sélection d'une carte se fait par double clicks, cette événement sera géré
dans une classe que vous appelerez CarteClikListener. Cette classe doit donc
implémenter l'interface MouseListener et redéfinir la méthode mouseClicked.
Une confirmation sera demandée après le choix d'une carte.

Merci d'avance

2 réponses

SW92 Messages postés 8 Date d'inscription dimanche 30 novembre 2014 Statut Membre Dernière intervention 5 janvier 2015 1
Modifié par SW92 le 4/01/2015 à 22:34
J'ai essayé de définir la classe CarteClikListener avec le code ci-dessous
public class CarteClikListener implements MouseListener {
  CompteTelephonique fen;
  JDialog jD;
  public void init() {
   addMouseListener(this);
   }
  public CarteClikListener(CompteTelephonique fn,JDialog jD,int x){
   fn.credit=x;
   this.fen=fn;
   this.jD=jD;   
  }
  public void mouseClicked(MouseEvent m){ 
   if (m.getClickCount()==1)
   JOptionPane.showConfirmDialog(jD, "Vous avez choisi d''acheter une carte de "+fen.credit);
  }
  @Override
  public void mouseEntered(MouseEvent e) {
   // TODO Auto-generated method stub
   
  }
  @Override
  public void mouseExited(MouseEvent e) {
   // TODO Auto-generated method stub
   
  }
  @Override
  public void mousePressed(MouseEvent e) {
   // TODO Auto-generated method stub
   
  }
  @Override
  public void mouseReleased(MouseEvent e) {
   // TODO Auto-generated method stub
   
  }
 }


Mais je bloc toujours parce que lorsque je clique sur n'import lequel des image j'obtiens "Vous avez choisi d''acheter une carte de 10000" alors que le montant devrait changé selon la carte choisi
0
KX Messages postés 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 3 019
Modifié par KX le 4/01/2015 à 23:07
Bonjour,

En faisant
fn.credit=x;
tu modifies
fn
, or vu tes appels cela correspond toujours à
this
. Donc tu changes à chaque fois la même valeur, et seule la dernière est conservée : 10000.

carte10000.addMouseListener(new CarteClikListener(this,jD,10000);

public CarteClikListener(CompteTelephonique fn,JDialog jD,int x){
   fn.credit=x;

Ce qu'il faudrait, c'est que la valeur du "crédit" associé au CarteClikListener soit directement enregistrée dans celle-ci, pas au travers du credit du CompteTelephonique qui à mon avis ne correspond pas à la même chose (tu as le crédit de la carte, et le crédit que tu rajoutes)

carte10000.addMouseListener(new CarteClikListener(this,jD,10000);

public CarteClikListener(CompteTelephonique fn,JDialog jD,int value){
   this.value=value;

Remarque : c'est une modification rapide qui devrait te permettre de résoudre ton problème, mais il faudrait revoir en profondeur ton architecture de code. En particulier tu devrais avoir des classes pour chaque entité que tu manipules. Il te manquerait donc au minimum une classe CarteRechargement.

carte10000.addMouseListener(new CarteClikListener(this,jD,new CarteRechargement(1000));

public CarteClikListener(CompteTelephonique fn,JDialog jD, CarteRechargement recharge){
   this.recharge = recharge;
0
SW92 Messages postés 8 Date d'inscription dimanche 30 novembre 2014 Statut Membre Dernière intervention 5 janvier 2015 1
5 janv. 2015 à 00:16
Merci Je vais essayé avec cette méthode et vous revenir alor
0