ActionListener ou MouseListener (JAVA) ?
Résolu
dave jnr
Messages postés
40
Statut
Membre
-
dave jnr Messages postés 40 Statut Membre -
dave jnr Messages postés 40 Statut Membre -
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");
}
}
}
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:
- ActionListener ou MouseListener (JAVA) ?
- Jeux java itel - Télécharger - Jeux vidéo
- Waptrick java football - Télécharger - Jeux vidéo
- Waptrick java voiture - Télécharger - Jeux vidéo
- Eclipse java - Télécharger - Langages
- Java apk - Télécharger - Langages
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:
Le listener maintenant:
N'hésite pas si tu as besoin de plus de précisions...
Cordialement,
Dan
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
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:
Cordialement,
Dan
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
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?
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?
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">