TutorielsVous débutez ? C'est ici qu'on commence !
Mon compte
Recherche
Livre d'or
PublicitéVous devez être inscrit pour pouvoir poster des messages
| Page : 1 | |
| Auteur | Message |
|---|---|
| 1 visiteur sur ce sujet (1 anonyme) | |
| Page : 1 | |
NarTy
|
# Posté le 29/01/2006 à 16:27:37 |
|
Je t'aime amèrement ! Groupe : Bannis |
Bonjour à tousJ'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
|
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 |
mythrys
|
# Posté le 04/02/2006 à 18:11:36 |
![]() 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.
351 Zéros connectés |
9 requêtes |
0.0545s (0.0344s)
