MouseListener

SW92 Messages postés 8 Date d'inscription   Statut Membre Dernière intervention   -  
SW92 Messages postés 8 Date d'inscription   Statut Membre Dernière intervention   -
<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   Statut Membre Dernière intervention   1
 
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 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
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   Statut Membre Dernière intervention   1
 
Merci Je vais essayé avec cette méthode et vous revenir alor
0