ActionListener ou MouseListener (JAVA) ? [Résolu/Fermé]

Signaler
Messages postés
36
Date d'inscription
jeudi 4 février 2010
Statut
Membre
Dernière intervention
5 février 2014
-
Messages postés
36
Date d'inscription
jeudi 4 février 2010
Statut
Membre
Dernière intervention
5 février 2014
-
Bonjour,
Je suis débutant en Java.
Je veux faire un circuit électrique simple avec un interrupteur et une lampe (avec Graphics g) ainsi que deux boutons ON/OFF (avec JButton). Donc, lorsque je lance l'application je dois avoir l'interface graphique et quand je clique sur le bouton ON, l'interrupteur doit se fermer et la lampe doit s'allumer càd passer du blanc au jaune. Quand je clique sur le bouton OFF, l'interrupteur s'ouvre et la lampe s'éteint (comme au départ).

J'ai pu faire l'interface graphique sans problème mais maintenant je dois gérer les évènements d'action des boutons et j'avoue que c'est pas très simple..Enfait je ne sais pas très bien manipuler et gérer les évènements. Merci de bien vouloir m'aider.

Voici mon code:

import java.applet.*;
import java.awt.Graphics;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;


/*
<APPLET
code="CircApplet.class" width="500" height="400">
</APPLET>
*/
public class CircApplet extends Applet implements ActionListener
{
JButton ON = new JButton("ON");
JButton OFF = new JButton("OFF");
public void init()
{
setLayout(new FlowLayout(FlowLayout.CENTER));
ON.addActionListener(this);
add(ON);
OFF.addActionListener(this);
add(OFF);
}
public void paint(Graphics g)
{
//Arriere plan
setBackground(Color.lightGray);
//circuit
g.drawLine(150,100,250,100);
g.drawLine(300,100,350,100);
g.drawLine(150,100,150,250);
g.drawLine(350,100,350,250);
g.drawLine(150,250,200,250);
g.drawLine(250,250,350,250);
//Interrupteur
g.drawLine(250,100,295,78);
g.fillOval(248,98,5,5);
g.fillOval(298,98,5,5);
//Lampe
g.drawOval(200,225,50,50);
g.setColor(Color.white);
g.fillOval(200,225,50,50);
}

public void actionPerformed(ActionEvent ae)
{
JButton action=(JButton)ae.getSource();
if(action==ON)
{


g.setColor(Color.yellow);
g.fillOval(200,225,50,50);
repaint();
JOptionPane.showMessageDialog(null,"Circuit ferme, lampe allumee");
}
if(action==OFF)
{



JOptionPane.showMessageDialog(null,"Circuit ouvert, lampe eteinte");
}
}
}


2 réponses


Salut,

En dehors de paint(Graphics g) g n'est pas connu.
Ce n'est pas dans le listener que tu dois forcer la couleur de la lampe, mais dans paint(Graphics g) :

Si c'est ouvert >>>> blanc sinon >>>> jaune

Dans le listener (je te dirai comment savoir quel bouton est cliqué), il suffira (par exemple) de forcer un boolean (par exemple private boolean ferme = false; en variable de classe pour qu'il soit visible partout) à true si on a cliqué sur ON ou à false si on a cliqué sur OFF suivi de repaint();...

Et dans paint(Graphics g) if fermé >>>> jaune sinon >>>> blanc

Faire de même pour l'interrupteur sans oublier de dessiner aussi l'interrupteur fermé.

Commence par ajouter "super" dans paint:
public void paint(Graphics g)      {
         super.paint(g); //<<<<<<<<<<<<<<<<<<<<<<<<<<<
      //Arriere plan
....................


Le listener maintenant:
public void actionPerformed(ActionEvent ae) 
      { 
         //JButton action=(JButton)ae.getSource();
         Object action = ae.getSource();
         if(action==ON) 
       {
................
       } 
         else 
         {
...............
}
         repaint(); 
      }


N'hésite pas si tu as besoin de plus de précisions...

Cordialement,

Dan
2
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 65492 internautes nous ont dit merci ce mois-ci

Messages postés
36
Date d'inscription
jeudi 4 février 2010
Statut
Membre
Dernière intervention
5 février 2014

@Dan Merci beaucoup pour ta réponse. :) Je vais suivre la marche que tu m'as donnée; je te ferais signe si j'ai des soucis.
Messages postés
36
Date d'inscription
jeudi 4 février 2010
Statut
Membre
Dernière intervention
5 février 2014

Youhouu! çà marche! :D :D :D
Merci mille fois Dan!!
Voici le résultat en images si tu permet :

<img src="http://www.imagebucket.net/bucket/is.php?i=9279&img=CircAppletJava1.jpg" border="0">

<img src="http://www.imagebucket.net/bucket/is.php?i=9280&img=CircAppletJava2.jpg" border="0">
Heureux de t'avoir rendu service...

Je ne vois pas l'interrupteur ouvert ?

Mais puisque j'ai testé et modifié ton code voici ce qu'il est devenu:

      import java.applet.*;
   import java.awt.Graphics;
   import java.awt.*;
   import java.awt.event.*;
   import javax.swing.*;

   public class CircApplet extends Applet implements ActionListener
   {
      JButton ON = new JButton("ON");
      JButton OFF = new JButton("OFF");
      JButton fin = new JButton("Fin");
      private boolean ferme = false; //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
   
      public void init()
      {
         setLayout(new FlowLayout(FlowLayout.CENTER));
         ON.addActionListener(this);
         add(ON);
         OFF.addActionListener(this);
         add(OFF);
         fin.addActionListener(this);
         add(fin);
      }
      
      public void paint(Graphics g)
      {
         super.paint(g);
      	
      //Arriere plan
         setBackground(Color.lightGray);
      	
      //circuit
         g.drawLine(150,100,250,100);
         g.drawLine(300,100,350,100);
         g.drawLine(150,100,150,250);
         g.drawLine(350,100,350,250);
         g.drawLine(150,250,200,250);
         g.drawLine(250,250,350,250);
      
      /* //Interrupteur
      g.drawLine(250,100,295,78);
      g.fillOval(248,98,5,5);
      g.fillOval(298,98,5,5); */
      
      //Interrupteur ouvert
         g.setColor(Color.blue);
         if(ferme == false)
         {
            g.drawLine(250,100,295,78);
         }
         else
         {
         
         //Interrupteur fermé
            g.drawLine(253,100,297,100);
         }
         g.setColor(Color.black);
         g.fillOval(248,98,5,5);
         g.fillOval(298,98,5,5);
      
      //Ampoule
         g.drawOval(200,225,50,50);
         if(ferme == false)
            g.setColor(Color.white);
         else g.setColor(Color.yellow);
         g.fillOval(200,225,50,50);
      }
   
      public void actionPerformed(ActionEvent ae)
      {
      //JButton action=(JButton)ae.getSource();
         Object action = ae.getSource();
        
         if(action == ON)
         {
            ferme = true;
            repaint(); 
            // JOptionPane.showMessageDialog(null,"Circuit ferme, lampe allumee");
         }
         else
            if(action == OFF)
            {
               ferme = false;
               repaint();
            // JOptionPane.showMessageDialog(null,"Circuit ouvert, lampe eteinte");
            }
            else
            {
               if( (action == fin) && (ferme == true) )
               {
                  JOptionPane.showMessageDialog(null,"Vous avez oublié d'éteindre la lumière !!!");
                  repaint();
               }
               else
               {
                  JOptionPane.showMessageDialog(null,"                     FIN");
                  CircApplet ca = new CircApplet();
                  ca.stop();
                  ca.destroy();
                  System.exit(0);
               }
            }
      }
   }

Cordialement,

Dan
Messages postés
36
Date d'inscription
jeudi 4 février 2010
Statut
Membre
Dernière intervention
5 février 2014

Ton code est vraiment plus complet que le mien!! ^_^

En fait dans mon code je n'ai pas dessiné la tige de l'interrupteur mais elle apparaît lorsque je clique sur ON (Tu as dû le constater sur les images que j'ai postées dans mon commentaire plus haut).

Voici mon code (mon .html est inclus en commentaire) :

import java.applet.*;
import java.awt.Graphics;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;


/*
<APPLET
code="CircApplet.class" width="500" height="400">
</APPLET>
*/
public class CircApplet extends Applet implements ActionListener
{
private boolean ferme = false;
Graphics g;
JButton ON = new JButton("ON");
JButton OFF = new JButton("OFF");
public void init()
{
setLayout(new FlowLayout(FlowLayout.CENTER));
ON.addActionListener(this);
add(ON);
OFF.addActionListener(this);
add(OFF);
}
public void paint(Graphics g)
{
super.paint(g);
//Arriere plan
g.drawLine(150,5,150,15);
g.drawLine(350,5,350,15);
setBackground(Color.lightGray);
//texte
g.drawString("Cliquez sur ON pour allumer, OFF pour éteindre", 125, 50);
//circuit
g.drawLine(150,100,250,100);
g.drawLine(300,100,350,100);
g.drawLine(150,100,150,250);
g.drawLine(350,100,350,250);
g.drawLine(150,250,200,250);
g.drawLine(250,250,350,250);
//Interrupteur
//g.drawLine(250,100,295,78);
g.fillOval(248,98,5,5);
g.fillOval(298,98,5,5);
//Lampe
g.drawOval(200,225,50,50);
g.setColor(Color.white);
g.fillOval(200,225,50,50);
if(ferme==true)
{
g.drawLine(250,100,300,100);
//g.drawLine(295,78,300,100);
g.setColor(Color.yellow);
g.fillOval(200,225,50,50);
}else if(ferme==false)
{
g.setColor(Color.white);
g.fillOval(200,225,50,50);
}
}

public void actionPerformed(ActionEvent ae)
{
//JButton action=(JButton)ae.getSource();
Object action = ae.getSource();
if(action==ON)
{
ferme =true;
}else if(action==OFF)
{
ferme = false;
}
repaint();
}
}

MERCI ENCOR!!

P.S
STP Comment puis je te contacter si j'ai des questions?