Problème de conception d'interface
Bonsoir,
Allons droit au but je vous explique mon problème!
J'ai deux classes : une qui gère la création et l'affichage de l'interface et une autre qui implément ActionListener dont la fonction est de gérer les différentes actions que l'utilisateur fait sur l'interface. En gros je voudrais par exemple que si l'utilisateur clique sur un bouton crée par ma classe ContructeurIHM ce soit ma classe GestionIHM qui effectue le traitement. Je pensais cela plutôt simple et en fait rien ne marche. Mon code ressemble à ça et je pense que j'ai des problèmes de conception (j'apprends sur le tas désolé pour les puristes qui vont hurler en voyant mon code!)
Code:
1 2 3 4 5 6 7 8 9
|
class ConstructeurIHM{
public ConstructeurIHM(GestionIHM gestionnaire){
JButton bouton = new JButton("bouton");
bouton.addActionListener(gestionnaire);
JTextField champ = new JTextField();
champ.addActionListener(gestionnaire);
} |
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
|
class GestionIHM{
ConstructeurIHM ihm;
public GestionIHM(){
ihm = new ConstructeurIHM(this);
}
public static void main(String[] args)
{
GestionIHM gestionnaire = new GestionIHM();
}
public void actionPerformed(ActionEvent evt){
if(evt.getActionCommand().equals("bouton")){
ihm.champ.setText("salut");
} |
Voilà... Bon évidemment ce code est bidon mais reprend ma façon de construire une interface avec un listener dans une autre classe.
Bon maintenant le problème est qu'à chaque fois que je clique sur un bouton j'ai une liste d'erreur grande comme ma main. L'erreur semble se produire lors de la ligne ihm.champ.setText("salut"); et de manière générale à chaque fois que je fais référence à un élément de l'ihm dans mon gestionnaire. L'erreur commence par :
Code:
1 2 3
|
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at GestionIHM.actionPerformed(GestionIHM.java:179) |
Voilà je pense que je m'y prends mal au niveau de l'instanciation de mes classes et du passage des paramètres aux constructeur mais je ne sais pas trop comment faire d'autre. J'ai cherché un tutoriel mais n'en ai pas trouvé. Mon code vous parait-il farfelu? Y a-t-il une façon type de procéder?
Désolé d'être un peu long mais j'essaye d'être le plus clair possible!
Merci bien de m'avoir lu et merci d'avance pour vos réponses!
Pb de paramétrage d'action
Citation:
if(evt.getActionCommand().equals("bouton")){
ihm.champ.setText("salut");
Pour pouvoir récupérer une action, je pense qu'il faut déjà qu'elle soit construite et définie pour ton bouton en écrivant quelquechose du genre :
Code:
1 2
|
ConstructeurIHM.bouton.setActionCommand("bouton"); |
et que bouton soit un champ de ConstructeurIHM bien construit...
je te met ce que j'ai fait en correction (chez moi, ça marche :mrgreen:)
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60
|
/*Classe ConstructeurIHM*/
import java.awt.BorderLayout;
import java.awt.Dimension;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JTextField;
public class ConstructeurIHM {
public JButton bouton;
public JTextField champ;
public ConstructeurIHM(GestionIHM gestionnaire){
JFrame aFrame=new JFrame();
bouton = new JButton("bouton");
bouton.setPreferredSize(new Dimension(50,20));
bouton.addActionListener(gestionnaire);
champ = new JTextField();
champ.setPreferredSize(new Dimension(150,30));
champ.addActionListener(gestionnaire);
aFrame.getContentPane().setLayout(new BorderLayout());
aFrame.getContentPane().add(bouton,BorderLayout.NORTH);
aFrame.getContentPane().add(champ, BorderLayout.SOUTH);
aFrame.pack();
aFrame.setVisible(true);
}
}
/*Classe GestionIHM*/
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class GestionIHM implements ActionListener{
ConstructeurIHM ihm;
public GestionIHM(){
ihm = new ConstructeurIHM(this);
}
public static void main(String[] args)
{
GestionIHM gestionnaire = new GestionIHM();
}
public void actionPerformed(ActionEvent evt){
if(evt.getActionCommand().equals("bouton")){
ihm.champ.setText("salut");
}
}
} |