IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

AWT/Swing Java Discussion :

Problème de conception d'interface


Sujet :

AWT/Swing Java

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 22
    Points : 19
    Points
    19
    Par défaut 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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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!

  2. #2
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 11
    Points : 7
    Points
    7
    Par défaut
    Dans ton code, tu utilises "ihm.champ.setText("salut")", ce qui veux dire que champ est un attribut de ta classe ConstructeurIHM.
    Est-ce bien le cas, car dans le bout de code que tu as mis il n'y a pas d'attribut dans cette classe et "champ" est une variable locale du constructeur?

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 22
    Points : 19
    Points
    19
    Par défaut
    Bonsoir!

    Tu as raison j'aurai du écrire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    class ConstructeurIHM{
     
    JButton bouton;
    JTextField champ;
     
            public ConstructeurIHM(GestionIHM gestionnaire){
                     bouton = new JButton("bouton");
                     bouton.addActionListener(gestionnaire);
     
                     champ = new JTextField();
                     champ.addActionListener(gestionnaire);
    }
    Mais je l'avais écrit comme ça dans mon programme donc ça ne doit pas venir de là...

    Merci quand même!

  4. #4
    Membre éclairé Avatar de BizuR
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    688
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 688
    Points : 757
    Points
    757
    Par défaut
    ce que tu veux en fait, c'est pouvoir dissocier affichage/traitement des evenements c'est ca ?

    Quels sont les traitements que tu réaliseras dans ton actionListener personnel ?!? des modifications de composants ou bien des traitements métiers derriere ?!?
    See you, space cowboy... and if you're satisfied, click on

  5. #5
    Membre averti Avatar de dazz_x
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    269
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations forums :
    Inscription : Mars 2006
    Messages : 269
    Points : 328
    Points
    328
    Par défaut Pb de paramétrage d'action
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 )
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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");
                 }
        }
    }
    La différence entre la théorie et la pratique est plus mince en théorie qu'en pratique

Discussions similaires

  1. Problème de conception au niveau de l'interface graphique
    Par MrManchot dans le forum ActionScript 3
    Réponses: 4
    Dernier message: 30/08/2011, 11h00
  2. [VB6][UserControl et OCX]Problème de conception
    Par jacma dans le forum VB 6 et antérieur
    Réponses: 8
    Dernier message: 19/01/2006, 22h37
  3. Petit problème de conception sur access
    Par coooookinette dans le forum Modélisation
    Réponses: 3
    Dernier message: 18/12/2005, 18h24
  4. Gestion des départements problème de conception
    Par snoopy69 dans le forum Modélisation
    Réponses: 7
    Dernier message: 11/10/2005, 13h08
  5. Problème de conceptions de tables
    Par dtavan dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 23/05/2004, 23h13

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo