Evenement clic bouton [Résolu]

Messages postés
12
Date d'inscription
lundi 28 novembre 2005
Statut
Membre
Dernière intervention
10 mars 2006
- - Dernière réponse : Twinuts
Messages postés
5340
Date d'inscription
dimanche 4 mai 2003
Statut
Modérateur
Dernière intervention
3 septembre 2019
- 10 mars 2006 à 12:14
bonjour, je galere actuellement avec la gestion des evenements,
quelqu'un aurait il un exemple de code, où un clic sur un bouton
entraine l'affichage d'un panel dans une fenetre ????
Afficher la suite 

14 réponses

Meilleure réponse
Messages postés
5340
Date d'inscription
dimanche 4 mai 2003
Statut
Modérateur
Dernière intervention
3 septembre 2019
87
3
Merci
Ouis j'utilise le jdk 1.5 donc je n'ai pas besoin de faire appel à la methode getContentPane() :)

donc remplace la classe MyFrame par


public class MyFrame extends JFrame {

public MyFrame() {

setDefaultCloseOperation(EXIT_ON_CLOSE);

setSize(300, 300);

setLocationRelativeTo(null);

JPanel jcontent = new JPanel();

Build b = new Build();

jcontent.add(b, BorderLayout.NORTH);

jcontent.add(new ToolBar(b),BorderLayout.WEST);

setContentPane(jcontent);

setVisible(true);

}



public static void main(String[] args) {

new MyFrame();

}

}


WORA

Dire « Merci » 3

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

Codes Sources 220 internautes nous ont dit merci ce mois-ci

Commenter la réponse de Twinuts
Messages postés
492
Date d'inscription
vendredi 30 janvier 2004
Statut
Membre
Dernière intervention
16 mai 2007
7
0
Merci
Salut
Tu peux faire comme ca :
myButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
myPanel.setVisible(true);
}
});

Voila
Commenter la réponse de scaryman
Messages postés
12
Date d'inscription
lundi 28 novembre 2005
Statut
Membre
Dernière intervention
10 mars 2006
0
Merci
ouai je crois que c'est ce que j'ai fait en gros mais mon probleme est ailleurs je pense,

je crois que c'est un probeleme de communication entre mes classes.

dans une class toolBar j'ai fait ça




<meta http-equiv= "Content-Type" content="text/html; charset=UTF-8">
<meta name="Generator" content="Kate, the KDE Advanced Text Editor">

toolBar.add(button);
button = new JButton();
button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
displayResult();
}
});
toolBar.add(button);
}
protected void displayResult() {
bld.panelEvent();
}
et a partir de ça dans mon autre class qui gere mon panel je fait




<meta http-equiv ="Content-Type" content="text/html; charset=UTF-8">
<meta name="Generator" content="Kate, the KDE Advanced Text Editor">

public void panelEvent(){
aPanel.setVisible(true);
}

alors
il y a surement mieux a faire mais bon je ne suis pas encore un expert
en java. en tout cas quand je le compile ya pas de probleme , quand je
le lance non plus mais des que je clic sur le bouton, d'une part mon
panel ne s'affiche pas et d'autre part sur ma console j'ai 20 lignes de
messages d'erreurs du genre

java.lang.NullPointerException

at ToolBar.eventPerformed(ToolBar.java:51)

at ToolBar.actionPerformed(ToolBar.java:40)

at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1786)

at
javax.swing.AbstractButton$ForwardActionEvents.actionPerformed(AbstractButton.java:1839)

at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:420)

at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:258)

at
javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:245)

at java.awt.Component.processMouseEvent(Component.java:5100)

at java.awt.Component.processEvent(Component.java:4897)

at java.awt.Container.processEvent(Container.java:1569)

at java.awt.Component.dispatchEventImpl(Component.java:3615)

at java.awt.Container.dispatchEventImpl(Container.java:1627)

at java.awt.Component.dispatchEvent(Component.java:3477)

at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:3483)

at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3198)

at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3128)

at java.awt.Container.dispatchEventImpl(Container.java:1613)

at java.awt.Window.dispatchEventImpl(Window.java:1606)

at java.awt.Component.dispatchEvent(Component.java:3477)

at java.awt.EventQueue.dispatchEvent(EventQueue.java:480)

at
java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.java:201)

at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:151)

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

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

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





voila voila donc si quelqu'un pouvait aider un debutant en java qui a un peu de mal merci
Commenter la réponse de pseudal
Messages postés
12
Date d'inscription
lundi 28 novembre 2005
Statut
Membre
Dernière intervention
10 mars 2006
0
Merci
desolé mon copier coller a un peu merdé
Commenter la réponse de pseudal
Messages postés
5340
Date d'inscription
dimanche 4 mai 2003
Statut
Modérateur
Dernière intervention
3 septembre 2019
87
0
Merci
Salut,



//impossible d'ajouter le bouton avant de faire le new sinon java.lang.NullPointerException donc ton erreur est normale
toolBar.add(button);
button = new JButton();
button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
displayResult();
}
});
toolBar.add(button);//ca oki
}

public void panelEvent(){
//assure toi que aPanel contient une reference valide
//pour le tester fait
System.out.println(aPanel);//si il te renvoi null c'est mort tu as appelé cette methode avant le new
if(aPanel ! = null)
aPanel.setVisible(true);
}



WORA
Commenter la réponse de Twinuts
Messages postés
12
Date d'inscription
lundi 28 novembre 2005
Statut
Membre
Dernière intervention
10 mars 2006
0
Merci
ouai non pour le 1er addbutton c'etait un bouton precedent, mais mon probleme c'est vraimaent

quand je renvoie a une autre classe parce que si j'efectue une action dans mon event performed

pas de probleme mais dans mon autre classe meme l'affichage println ne fonctionne pas, des que

je clilc sur mon bouton j'ai des messages d'erreur et je crois kil n'arive jamais dans ma classe contenant ma fenetre
Commenter la réponse de pseudal
Messages postés
5340
Date d'inscription
dimanche 4 mai 2003
Statut
Modérateur
Dernière intervention
3 septembre 2019
87
0
Merci
Salut,



tu as 2 bouton avec le meme non donc tu atache 2 fois le meme boutton ..... c'est pas jojo ca



sinon utilise le pattern singleton



private JButton button1 = null;



........

toolBar.add(getButton1());

.......




public JButton getButton1(){

if(button1 == null){

button1 = new JButton();

.......
}

return button1;

}



et en gros tu n'utilise que getButton1() pour agire sur ton boutton comme ca tu auras toujours une reference valide

dessus et ideme pour la JToolBar


WORA
Commenter la réponse de Twinuts
Messages postés
12
Date d'inscription
lundi 28 novembre 2005
Statut
Membre
Dernière intervention
10 mars 2006
0
Merci
ouai non mais les bouton ils ont des noms different button1, 2 .... ça
c pas le probleme c'etait juste un pb de copier coller, nonvraiment,

j'ai fait des test avec les autres boutns et des chagement de couleurs
ca marche parfaitement dans la meme classe mais des que je fait appel a
une methode dans une autre classe le bouton ne marhce pas

d'ailleurs quand je clic dessus il reste de couleur foncé comme ci je restais clicé dessus alors que non, comprend pas
Commenter la réponse de pseudal
Messages postés
5340
Date d'inscription
dimanche 4 mai 2003
Statut
Modérateur
Dernière intervention
3 septembre 2019
87
0
Merci
Explique comment tu as fait et hésite pas à lance un bout de code de tes deux classes

WORA
Commenter la réponse de Twinuts
Messages postés
12
Date d'inscription
lundi 28 novembre 2005
Statut
Membre
Dernière intervention
10 mars 2006
0
Merci
ok bon voila on vas essayer de faire clair

voila ma classe gerant les boutons

public class ToolBar extends JPanel implements ActionListener{

private JButton button;

private static Build bld;

public ToolBar() {

JToolBar toolBar = new JToolBar();

addButtons(toolBar);

}

protected void addButtons(JToolBar toolBar){

button = new JButton("Create");

toolBar.add(button);

button.addActionListener(this);

}

public void actionPerformed(ActionEvent evt){

Object source = evt.getSource();

if(source ==
button)eventPerformed(); // le if c'est parce que j'ai d'autre boutons
qui devront gérer d'autre fenetre

}

public void eventPerformed(){

bld.panelEvent();

}

}



Donc on renvoie ça dans mon autre classe Build gerant la fenetre que je souhaite afficher

public class Build extends JPanel {

// bon je passe le contenu de cette fenetre Jfield Jlabel etc...

this.add(aPanel); // renvoie a une classe Jframe qui le container contentant tous mes composants

aPanel.setVisible(false);

}



public void panelEvent(){

System.out.println(aPanel);

if(aPanel != null)aPanel.setVisible(true);

}

et ma classe gerant ma fenetre principale c'est

public class MyFrame extends JFrame {

public MyFrame() {

Container content = getContentPane();

content.setLayout(new BorderLayout());
content.add(new Build(),BorderLayout.NORTH);

setVisible(true);

}

public static void main(String[] args) {

new MyFrame();

}

}

voila donc ya surement mieu a faire, c surement brouillon mais je debute donc merci d'avance
Commenter la réponse de pseudal
Messages postés
5340
Date d'inscription
dimanche 4 mai 2003
Statut
Modérateur
Dernière intervention
3 septembre 2019
87
0
Merci
Salut,



bon voici une correction avec en rouge la chose qui je pense merde a mort vu que tu n'a pas de réference

valide dessus et en bleu la correction enfin une isée de correction







public class ToolBar extends JPanel implements ActionListener{

private JButton button;

private static Build bld;//oki mais tu lui donne ou une reference valide?

private Build bld;

public ToolBar(Build bld) {

this.bld = bld;

JToolBar toolBar = new JToolBar();

addButtons(toolBar);

}



protected void addButtons(JToolBar toolBar){

button = new JButton("Create");

toolBar.add(button);

button.addActionListener(this);

}



public void actionPerformed(ActionEvent evt){

//Object source = evt.getSource();

//if(source ==
button)eventPerformed(); // le if c'est parce que j'ai d'autre boutons
qui devront gérer d'autre fenetre

if(e.getSource().equals(button))

eventPerformed();

}



public void eventPerformed(){

bld.panelEvent();//maintenant tu
peux faire appel à ta methode vu qu'au moment de l'instanciation de ton
objet

//toolbar tu devrai passer la reference de Build

}

}







public class Build extends JPanel {

private ToolBar toolBar = null;



public Build (){

toolBar = new ToolBar(this);//ici tu passe une reference valide de l'objet Build

this.add(aPanel); // renvoie a
une classe Jframe qui le container contentant tous mes composants

aPanel.setVisible(false);

}



public void panelEvent(){

System.out.println(aPanel);

if(aPanel != null)aPanel.setVisible(true);

}

}


WORA
Commenter la réponse de Twinuts
Messages postés
12
Date d'inscription
lundi 28 novembre 2005
Statut
Membre
Dernière intervention
10 mars 2006
0
Merci
ok mais maintenant c'est ma classe MyFrame qui merde, cette classe qui gere l'affchage de mes composant via container

on ne doit pas pouvoir faire comme ça.

ya un bout de cette classe dans mon dernier message je rajoute juste la
lligne concernat toolBar mais on peut pas faire commeça, so comment
faire?

content.add(new ToolBar(),BorderLayout.WEST);
Commenter la réponse de pseudal
Messages postés
5340
Date d'inscription
dimanche 4 mai 2003
Statut
Modérateur
Dernière intervention
3 septembre 2019
87
0
Merci
Salut,



Oki oki donc je t'ai changé 2 ou 3 chose dans ton code pour te donner une idée donc je lance :



MyFrame.java



import java.awt.BorderLayout;

import javax.swing.JFrame;



public class MyFrame extends JFrame {

public MyFrame() {

setDefaultCloseOperation(EXIT_ON_CLOSE);

setSize(300, 300);

setLocationRelativeTo(null);

Build b = new Build();

add(b, BorderLayout.NORTH);

add(new ToolBar(b),BorderLayout.WEST);

setVisible(true);

}



public static void main(String[] args) {

new MyFrame();

}

}



Build.java



import javax.swing.JPanel;



public class Build extends JPanel {



public Build (){

//TODO ici du code

}



public void panelEvent(){

//TODO ici du code

System.out.println("coucou");

}

}



ToolBar.java



import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;



import javax.swing.JButton;

import javax.swing.JToolBar;



public class ToolBar extends JToolBar implements ActionListener{

private JButton button;

private Build bld;



public ToolBar(Build bld) {

this.bld = bld;

addButtons();

}



private void addButtons(){

button = new JButton("Create");

add(button);

button.addActionListener(this);

}



public void actionPerformed(ActionEvent evt){

Object source = evt.getSource();

if(source == button)eventPerformed();

}



private void eventPerformed(){

bld.panelEvent();

}



}




WORA
Commenter la réponse de Twinuts
Messages postés
12
Date d'inscription
lundi 28 novembre 2005
Statut
Membre
Dernière intervention
10 mars 2006
0
Merci
encore désolé mais maintenant j'a ça comme erreur



Exception in thread "main" java.lang.Error: Do not use MyFrame.add() use MyFrame.getContentPane().add() instead

at javax.swing.JFrame.createRootPaneException(JFrame.java:465)

at javax.swing.JFrame.addImpl(JFrame.java:491)

at java.awt.Container.add(Container.java:518)

at MyFrame.(MyFrame.java:17)

at MyFrame.main(MyFrame.java:30)
Commenter la réponse de pseudal