ActionListener ou MouseListener (JAVA) ?

Résolu/Fermé
dave jnr Messages postés 36 Date d'inscription jeudi 4 février 2010 Statut Membre Dernière intervention 5 février 2014 - 23 mars 2011 à 17:51
dave jnr Messages postés 36 Date d'inscription jeudi 4 février 2010 Statut Membre Dernière intervention 5 février 2014 - 25 mars 2011 à 00:12
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");
}
}
}


A voir également:

2 réponses

Utilisateur anonyme
24 mars 2011 à 02:15
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
dave jnr Messages postés 36 Date d'inscription jeudi 4 février 2010 Statut Membre Dernière intervention 5 février 2014
24 mars 2011 à 14:54
@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.
0
dave jnr Messages postés 36 Date d'inscription jeudi 4 février 2010 Statut Membre Dernière intervention 5 février 2014
24 mars 2011 à 16:01
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">
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
1
dave jnr Messages postés 36 Date d'inscription jeudi 4 février 2010 Statut Membre Dernière intervention 5 février 2014
Modifié par dave jnr le 26/03/2011 à 02:54
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?
0