OVH Cloud OVH Cloud

JPanel, JTextField, JButton et evenements

2 réponses
Avatar
koni
Bonjour,

Dans une application un menu permet d'afficher un JPanel différent en
fonction du choix fait. Un de ces JPanel en contient un autre (voir la
classe) qui contient 2 composants. Un JTextField et un bouton.
L'utilisateur peut entrer une valeur dans le champs text. Dans un
premier temps mon but est d'afficher la valeur entrée dans un
JOptionPane. Mais meme cela je n'y arrive pas. J'optiens un message
d'erreur (voir ci dessous).

/*
* Créé le 23 févr. 2004
*
*/
package chrono;

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
/**
* @author koni
*
*/
public class PChoix extends JPanel implements ActionListener{
private JTextField filename;
private JButton choix;
private JTable laTable;

public PChoix() {
setLayout(new BorderLayout());
JTextField filename = new JTextField(8);
add(filename,BorderLayout.WEST);
JButton choix = new JButton("ok");
choix.addActionListener(this);
add(choix,BorderLayout.CENTER);
add(new JLabel(" "),BorderLayout.EAST);
}

public void actionPerformed (ActionEvent e) {
Val = filename.getText();
JOptionPane.showMessageDialog(null, Val);

}
}

Résultats:
java.lang.NullPointerException
at chrono.PChoix.actionPerformed(PChoix.java:31)
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:456)
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)

Apparemment impossible de récupérer la saisie (surement parce que
l'écouteur ne trouve pas l'objet filename ...) mais pourquoi ? et
comment résoudre ce problème?

Merci de votre aide,
koni

2 réponses

Avatar
Xav
Dans les lignes
JTextField filename = new JTextField(8);
JButton choix = new JButton("ok");

tu affectes des variables locales au constructeur mais pas les variables
membres.

si tu remplaces les lignes par:
this.filename = new JTextField(8);
this.choix = new JButton("ok");

Ca devrait fonctionner.

Xav.

et
"koni" wrote in message
news:403a13cd$0$19646$
Bonjour,

Dans une application un menu permet d'afficher un JPanel différent en
fonction du choix fait. Un de ces JPanel en contient un autre (voir la
classe) qui contient 2 composants. Un JTextField et un bouton.
L'utilisateur peut entrer une valeur dans le champs text. Dans un
premier temps mon but est d'afficher la valeur entrée dans un
JOptionPane. Mais meme cela je n'y arrive pas. J'optiens un message
d'erreur (voir ci dessous).

/*
* Créé le 23 févr. 2004
*
*/
package chrono;

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
/**
* @author koni
*
*/
public class PChoix extends JPanel implements ActionListener{
private JTextField filename;
private JButton choix;
private JTable laTable;

public PChoix() {
setLayout(new BorderLayout());
JTextField filename = new JTextField(8);
add(filename,BorderLayout.WEST);
JButton choix = new JButton("ok");
choix.addActionListener(this);
add(choix,BorderLayout.CENTER);
add(new JLabel(" "),BorderLayout.EAST);
}

public void actionPerformed (ActionEvent e) {
Val = filename.getText();
JOptionPane.showMessageDialog(null, Val);

}
}

Résultats:
java.lang.NullPointerException
at chrono.PChoix.actionPerformed(PChoix.java:31)
at
javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1786)

at

javax.swing.AbstractButton$ForwardActionEvents.actionPerformed(AbstractButto

n.java:1839)
at

javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:4

20)
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:456)
at

java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.ja

va: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)

Apparemment impossible de récupérer la saisie (surement parce que
l'écouteur ne trouve pas l'objet filename ...) mais pourquoi ? et
comment résoudre ce problème?

Merci de votre aide,
koni


Avatar
koni
Xav wrote:
Dans les lignes
JTextField filename = new JTextField(8);
JButton choix = new JButton("ok");

tu affectes des variables locales au constructeur mais pas les variables
membres.

si tu remplaces les lignes par:
this.filename = new JTextField(8);
this.choix = new JButton("ok");

Ca devrait fonctionner.

Xav.


En effet j'avais trouvé cela, mais c est bien expliqué (car bien que
j'avais trouvé la source du probleme je n'en avais pas saisi la raison,
pourtant évidente)

Merci
koni