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

avec Java Discussion :

L'utilisation du constructeur est-il bon ?


Sujet :

avec Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    146
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 146
    Par défaut L'utilisation du constructeur est-il bon ?
    Bonjour j'ai crée un inteface graphique avec 2 partie, partie gauche des boutons et partie droite un message qui dit quelle bouton on a cliquer.
    mon problème est que si je veux que le message apparait pour le premier clique je suis oblité de passer par le constructeur, je n'ai trouvé que cette solution, mais j'ai l'impression de faire répérter X fois l'interface

    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
    61
    62
    63
    64
     
    import java.awt.BorderLayout;
    import java.awt.Color;
    import java.awt.Dimension;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
     
    import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.JPanel;
     
     
    public class Fenetre extends JFrame implements ActionListener{
    	JPanel outil = new JPanel();
    	JPanel dynamic = new JPanel();
    	JButton envoyer = new JButton("envoyer");
    	JButton modifier = new JButton("modification");
     
    	JLabel message = new JLabel("demande d'enregistrement");
    	JLabel message2 = new JLabel("demande de modification");
     
    	public Fenetre()
    	{
    		this.zone();
    		this.setVisible(true);
    	}
     
    	public void zone()
    	{
    		this.setTitle("bonjour");
    		this.setSize(600,600);
    		this.setLayout(new BorderLayout());//on choisi un parton layout
    		this.getContentPane().add(outil,BorderLayout.WEST);//partie zone 1 a l'ouest
    		this.getContentPane().add(dynamic,BorderLayout.CENTER);
     
    		outil.setBackground(Color.red);
    		outil.setPreferredSize(new Dimension(200,200));
    		outil.add(envoyer);
    		outil.add(modifier);
     
    		dynamic.setBackground(Color.green);
     
    		envoyer.addActionListener(this);
    		modifier.addActionListener(this);
    		this.setVisible(true);
    	}
     
    	public void actionPerformed(ActionEvent e)
    	{
    		this.zone();
    		if(e.getSource() == envoyer)
    		{
    			dynamic.add(message);
    		}
    		if(e.getSource() == modifier)
    		{
    			dynamic.add(message2);
    			System.out.println("on demande modifier");
    		}		
    		this.setVisible(true);
    	}
     
    }
    qu'en pensez-vous ? je peux améliorer cela ?

  2. #2
    Membre chevronné

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2010
    Messages
    246
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mai 2010
    Messages : 246
    Par défaut
    Déja à vue d'oeil :

    - this.zone() n'a rien à faire dans tes listener. l'appeler une seule fois dans le constructeur est suffisant. de même pour "this.setVisible(true)" que tu repète 3 fois alors que la aussi, une seule fois dans le constructeur suffit.

    - Concernant la lisibilité, à ta place j'appelerais une méthode "event()" à la fin du constructeur qui se chargerai de construire les event listener. un peu comme ca :

    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
     
    public void event() {
    		this.envoyer.addActionListener(new ActionListener() {
    			public void actionPerformed(ActionEvent e) {
    				envoyerButtonClicked();
    			}
    		});
    		this.modifier.addActionListener(new ActionListener() {
    			public void actionPerformed(ActionEvent e) {
    				modifierButtonClicked();
     
    			}
    		});
    }
     
    public void envoyerButtonClicked(){
        dynamic.add(message);
    }
     
    public void modifierButtonClick(){
        dynamic.add(message2);
        System.out.println("on demande modifier");
    }
    De cette manière tu n'a pas à te préocuper de la source, chaque boutton possède son listener.

    Pour finir, quand tu veux afficher un texte, pourquoi ne pas simplement placer un JLabel dans ton autre fenêtre et d'utiliser la méthode "setText("balabal")" ?

  3. #3
    Membre chevronné

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2010
    Messages
    246
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mai 2010
    Messages : 246
    Par défaut
    Bon il se trouve que j'avais un peu de temps, du coup j'ai fais les modifications en question d'après ce que j'ai compris de ce que tu voulais :

    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
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
     
    import java.awt.BorderLayout;
    import java.awt.Color;
    import java.awt.Dimension;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
     
    import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.JPanel;
     
    public class Fenetre extends JFrame{
     
    	private static final long serialVersionUID = 1L;
     
    	private JPanel outil = new JPanel();
    	private JPanel dynamic = new JPanel();
    	private JButton envoyer = new JButton("envoyer");
    	private JButton modifier = new JButton("modification");
     
    	//on crée un seul JLabel qui affichera le message
    	private JLabel message = new JLabel();
     
    	public Fenetre()
    	{
    		this.zone();
    		this.setVisible(true); //n'a besoin de n'être appelé qu'une seule fois
    		event(); // appèle la méthode qui va créer les listener.
    	}
     
    	public void zone()
    	{
    		this.setTitle("bonjour");
    		this.setSize(600,600);
    		this.setLayout(new BorderLayout());//on choisi un parton layout
    		this.getContentPane().add(outil,BorderLayout.WEST);//partie zone 1 a l'ouest
    		this.getContentPane().add(dynamic,BorderLayout.CENTER);
    		this.setDefaultCloseOperation(EXIT_ON_CLOSE);
     
    		outil.setBackground(Color.red);
    		outil.setPreferredSize(new Dimension(200,200));
    		outil.add(envoyer);
    		outil.add(modifier);
     
    		dynamic.setBackground(Color.green);
    		dynamic.add(message);
    	}
     
    	//ici on créer les listener pour tes deux boutons.
    	public void event() {
    			this.envoyer.addActionListener(new ActionListener() {
    				public void actionPerformed(ActionEvent e) {
    					envoyerButtonClicked();
    				}
    			});
    			this.modifier.addActionListener(new ActionListener() {
    				public void actionPerformed(ActionEvent e) {
    					modifierButtonClicked();
     
    				}
    			});
    	}
     
    	//méthode appelé lors du click sur le bouton envoyer
    	public void envoyerButtonClicked(){
    		this.message.setText("on demande envoyer");
    	    System.out.println("on demande envoyer");
    	}
     
    	//méthode appelé lors du click sur le bouton modifier
    	public void modifierButtonClicked(){
    		this.message.setText("on demande modifier");
    	    System.out.println("on demande modifier");
    	}
     
    	//petit main rapide pour le test de ta fenetre
    	 public static void main(String[] args) {
    	        new Fenetre();
     
    	    }
     
    }
    Et de manière générale, gère tes listener de cette façon, c'est plus propre et plus fonctionnel. De plus j'ai remarqué qu'a l'execution, tes messages apparaissent 4 fois en console à chaque click...

    Ah et important aussi, pense à dire que quand ta fenetre se ferme, l'application doit quitter. Sinon tu ne vois plus rien mais ton cose continue de tourner... il suffit de rajouter cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    this.setDefaultCloseOperation(EXIT_ON_CLOSE);
    J'espère que ce code t'aidera à mieux comprendre les listener...

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    146
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 146
    Par défaut
    merci beaucoup michon de ton script, cela fait 2 jours que je cherchais pourquoi lorsque je clique pour la première sur un bouton je n'avais de message, il fallait que je change la dimension de le fenêtre pour voir apparaitre quelque chose , de plus je ne connaisais pas even().
    [code]

    Je pensais que actionPerforme() servait a récupérer les listeners, mais dans quelle cas on l'ultilise ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Pour finir, quand tu veux afficher un texte, pourquoi ne pas simplement placer un JLabel dans ton autre fenêtre et d'utiliser la méthode "setText("balabal")" ?
    Pour le moment j'ai mis un texte pour essayer de comprendre comment cela fonctionne.

    a quoi sert cette atrribut ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    	private static final long serialVersionUID = 1L;

    sur la partie dynamique, je souahite en faite afficher un formulaire par exemple des JLabe et des JTextField.
    cette solution est t'il correcte ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    	//méthode appelé lors du click sur le bouton modifier
    	public void modifierButtonClicked(){
    		this.message.setText("on demande modifier");
    	    System.out.println("on demande modifier");
               Modifier formulaire = new Modifier(); //on demande de crée un instance de Modifier," Modifier " :cette class me premettera de d'affichier un fomulaire entier de modification d'une fiche personne par exemple?
    	}
    la class Modifier doit-elle hériter de la class Fenetre afin d'utiliser ce layout?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    		this.setLayout(new BorderLayout());//on choisi un parton layout
    		this.getContentPane().add(outil,BorderLayout.WEST);//partie zone 1 a l'ouest
    		this.getContentPane().add(dynamic,BorderLayout.CENTER);
    ou je doit resté dans la class Fenetre pour crée mes fomulaire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    dynamic.add(fomulaire.add(//utilisation du bouton de la class Modifier);
    dynamic.add(fomulaire.add(//utilisation du champs de text de la class Modifier);
    .....

  5. #5
    Membre chevronné

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2010
    Messages
    246
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mai 2010
    Messages : 246
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    private static final long serialVersionUID = 1L;
    Alors ca c'est parce que mon eclipse memet un warning si je ne le laisse pas mettre ca . Tu peux oublier , c'est pas utile en soit, juste que je supporte pas d'avoir des warning dans mon code.

    Tu peux très bien créer ton formulare comme tu le marque ici, à savoir :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Modifier formulaire = new Modifier();
    Ensuite, il te suffit de créer une classe modifier qui héritera à priori de JPanel et qui contiendra alors tous tes composants de ton formulaire. Le listener de ta frame n'auras alors qu'a faire en gros :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Modifier formulaire = new Modifier(); //déja fait
    dynamic.add(formulaire); // pour ajouter ton formulaire
    dynamic.validate(); //pour mettre a jour ton panel
    Par contre, je te conseillerai d'utiliser des noms explicite. Modifier pour une classe créant un formulaire... tu vas finir par t'y perdre. Formulaire pour une classe créant un formulaire parait déja mieux non ? Un nom explicite est important à une bonne compréhension et bonne lecture.

    Ah et pour revenir à la méthode "event()", ce n'est pas une méthode existante, la je l'ai créer. C'est juste pour un souci de clarté et donc efficacité. tu aurais pu la nommer n'importe comment en fait...

    Concernant les ActionPerformed(), si tu regarde bien, c'est exactement ce que j'utilise dans la méthode event()... pour "abonner" chaque boutton à un listener qui déclenchera l'évènement sur un click. En effet ActionPerformed et bien meilleur pour detecter les click souris queles MouseClick, MousePress ou MouseRelease event...

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    146
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 146
    Par défaut
    j'ai renomer les variables
    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
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
     
    import java.awt.BorderLayout;
    import java.awt.Color;
    import java.awt.Dimension;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
     
    import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.JPanel;
     
    public class Fenetre extends JFrame{
     
    	private JPanel JP_outil = new JPanel(); //partie zone d'outils a cliquer
    	private JPanel JP_dynamic = new JPanel();//partie zone dynamique selon l'action demander
     
    	private JButton JB_creation = new JButton("creation"); //bouton envoyer
    	private JButton JB_modif = new JButton("modification");//bouton modifier
    	private JButton JB_find = new JButton ("rechercher");
     
    	//on crée un seul JLabel qui affichera le message
    	private JLabel message = new JLabel();
     
    	public Fenetre()
    	{
    		this.zone();
    		this.setVisible(true); //n'a besoin de n'être appelé qu'une seule fois
    		event(); // appèle la méthode qui va créer les listener.
    	}
     
    	public void zone()
    	{
    		this.setTitle("Repertoire Adresse");
    		this.setSize(800,600);
    		this.setLayout(new BorderLayout());//on choisi un parton layout
    		this.getContentPane().add(JP_outil,BorderLayout.WEST);//partie outil a gauche
    		this.getContentPane().add(JP_dynamic,BorderLayout.CENTER); //partie dynamique le reste
     
    		JP_outil.setBackground(new Color(251,222,150)); //couleur jaune claire
    		JP_outil.setPreferredSize(new Dimension(200,200));//couleur vert
     
    		JP_outil.add(JB_creation);//ajout bouton creation
    		JP_outil.add(JB_modif);//bouton modifier
    		JP_outil.add(JB_find);//trouver
     
    		JP_dynamic.setBackground(new Color(231,247,218));
    		JP_dynamic.add(message);
    	}
     
    	//ici on créer les listener pour tes deux boutons.
    	public void event() {
    			this.JB_creation.addActionListener(new ActionListener() {
    				public void actionPerformed(ActionEvent e) {
    					start_creation();
    				}
    			});
     
    			this.JB_modif.addActionListener(new ActionListener() {
    				public void actionPerformed(ActionEvent e) {
    					start_modif();
    				}
    			});
     
    			this.JB_find.addActionListener(new ActionListener() {
    				public void actionPerformed(ActionEvent e) {
    					start_find();
    				}
    			});
    	}
     
    	//méthode appelé lors du click sur le bouton envoyer
    	public void start_creation(){
    		this.message.setText("on demande envoyer");
    	    System.out.println("on demande envoyer");
    	}
     
    	//méthode appelé lors du click sur le bouton modifier
    	public void start_modif(){
    		this.message.setText("on demande modifier");
    	    System.out.println("on demande modifier");
    	}
     
    	//méthode appelé lors du click sur le bouton modifier
    	public void start_find(){
    		this.message.setText("on demande rechercher");
    	    System.out.println("on demande rechercher");
    	}
    	//petit main rapide pour le test de ta fenetre
    	 public static void main(String[] args) {
    	        new Fenetre();
     
    	    }
     
    }
    c'est beaucoup facile a lire comme cela ?
    pour 3 actions différente je peux crée 3 class? (1 pour chaque action?)

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 4
    Dernier message: 23/01/2012, 11h42
  2. [Conception] Utiliser un tableau, est-ce grave docteur?
    Par Fabrice ROUXEL 1 dans le forum Webdesign & Ergonomie
    Réponses: 6
    Dernier message: 03/04/2007, 14h43
  3. Est ce que Acces est le bon SGBD a utiliser dans mon cas?
    Par Isabelle27 dans le forum Modélisation
    Réponses: 5
    Dernier message: 21/03/2007, 21h40
  4. Réponses: 3
    Dernier message: 11/10/2006, 14h53
  5. Quel est le bon usage des fichiers "*.bpk" ?!
    Par bnadem35 dans le forum C++Builder
    Réponses: 3
    Dernier message: 12/09/2006, 17h31

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