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 -
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
J'ai essayé de définir la classe CarteClikListener avec le code ci-dessous
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
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
Bonjour,
En faisant
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)
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.
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;