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 :

Créer un JLabel et JComboBox quand on appuie sur un bouton


Sujet :

AWT/Swing Java

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 27
    Points : 11
    Points
    11
    Par défaut Créer un JLabel et JComboBox quand on appuie sur un bouton
    Voila j'ai donc mon code principal de ma fenetre :

    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
    import java.awt.*;
    import javax.swing.*;
     
    public class GestionSQLFenetre extends JFrame{
     
    	private JLabel label,label2;
    	private JComboBox liste,liste2;
     
        public GestionSQLFenetre() {
        	super();
     
        	build();
        }
        private void build(){
        	setTitle("Gestion de la base de donnée"); //On donne un titre à l'application
    		setSize(400,400); //On donne une taille à notre fenêtre
    		setLocationRelativeTo(null); //On centre la fenêtre sur l'écran
    		setResizable(true); //On interdit la redimensionnement de la fenêtre
    		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //On dit à l'application de se fermer lors du clic sur la croix
    		setContentPane(buildContentPane());
       	}
       	private JPanel buildContentPane(){
       		// Creation d'un contenu Panel
    		JPanel panel = new JPanel();
    		panel.setLayout(new FlowLayout());
     
    		// Création on ajoute un texte
    		label = new JLabel("Selection de la gestion désirée :");
    		panel.add(label); //On ajoute le texte au panel
     
    		// Appel de la liste
    		liste = new JComboBox(new ListeGestion());
    		panel.add(liste);
     
    		// Création d'un bouton du nom de bouton1
    		JButton bouton1 = new JButton(new SelectionGestion(this, "Executer"));
    		panel.add(bouton1); //On ajoute le bouton au panel
     
    		// Création on ajoute un texte
    		label2 = new JLabel("");
    		panel.add(label2); //On ajoute le texte au panel
     
    		return panel; //On retourne le panel
       	}
       	public ListeGestion getModelGestion(){
    		return (ListeGestion)liste.getModel(); //On retourne La liste
    	}
    	public JLabel getLabel1(){
    		return label; //On retourne le texte
    	}
    	public JLabel getLabel2(){
    		return label2; //On retourne le texte
    	}
    }
    Et la class de mon bouton :
    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
    import java.awt.event.ActionEvent;
    import java.awt.*;
    import javax.swing.*;
     
     
    public class SelectionGestion extends AbstractAction {
    	private GestionSQLFenetre fenetre;
     
        public SelectionGestion(GestionSQLFenetre fenetre, String texte) {
        	super(texte);
     
    		this.fenetre = fenetre;
        }
     
        public void actionPerformed(ActionEvent e) { 
     
    		//Action lors du clic sur le bouton1
     
    		String gestion = fenetre.getModelGestion().getSelectedGestion();//On récupère le signe de l'opération dans une chaine
     
    		if ("Gestion Etudiant".equals(gestion)){
     
     
     
    		}
        }
     
    }
    Donc voila quand on clic sur le bouton et que Gestion = "GestionEtudiant", je voudrais créer un nouvo label de texte et une liste JComboBox mais je ne vois pas comment modifier le contenu de ma page étant donner que que le buildContentPane() est sur mon code principal.
    Je Débute vraiment donc allez y doucement ^^

    Merci d'avance

  2. #2
    Modérateur
    Avatar de dinobogan
    Homme Profil pro
    ingénieur
    Inscrit en
    Juin 2007
    Messages
    4 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 4 073
    Points : 7 163
    Points
    7 163
    Par défaut
    SelectionGestion possède "fenetre", instance de GestionSQLFenetre. Il te suffit d'ajouter une méthode public dans GestionSQLFenetre afin de gérer l'ajout des composants :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public void ajoutComposant()
    {
      ...
    }
    Dans "SelectionGestion#actionPerformed", tu appelles "fenetre.ajoutComposant".

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 27
    Points : 11
    Points
    11
    Par défaut
    Citation Envoyé par dinobogan Voir le message
    SelectionGestion possède "fenetre", instance de GestionSQLFenetre. Il te suffit d'ajouter une méthode public dans GestionSQLFenetre afin de gérer l'ajout des composants :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public void ajoutComposant()
    {
      ...
    }
    Dans "SelectionGestion#actionPerformed", tu appelles "fenetre.ajoutComposant".
    Ouai ok je vois mais le soucis c'est que si j'appelle la fonction ajoutComposant() est-ce qu'elle va modifier mon buildContentPane qui est le conenu de la page.

  4. #4
    Modérateur
    Avatar de dinobogan
    Homme Profil pro
    ingénieur
    Inscrit en
    Juin 2007
    Messages
    4 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 4 073
    Points : 7 163
    Points
    7 163
    Par défaut
    C'est à toi de mettre le code que tu veux dans "ajoutComposant". Tu peux y faire décoller une fusée, modifier les composants de la JFrame, ajouter des panels, ce que tu veux. Il n'y a pas de lien avec buildContentPane.
    Je ne comprends pas ce que tu ne comprends pas

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 27
    Points : 11
    Points
    11
    Par défaut
    Citation Envoyé par dinobogan Voir le message
    C'est à toi de mettre le code que tu veux dans "ajoutComposant". Tu peux y faire décoller une fusée, modifier les composants de la JFrame, ajouter des panels, ce que tu veux. Il n'y a pas de lien avec buildContentPane.
    Je ne comprends pas ce que tu ne comprends pas
    Non mais ca j'ai compris mais regarde il faut bien ajouter le label au JPanel et puis dans le buildContentPane

    Toute ma pages est définir dans :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    private JPanel buildContentPane(){
     
    		JPanel panel = new JPanel();
    		panel.setLayout(new FlowLayout());
                    //...
    }
    Si je fais un comme tu a dis

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    public void ajoutComposant()
    	{
      		// Création on ajoute un texte
    		label2 = new JLabel("TEST");
                    panel.add(label2);
    	}
    Ben c'est cool j'appelle la class :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    public void actionPerformed(ActionEvent e) { 
     
    		//Action lors du clic sur le bouton1
     
    		String gestion=fenetre.getModelGestion().getSelectedGestion();
     
    		if ("Gestion Etudiant".equals(gestion)){
    			fenetre.ajoutComposant;
    		}
        }
    Et bien cela ne marche pas pour intégré des truc a la page il faut les mettre dans private JPanel buildContentPane(){}

    Donc je comprend pas comment tu veux faire.

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 27
    Points : 11
    Points
    11
    Par défaut
    Si vous pouviez me donner une explication très simple cela serai niquel ^^

  7. #7
    Modérateur
    Avatar de dinobogan
    Homme Profil pro
    ingénieur
    Inscrit en
    Juin 2007
    Messages
    4 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 4 073
    Points : 7 163
    Points
    7 163
    Par défaut
    Citation Envoyé par maxkarting25 Voir le message
    Et bien cela ne marche pas pour intégré des truc a la page il faut les mettre dans private JPanel buildContentPane(){}

    Donc je comprend pas comment tu veux faire.
    Ah oui, ok, ouhlalala, je comprends maintenant ce que tu ne comprenais pas
    Je te propose d'ajouter le JLabel et le Combobox via buildContentPane dès le départ. Tu les places dans un JPanel qui est une donnée membre de ta classe "GestionSQLFenetre". Tu appliques sur le JPanel la méthode "setVisible( false )".
    Dnas la méthode "ajoutComposant" (qui porte maintenant très mal son nom) tu feras :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public void ajoutComposant()
    {
      monPanel.setVisible( true );
    }
    Reste à voir comment le Layout va gérer le JPanel invisible puis visible. Il y aura peut-être des ajustements à effectuer.

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 27
    Points : 11
    Points
    11
    Par défaut
    Oui c'est une solution que j'avais supposé mais le problème c'est que de rendre l'élement invisible n'est pas comme si il n'existait pas, il prend quand même la place qu'il devrait prendre en temps normal.

    Donc il n'y a vraiment pas moyen de faire autrement de créer le Jlabel au moment ou je veux ??

    De donner tout les élement qui s'affiche de base dans le via buildContentPane

    et puis apre de créer des élement quand je l'ai appelle ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    public void ajoutComposant()
    {
                    JLabel label = new JLabel("Selection de la gestion désirée :");
    		panel.add(label);
    }
    et mettre dans min instance de bouton

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
        public void actionPerformed(ActionEvent e) { 
     
    		//Action lors du clic sur le bouton1
     
    		String gestion = fenetre.getModelGestion().getSelectedGestion();//On récupère le signe de l'opération dans une chaine
     
    		if ("1".equals(gestion)){
    			fenetre.ajoutComposant();
    		}
        }
    Je sais que cette facon ne fonctionne pas mais je voulais savoir comment il fallait structurer le code pour faire comme cela.
    Ca serai illogique de pas pouvoir créer un élement quand on appuye sur un bouton instancier dans une class a part

    Je te remontre la structure de mes 2 codes :

    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
    import java.awt.*;
    import javax.swing.*;
     
    public class GestionSQLFenetre extends JFrame{
     
    	private JLabel label,label2;
    	private JComboBox liste,liste2;
     
        public GestionSQLFenetre() {
        	super();
     
        	build();
        }
        private void build(){
        	        setTitle("Gestion de la base de donnée");
    		setSize(400,400);
    		setLocationRelativeTo(null)
    		setResizable(true);
    		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    		setContentPane(buildContentPane());
       	}
       	private JPanel buildContentPane(){
     
    		JPanel panel = new JPanel();
    		panel.setLayout(new FlowLayout());
     
    		label = new JLabel("Selection de la gestion désirée :");
    		panel.add(label); //On ajoute le texte au panel
     
    		liste = new JComboBox(new ListeGestion());
    		panel.add(liste);
     
    		JButton bouton1 = new JButton(new SelectionGestion(this,                  "Executer"));
    		panel.add(bouton1);
     
    		return panel;
       	}
       	public ListeGestion getModelGestion(){
    		return (ListeGestion)liste.getModel(); //On retourne La liste des signe
    	}
    	public JLabel getLabel1(){
    		return label;
    	}
    	public JLabel getLabel2(){
    		return label2;
    	}
    	public void ajoutComposant(){
     
    		// DONC ICI FAUDRAI CREER L'ELEMENT POUR L'AFFICHER DANS LE CONTENTPANE
     
    	}
    }
    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
    import java.awt.event.ActionEvent;
    import java.awt.*;
    import javax.swing.*;
     
     
    public class SelectionGestion extends AbstractAction {
    	private GestionSQLFenetre fenetre;
     
        public SelectionGestion(GestionSQLFenetre fenetre, String texte) {
        	super(texte);
     
    		this.fenetre = fenetre;
        }
     
        public void actionPerformed(ActionEvent e) { 
     
    		String gestion = fenetre.getModelGestion().getSelectedGestion();
     
    		if ("1".equals(gestion)){
     
    			// ICI ON CLIQUE SUR LE BOUTON DONC LANCER LA FUNCTION AJOUT COMPOSANT
    		}
        }
     
    }
    Tu me sauves si tu sais comment faire ^^

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 27
    Points : 11
    Points
    11
    Par défaut
    J'ai reussi avec les setVisible je te remercie beaucoup !

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 14/09/2012, 20h39
  2. Récupérer le texte d'un entry quand on appuie sur un bouton
    Par drhouse87 dans le forum GTK+ avec C & C++
    Réponses: 7
    Dernier message: 27/12/2011, 14h05
  3. Temps quand on appuie sur un bouton
    Par makflai dans le forum LabVIEW
    Réponses: 0
    Dernier message: 14/07/2010, 12h27
  4. Réponses: 1
    Dernier message: 02/03/2008, 21h34
  5. Comment détecter quand un utilisateur appuie sur le bouton Power ?
    Par Millenod dans le forum API, COM et SDKs
    Réponses: 7
    Dernier message: 22/09/2005, 21h05

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