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

Composants Java Discussion :

L'apparition d'un nouveau JTextField lors de clique sur un bouton


Sujet :

Composants Java

  1. #1
    Inactif  
    Femme Profil pro
    Étudiant
    Inscrit en
    Février 2014
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 33
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2014
    Messages : 58
    Points : 53
    Points
    53
    Par défaut L'apparition d'un nouveau JTextField lors de clique sur un bouton
    Bonjour,
    je suis entrain de développer une application java sous Eclipse.Mon problème c'est que j'ai une interface qui contient un bouton"ajouter".Si on clique sur ce dernier un nouveau JtextField sera ajouté au fenêtre.par la suite les valeurs entrées dans les JTextFields ajoutées seront sauvegardées dans un fichier xml.j'ai commencé a développer mais rien ne s'affiche.merci de m'aider
    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
     import java.awt.Color;
     
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
     
    import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JPanel;
    import javax.swing.JTextField;
     
     
    public class DynamicJtext extends JPanel {
     
    public void afficher ()
    {
     
        JButton b= new JButton("+");
    	b.addActionListener(new ActionListener(){
     
    		@Override
    		public void actionPerformed(ActionEvent e) {
    			// TODO Auto-generated method stub
    			JTextField textaille = new JTextField("");
     
    		   int taille=Integer.parseInt(textaille.getText());
    		           for(int i=0;i<taille;i++){
    		        	   JTextField c=new JTextField();
    		              c.setText("");
    		           c.setSize(50, 50);
     
    		           c.setLocation(20+50*i,80);
    		          JPanel jPanel1= new JPanel();
    		           jPanel1.add(textaille);
    		           jPanel1.add(c);
    		           jPanel1.revalidate();
    		           jPanel1.repaint();
     
    		           c.setBackground(Color.red);
    		           JFrame frame= new JFrame();
    		           frame.add(jPanel1);
                       frame.setSize(400,500);
    		           frame.pack();
    		           frame.setVisible(true);
     
    		       }
     
    		}
     
     
    	});
     
     
    }
    public static void main(String[] args)
    {
    	DynamicJtext dt = new DynamicJtext();
    	dt.afficher();
    }
    }

  2. #2
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Salut,

    Tout composant Swing doit être placé dans un container qui lui doit être placé dans une fenêtre (JFrame par exemple) pour être vu. Ton bouton "+" est placé nulle part, donc il est invisible. Je ne suis pas sûr de ce que tu cherches à faire exactement :

    • Avoir une fenêtre avec un bouton + qui ajoute des champs de saisie dans cette même fenêtre ;
    • Avoir un bouton "+" dans une fenêtre qui ouvre une autre fenêtre avec des champs de saisie (ce que ton programme ferait si ton bouton "+" était affiché quelque part, et que l'erreur dont je parle ensuite est corrigée) ;
    • Avoir une fenêtre avec un bouton "+" qui ouvre un formulaire modal de saisie (auquel cas il faudrait plutôt utiliser un JDialog qu'une JFrame pour le formulaire).


    Quoi qu'il en soit, on ne positionne pas ni ne dimensionne ses composants à la main (setLocation()/setSize()) lorsqu'ils sont placés dans un conteneur qui a un LayoutManager (ce qui est le cas par défaut du JPanel). D'ailleurs, on laisse de préférence le Layout Manager s'occuper de ça, ce qui permet d'avoir des formulaires adaptables aux contraintes de l'utilisateur (taille d'écran) et aux souhaits de l'utilisateur (taille de polices, taille de fenêtre, etc.). A noter que revalidate() et repaint() ne sont nécessaires qu'après que la fenêtre soit rendue visible (par exemple dans premier cas de ma liste ci-avant) : avant, c'est inutile.

    Il y a par ailleurs une erreur qui provoquera une NumberFormatException dans ton code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    JTextField textaille = new JTextField("");
     
    int taille = Integer.parseInt(textaille.getText());
    Tout d'abord tu créés un champ de saisie de type "texte", avec une valeur vide (chaîne vide), puis tu convertis ce qu'il y a dans le champ (donc une chaîne vide) en int, ce qui va planter, parce qu'une chaîne vide ne peut être convertie en int. Il y a manifestement un problème de séquence dans ton code. Ce champ de saisie devrait être dans la même fenêtre que le bouton "+" à priori.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  3. #3
    Inactif  
    Femme Profil pro
    Étudiant
    Inscrit en
    Février 2014
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 33
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2014
    Messages : 58
    Points : 53
    Points
    53
    Par défaut reponse
    Merci Joel.drigo pour votre réponse et votre explication détaillée.
    Mon but c'est d'avoir un Jframe avec un bouton qui ajoute des champ de saisie dans la même fenêtre.

  4. #4
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Un exemple :
    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
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    import java.awt.BorderLayout;
    import java.awt.GridBagConstraints;
    import java.awt.GridBagLayout;
    import java.awt.Insets;
    import java.awt.event.WindowAdapter;
    import java.awt.event.WindowEvent;
    import java.util.ArrayList;
    import java.util.Collections;
    import java.util.List;
    import java.util.stream.Collectors;
     
    import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.JPanel;
    import javax.swing.JScrollPane;
    import javax.swing.JSpinner;
    import javax.swing.JTextField;
    import javax.swing.SpinnerNumberModel;
     
    public class DynamicFormExample extends JPanel {
     
    	/**
             * 
             */
    	private static final long serialVersionUID = 1L;
     
    	private List<JTextField> textFields = new ArrayList<>(); // une liste pour retrouver ses champs
     
    	public DynamicFormExample() {
    		super(new BorderLayout());
     
    		// création des composants statiques
    		JPanel buttonPanel = new JPanel(new BorderLayout()); // un panel pour le champ de saisie du nombre et le bouton +
    		JSpinner spinner = new JSpinner(new SpinnerNumberModel(5,0,10000,10)); // un champ pour saisir le nombre de champs à ajouter
    		JButton buttonAdd = new JButton("+");
    		buttonPanel.add(spinner, BorderLayout.CENTER);
    		buttonPanel.add(buttonAdd, BorderLayout.EAST);
    		add(buttonPanel, BorderLayout.NORTH);
    		JPanel mainPanel = new JPanel(new GridBagLayout()); // un panel pour ajouter les champs dynamiquement
    		JPanel containerPanel = new JPanel(new BorderLayout()); // on a besoin d'un panel intermédiaire pour que les champs soient plaqués en haut de la fenêtre (le + simple pour le faire)
    		containerPanel.add(mainPanel, BorderLayout.NORTH);
    		add(new JScrollPane(containerPanel), BorderLayout.CENTER); // on encapsule le panel des champs dans un scrollpane pour qu'on puisse accèder aux champs qui sont dans la partie non visible de la fenêtre
     
    		buttonAdd.addActionListener(e-> addButtons(mainPanel, (Integer)spinner.getValue()));
     
    	}
     
    	private void addButtons(JPanel panel, int number) {
    		if ( number>0 ) {
    			int count = panel.getComponentCount()/2; // on compte le nombre de composants déjà ajoutés
     
    			GridBagConstraints gbc = new GridBagConstraints(0, GridBagConstraints.RELATIVE, 1, 1, 0, 0, GridBagConstraints.CENTER, GridBagConstraints.NONE, new Insets(2,4,2,4), 0, 0);
    			for(int i=0; i<number; i++) {
     
    				JLabel label = new JLabel(getLabelText(count+i)); // une étiquette pour le champ
    				gbc.gridx = 0;
    				gbc.weightx = 0; 
    				gbc.fill = GridBagConstraints.NONE;
    				panel.add(label, gbc);
     
    				JTextField textField = new JTextField();  // le champ
    				textFields.add(textField);
    				gbc.gridx = 1;
    				gbc.weightx = 1; 
    				gbc.fill = GridBagConstraints.HORIZONTAL;
    				panel.add(textField, gbc);
     
    			}
    			// on a modifié l'UI alors qu'elle était déjà affichée : on revalide (pour le layout) et on repeint (pour l'affichage)
    			panel.revalidate();
    			panel.repaint();
    		}
    	}
     
    	/**
             * Cette méthode permet de récupérer toutes les valeurs saisies dans chaque champ (dans l'ordre)
             * @return
             */
    	public List<String> getTexts() {
    		return Collections.unmodifiableList(textFields.stream().map(f->f.getText()).collect(Collectors.toList()));
    	}
     
    	/**
             *  méthode pour déterminer le nom du champ d'index index
             * @param index
             * @return
             */
    	protected String getLabelText(int index) {
    		return "Champ " + index;
    	}
     
    	public static void main(String[] args) {
     
                    // une fenêtre pour afficher l'UI
    		JFrame frame = new JFrame("Exemple");
    		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
     
                    // on créé le composant et on l'ajoute à la fenêtre pour l'afficher
    		DynamicFormExample formExample = new DynamicFormExample();
    		frame.add(formExample);
     
    		// pour démo, on affiche les valeurs saisies dans les champs à la fermeture de la fenêtre
    		frame.addWindowListener(new WindowAdapter() {
    			@Override
    			public void windowClosing(WindowEvent e) { 
    				int i=1;
    				for(String text : formExample.getTexts()) {
    					System.out.printf("Texte %d : %s%n",i++, text);
    				}
    			}
    		});
     
                    // on affiche la fenêtre
    		frame.setSize(400, 600);
    		frame.setLocationRelativeTo(null);
    		frame.setVisible(true);
     
     
    	}
     
    }
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  5. #5
    Inactif  
    Femme Profil pro
    Étudiant
    Inscrit en
    Février 2014
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 33
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2014
    Messages : 58
    Points : 53
    Points
    53
    Par défaut
    Merci Joel.Drigo.je vais le rendre compatible avec la version JDK de mon eclipse et j'espere que tt va

  6. #6
    Inactif  
    Femme Profil pro
    Étudiant
    Inscrit en
    Février 2014
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 33
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2014
    Messages : 58
    Points : 53
    Points
    53
    Par défaut
    S'il vous plait quelle est la version de JDK que vous avez utilisé?j'utilise JDK 8 mais plusieurs erreurs s'affichent.

  7. #7
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    C'est Java 8 que j'ai utilisé. Quelles erreurs as-tu ?
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  8. #8
    Inactif  
    Femme Profil pro
    Étudiant
    Inscrit en
    Février 2014
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 33
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2014
    Messages : 58
    Points : 53
    Points
    53
    Par défaut
    les erreurs sont au niveau de ces 2 lignes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    buttonAdd.addActionListener(e-> addButtons(mainPanel, (Integer)spinner.getValue()));
    la variable e est inconnue
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    return Collections.unmodifiableList(textFields.stream().map(f->f.getText()).collect(Collectors.toList()));
    	}
    la meme chose pour la variable f

  9. #9
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Donc tu n'es pas en Java 8, puisque les lambdas ne semblent pas reconnues. Ton Eclipse ou ton projet n'est pas configuré pour travailler en Java 8.

    Il faut tout d'abord aller dans Window / Preferences, puis Java / Installed JREs : vérifier que le jdk1.8 est bien dans la liste des Installed JREs, et coché (pour qu'il soit par défaut pour tous les projets). Puis Java / Installed JREs / Execution environnement, sélectionner JavaSE-1.8 et cocher le jdk1.8.

    Puis dans le projet, sélectionner l'item JRE System Library, menu contextuel Properties, puis choisir dans la combo le JavaSE1.8 (ou le Workspace default si le jdk8 est coché).
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  10. #10
    Inactif  
    Femme Profil pro
    Étudiant
    Inscrit en
    Février 2014
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 33
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2014
    Messages : 58
    Points : 53
    Points
    53
    Par défaut
    c'est résolu merci bien

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 13/01/2015, 09h13
  2. Problème pour réaliser une action lors du clique sur le bouton menu ou back
    Par FunckyWarrior dans le forum Composants graphiques
    Réponses: 2
    Dernier message: 29/05/2013, 14h39
  3. Réponses: 2
    Dernier message: 18/10/2011, 17h10
  4. apparition photo lors du clique sur le texte
    Par yamaha12 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 14/05/2009, 14h45
  5. JSP : Récupérer valeur lors du clic sur un bouton
    Par ze veritable farf dans le forum Servlets/JSP
    Réponses: 12
    Dernier message: 11/04/2006, 11h16

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