Aller au menu - Aller au contenu

[Plan du site] Vous êtes ici --- > Le Site du Zéro > Les forums > Programmation > Langage Java > [JAVA] les événements > Lecture du sujet

[JAVA] les événements

encore un probleme !!

Vous devez être inscrit pour pouvoir poster des messages

Page : 1 
Auteur Message
1 visiteur sur ce sujet (1 anonyme)
Page : 1 
Hors ligne NarTy # Posté le 29/01/2006 à 16:27:37
Je t'aime amèrement !
Avatar
Groupe : Bannis

Bonjour à tous



J'ai encore un probleme avec les fenetres mais cela concerne plus maintenant les evénements
voici mon code Code : Java
import javax.swing.*;
import java.awt.event.*;
import java.awt.*;
////////////////////////////////
class MaFenetre extends JFrame implements ActionListener
{
        public MaFenetre()
        {
                setTitle("Fenetre");
                setBounds(50,50,300,200);
                Container contenu = getContentPane();
                // panneau
                JPanel pan = new Panneau();
                pan.setBackground(Color.yellow);
                getContentPane().add(pan);
                // rectangle
                JButton rectangle = new JButton("Rectangle");
                contenu.add(rectangle,"North");
                rectangle.addActionListener(this);
                // ovale
                JButton ovale = new JButton("Ovale");
                contenu.add(ovale,"South");
                ovale.addActionListener(this);
        }
        public void actionPerformed (ActionEvent ev)
        {
                if(ev.getSource() == rectangle) pan.setRectangle();
                if(ev.getSource() == ovale) pan.setOvale();
                pan.repaint();
        }
        private Panneau pan;
        private JButton rectangle,ovale;
}
/////////////////////////////////
class Panneau extends JPanel
{
        public void paintComponent(Graphics g)
        {
                super.paintComponent(g);
                if(ovale)
                {
                        g.drawOval(80,20,120,60);
                }
                if(rectangle)
                {
                        g.drawRect(80,20,120,60);
                }
        }
        public void setRectangle()
        {
                ovale = false; rectangle = true;
        }
        public void setOvale()
        {
                ovale = true; rectangle = false;
        }
        private boolean rectangle = false;
        private boolean ovale = false;
}
/////////////////////////////////
public class Fenetre
{
        public static void main(String[] args)
        {
                JFrame Fen = new MaFenetre();
                Fen.setVisible(true);
        }
}       

mais il y a une erreur quand je clique sur l'un des boutons !
Code : Console
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at MaFenetre.actionPerformed(Fenetre.java:29)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:18
49)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.jav
a:2169)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel
.java:420)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:258
)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonL
istener.java:234)
at java.awt.Component.processMouseEvent(Component.java:5488)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3126)
at java.awt.Component.processEvent(Component.java:5253)
at java.awt.Container.processEvent(Container.java:1966)
at java.awt.Component.dispatchEventImpl(Component.java:3955)
at java.awt.Container.dispatchEventImpl(Container.java:2024)
at java.awt.Component.dispatchEvent(Component.java:3803)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4212
)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3892)

at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3822)
at java.awt.Container.dispatchEventImpl(Container.java:2010)
at java.awt.Window.dispatchEventImpl(Window.java:1774)
at java.awt.Component.dispatchEvent(Component.java:3803)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:463)
at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchTh
read.java:242)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThre
ad.java:163)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:157)

at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:149)

at java.awt.EventDispatchThread.run(EventDispatchThread.java:110)

Merci encore !

Venez jouer
Mon blog => JuLeS’ ProGs
Programmeur xHTML/CSS,PHP/SQL,Javascript,C à votre service

 
Hors ligne Lord Boo # Posté le 04/02/2006 à 17:06:01
Groupe : Membres
salut
je pens eque le probleme vient du fait que tu met le actionlistener apres l'avoir ajouter a ton container. un fois ajouter, il est impossible de modifier les objets et don de leur coller un listener.
tu dois donc faire :
Code : Java
ovale.addActionListener(this);
contenu.add(ovale,"south");


je viens de voir que tu declare ton panneau et tes bouttons a la fin de ta classe. il faut le faire des le debut.
voila
++
Édité le 04/02/2006 à 17:08:13 par Lord Boo

Lord Boo
 
Hors ligne mythrys # Posté le 04/02/2006 à 18:11:36
Avatar
Groupe : Membres
Citation : Pas de titre
un fois ajouter, il est impossible de modifier les objets et don de leur coller un listener.


et on ferais comment alors pour changer le fond du backround quand on clique sur un bouton par exemple..

le prob viens du faite que t'a pas très bine compris le principe d'interface et que ca merde bien dans ton code, y a moyen de faire comme tu fait mais ca fait longtemps qu'on utilise plus de code de se type pour les listenner alors je te propose ceci

une classe privée interne qui implément ActionListener
Code : Java

import javax.swing.*;
import java.awt.event.*;
import java.awt.*;
////////////////////////////////
class MaFenetre extends JFrame {
               
               
        public MaFenetre() {
                setTitle("Fenetre");
                setBounds(50,50,300,200);
                Container contenu = getContentPane();
                // panneau
                pan = new Panneau(); //ici y avait une faute qui faisait tout foiré tu comprend pq?
                pan.setBackground(Color.yellow);
                getContentPane().add(pan);
                /////rajout
                                listener lin = new listener();
                                // rectangle
                rectangle = new JButton("Rectangle"); //ici encore la meme fautes
                contenu.add(rectangle,"North");
                rectangle.addActionListener(lin);
                // ovale
                ovale = new JButton("Ovale"); //ici aussi
                contenu.add(ovale,"South");
                ovale.addActionListener(lin);
                                setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // c'est mieux pour que le programme s'arrete vraiment
        }
       
                private class listener implements ActionListener {
                        public void actionPerformed (ActionEvent ev) {
                if(ev.getSource() == rectangle) pan.setRectangle();
                if(ev.getSource() == ovale) pan.setOvale();
                pan.repaint();
                        }
                }
               
        private Panneau pan;
        private JButton rectangle,ovale;
}
/////////////////////////////////
class Panneau extends JPanel
{
        public void paintComponent(Graphics g)
        {
                super.paintComponent(g);
                if(ovale)
                {
                        g.drawOval(80,20,120,60);
                }
                if(rectangle)
                {
                        g.drawRect(80,20,120,60);
                }
        }
        public void setRectangle()
        {
                ovale = false;
                                rectangle = true;
        }
        public void setOvale()
        {
                ovale = true;
                                rectangle = false;
        }
        private boolean rectangle = false;
        private boolean ovale = false;
}
/////////////////////////////////
public class Fenetre
{
        public static void main(String[] args)
        {
                MaFenetre  Fen = new MaFenetre(); // je ne vois pas l'interet de mettre le type JFrame
                Fen.setVisible(true);
        }
}       




après avoir regardé ton code de près j'ai trouvé les erreurs qui faisait que ca compilait mais que ton programme était totalement faut
si tu ne voit pas pourquoi envoie moi un message

Code : Java

import javax.swing.*;
import java.awt.event.*;
import java.awt.*;
////////////////////////////////
class MaFenetre extends JFrame implements ActionListener  {
               
               
        public MaFenetre() {
                setTitle("Fenetre");
                setBounds(50,50,300,200);
                Container contenu = getContentPane();
                // panneau
                pan = new Panneau(); //ici y avait une faute qui faisait tout foiré tu comprend pq?
                pan.setBackground(Color.yellow);
                getContentPane().add(pan);
                // rectangle
                rectangle = new JButton("Rectangle"); //ici encore la meme fautes
                contenu.add(rectangle,"North");
                rectangle.addActionListener(this);
                // ovale
                ovale = new JButton("Ovale"); //ici aussi
                contenu.add(ovale,"South");
                ovale.addActionListener(this);
                                setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // c'est mieux pour que le programme s'arrete vraiment
        }
        public void actionPerformed (ActionEvent ev)
        {
                if(ev.getSource() == rectangle) pan.setRectangle();
                if(ev.getSource() == ovale) pan.setOvale();
                pan.repaint();
        }
        private Panneau pan;
        private JButton rectangle,ovale;
}
/////////////////////////////////
class Panneau extends JPanel
{
        public void paintComponent(Graphics g)
        {
                super.paintComponent(g);
                if(ovale)
                {
                        g.drawOval(80,20,120,60);
                }
                if(rectangle)
                {
                        g.drawRect(80,20,120,60);
                }
        }
        public void setRectangle()
        {
                ovale = false;
                                rectangle = true;
        }
        public void setOvale()
        {
                ovale = true;
                                rectangle = false;
        }
        private boolean rectangle = false;
        private boolean ovale = false;
}
/////////////////////////////////
public class Fenetre
{
        public static void main(String[] args)
        {
                MaFenetre  Fen = new MaFenetre(); // je ne vois pas l'interet de mettre le type JFrame
                Fen.setVisible(true);
        }
}       


le premier code est plus propre et il existe encore une autre manière mais elle n'était pas idéal dans ton cas enfin disons qu'il aurait fallut penser le programme autrement


edit je peut pas laisser passer cette horreur
Citation : Pas de titre
je viens de voir que tu declare ton panneau et tes bouttons a la fin de ta classe. il faut le faire des le debut. >


encore une fois rien avoir c'est juste deux convention différente mais pour le compilateur c'est la meme chose
des fois on se demande si vous savez ce que vous écrivez
Édité le 04/02/2006 à 18:16:11 par mythrys

Retour au forum "Langage Java" ou à la liste des forums

Vous devez être inscrit pour pouvoir poster des messages

Changer de design | En savoir plus | Plan du site | Politique d'accessibilité | Règles | RSS tutoriels | RSS news
Édité par Simple IT SARL : Nous contacter | Notre blog | Revue de presse | Publicité

Y'a plus rien à lire, faut remonter maintenant !

Hébergement web - Correction de tutoriels - Créer un site
Vous souhaitez apparaître ici ? Contactez-nous.

Nombre de connectés 665 Zéros connectés | Requêtes SQL 7 requêtes | Temps de génération de la page : Total (SQL) 0.0535s (0.0253s)