Evenement clic bouton

Résolu
pseudal Messages postés 12 Date d'inscription lundi 28 novembre 2005 Statut Membre Dernière intervention 10 mars 2006 - 8 mars 2006 à 15:56
Twinuts Messages postés 5375 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 14 juin 2023 - 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 ????

14 réponses

Twinuts Messages postés 5375 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 14 juin 2023 111
10 mars 2006 à 12:14
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
3
scaryman Messages postés 492 Date d'inscription vendredi 30 janvier 2004 Statut Membre Dernière intervention 16 mai 2007 12
8 mars 2006 à 16:56
Salut
Tu peux faire comme ca :
myButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
myPanel.setVisible(true);
}
});

Voila
0
pseudal Messages postés 12 Date d'inscription lundi 28 novembre 2005 Statut Membre Dernière intervention 10 mars 2006
8 mars 2006 à 17:47
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
0
pseudal Messages postés 12 Date d'inscription lundi 28 novembre 2005 Statut Membre Dernière intervention 10 mars 2006
8 mars 2006 à 17:48
desolé mon copier coller a un peu merdé
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Twinuts Messages postés 5375 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 14 juin 2023 111
8 mars 2006 à 18:28
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
0
pseudal Messages postés 12 Date d'inscription lundi 28 novembre 2005 Statut Membre Dernière intervention 10 mars 2006
9 mars 2006 à 09:52
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
0
Twinuts Messages postés 5375 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 14 juin 2023 111
9 mars 2006 à 10:23
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
0
pseudal Messages postés 12 Date d'inscription lundi 28 novembre 2005 Statut Membre Dernière intervention 10 mars 2006
9 mars 2006 à 11:11
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
0
Twinuts Messages postés 5375 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 14 juin 2023 111
9 mars 2006 à 12:13
Explique comment tu as fait et hésite pas à lance un bout de code de tes deux classes

WORA
0
pseudal Messages postés 12 Date d'inscription lundi 28 novembre 2005 Statut Membre Dernière intervention 10 mars 2006
9 mars 2006 à 13:24
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
0
Twinuts Messages postés 5375 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 14 juin 2023 111
9 mars 2006 à 17:36
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
0
pseudal Messages postés 12 Date d'inscription lundi 28 novembre 2005 Statut Membre Dernière intervention 10 mars 2006
10 mars 2006 à 11:02
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);
0
Twinuts Messages postés 5375 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 14 juin 2023 111
10 mars 2006 à 11:23
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
0
pseudal Messages postés 12 Date d'inscription lundi 28 novembre 2005 Statut Membre Dernière intervention 10 mars 2006
10 mars 2006 à 11:46
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)
0
Rejoignez-nous