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 :

Ajout d'un élément saisi dans un JTable


Sujet :

Composants Java

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2015
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2015
    Messages : 30
    Points : 17
    Points
    17
    Par défaut Ajout d'un élément saisi dans un JTable
    bonjour !
    j'aimerai solliciter votre aide


    je fais l'entrée de donnée pour qu'il s'affiche sur ma jTable .quand je click sur ajouter mon element n'apparaît pas sur ma table.
    aussi j'aimerai utiliser ma méthode placer qui ajoute les elements a mon arrayList
    voici mon code
    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
     
    JButton btnNewButton = new JButton("Ajouter");
    		panelBas1.add(btnNewButton);
    		//Ajout un element dans l'arraylist apres apui du bouton ajouter
    		btnNewButton.addActionListener(new ActionListener() {
    			public void actionPerformed(ActionEvent arg0) {
    				String prop_nom = saisieNom.getText();
    				String prop_prenom = saisiePrenom.getText();
    				String prop_tele = saisieTelephone.getText();
    				String prop_addr = saisieAdresse.getText();
     
    				Proprietaire prop = new Proprietaire(prop_nom, prop_prenom, prop_tele, prop_addr);
    				String espece = "";
    				if(rdbtnCanin.isSelected()) espece = "Canin";
    				else if (rdbtnNewRadioButton.isSelected()) espece = "FÈlin";
    				else espece = "Autre";
     
     
    				String nom_de_patient = textField.getText();
    				String age_de_patient = textField_1.getText();
    				String lurgence =  textField_2.getText();
    				//enregistre priorite comme string
    				String priorite_en_string = comboBox.getSelectedItem().toString();
    				//convertir string a int
    				int priorite = Integer.parseInt(priorite_en_string);
    				Patient nouveaux = new Patient(nom_de_patient, age_de_patient, espece, lurgence, priorite, prop);
    				DefaultTableModel model = (DefaultTableModel) new FenetreRecherchePatients().tablePatients.getModel();
    			//	model.addRow(new Object[]{new GestionUrgenceCliniqueVeterinaire().placerPatient();});	
    				model.addRow(new Object[]{nouveaux});
     
     
    			}
    		});

    ma méthode pour placer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    public void placerPatient(Patient unPatient) {
     
    		listePatients.placer(unPatient);
     
    	}

  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,

    Ton souci vient de cette ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DefaultTableModel model = (DefaultTableModel) new FenetreRecherchePatients().tablePatients.getModel();
    Tu crées une nouvelle fenêtre, et tu en récupères un modèle de JTable, auquel tu ajoutes ta ligne. Ensuite la fenêtre est détruite.
    C'est le modèle de la table de ta fenêtre auquel tu dois ajouter la ligne.

    Le bouton btnNewButton est bien dans cette fenêtre, de classe FenetreRecherchePatients, n'est-ce pas ?
    Donc il suffit de faire DefaultTableModel model = (DefaultTableModel)tablePatients.getModel(); à la place de la ligne ci-dessus.

    En revanche, tu n'en dis pas assez sur listePatients pour répondre à l'autre question. C'est quoi ce listePatients, c'est une variable de quelle classe, elle est déclarée où ? Et tu voudrais que en "plaçant" le patient dans cette instance, ta JTable se mette à jour, c'est ça ?
    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
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2015
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2015
    Messages : 30
    Points : 17
    Points
    17
    Par défaut
    oui je voudrais qu'a chaque fois que j'ajoute un Patient que mon jTable ce met à jour.
    ma methode placerPatients se trouve dans une autre classe .
    une Partie de ma classe ou se trouve ma méthode PlacerPatients
    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
     
     
    public class GestionUrgenceCliniqueVeterinaire {
    	private List<Patient> uneListe;
     
    	// La liste des patients
    	private FileAttenteTda<Patient> listePatients;
     
    	/**
             * Constructeur sans argument qui crÈe une liste de patients vide.
             */
    	public GestionUrgenceCliniqueVeterinaire() {
    		listePatients = new FileAttenteImpl<Patient>();
    	}
    	/**
             * Constructeur avec argument qui crÈe une liste de patients sous forme d'arrayList.
             */
    	public GestionUrgenceCliniqueVeterinaire(Patient patient) {
    		uneListe = new ArrayList<Patient>();
    	}
     
    	/**
     
             * Place un patient dans la file des patients selon sa prioritÈ.
             * 
             * @param unPatient Le patient ‡ ajouter
             */
    	public void placerPatient(Patient unPatient) {
     
    		listePatients.placer(unPatient);
     
    	}

  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
    Ok, donc aucun lien entre le modèle de la JTable et la classe GestionUrgenceCliniqueVeterinaire. Il faut donc combiner les deux ajouts dans le même code.

    Là où tu as écrit ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    //	model.addRow(new Object[]{new GestionUrgenceCliniqueVeterinaire().placerPatient();});	
    model.addRow(new Object[]{nouveaux});
    La première ligne, que tu as commentée, tu ne peux pas l'écrire parce que placerPatient() ne retourne rien (du type void). En plus, c'est le même souci avec le new FenetreRecherchePatients().tablePatients.getModel(). Tu fais un new GestionUrgenceCliniqueVeterinaire(), ça crée une nouvelle instance, qui n'a aucun lien avec les autres. Comme cette classe contient une liste, je suppose que l'intention est de cumuler les différents patients; donc il ne faut pas créer une nouvelle instance à chaque ajout, il faut utiliser la même pour chaque ajout. Et donc avec une référence vers cette instance dans ta fenêtre pour pouvoir le faire.

    La second ligne pose un problème : le DefaultTableModel stocke les différentes valeurs dans un tableau. En faisant ce que tu fais, ça stocke le patient entier dans une des cases du tableau, au lieu de stocker chaque information dans chaque case.

    La première solution serait d'écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Patient nouveaux = new Patient(nom_de_patient, age_de_patient, espece, lurgence, priorite, prop);
    DefaultTableModel model = (DefaultTableModel)tablePatients.getModel(); 	
    model.addRow(new Object[]{nom_de_patient, age_de_patient, espece, lurgence, priorite, prop});
    L'autre solution serait de faire un modèle spécifique (et ta classe GestionUrgenceCliniqueVeterinaire pourrait le devenir) .

    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
    public class GestionUrgenceCliniqueVeterinaire extends AbstractTableModel {
     
    	public enum Colonne {
    		NOM_PATIENT("Nom du patient", String.class),
    		AGE_PATIENT("Age du patient", String.class), // c'est ce que je vois dans ton code, mais ce serait plus logique d'avoir un nombre plutôt qu'une chaine de caractère
    		ESPECE("Espece", String.class),
    		//etc je mets pas tout tu complèteras
    		;
    		private final String colName;
    		private final Class<?> colClass;
                    /**
                     * 
                     * @param name nom de la colonne
                     * @param colClass type java de la donnée
                     */
     
    		private Colonne(String name, Class<?> colClass) {
    			this.colName=colName;
    			this.colClass=colClass;
    		}
    	}
     
    	private List<Patient> uneListe;
     
    	public GestionUrgenceCliniqueVeterinaire() {
    		uneListe = new ArrayList<Patient>();
    	}
     
    	@Override
    	public int getColumnCount() {
    		return Colonne.values().length;
    	}
     
    	@Override
    	public int getRowCount() {
    		return uneListe.size();
    	}
     
    	@Override
    	public Class<?> getColumnClass(int col) {
    		return Colonne.values()[col].colClass;
    	}
     
    	public String getColumnName(int col) {
    		return Colonne.values()[col].colName;
    	}
     
    	@Override
    	public boolean isCellEditable(int arg0, int arg1) {
    		return false;
    	}
     
    	public void addPatient(Patient patient) {
    		int index = uneListe.size();
    		uneListe.add(patient);
    		fireTableRowsInserted(index, index); // averti la jtable qu'il y a une nouvelle ligne
    	}
     
    	@Override
    	public Object getValueAt(int row, int col) {
    		Patient patient = uneListe.get(row); // le patient à la position row
    		switch(Colonne.values()[col]) {
    		case NOM_PATIENT:
    			return patient.getNom();
    		case AGE_PATIENT:
    			return patient.getAge();
    		case ESPECE:
    			return patient.getEspece();
    		default:
    			return null;
    		}
    	}
     
     
    }
    Ainsi, tu crées ta JTable comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    new JTable(new GestionUrgenceCliniqueVeterinaire());
    Et le code d'ajout devient simplement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Patient nouveaux = new Patient(nom_de_patient, age_de_patient, espece, lurgence, priorite, prop);
    GestionUrgenceCliniqueVeterinaire  model = (GestionUrgenceCliniqueVeterinaire ) tablePatients.getModel();
    model.addPatient(nouveaux);
    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
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2015
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2015
    Messages : 30
    Points : 17
    Points
    17
    Par défaut
    super j'ai réussi ajouter
    une dernier question
    je fais la recherche de l'élément que j'ai ajouté je le trouve mais quand je met un element qui n'est pas sur ma liste j'aimerai appélé
    joptionPane pour qu'il affiche qu'il n'a pas trouvé l'identifiant qui est une variable patient
    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
     
     
    btnRechercher.addActionListener(new ActionListener() {
    			public void actionPerformed(ActionEvent arg0) {
    				JOptionPane panneauErreur = new JOptionPane();
    				String mont_de_recherche = textField.getText();
     
    				int row_count = tablePatients.getRowCount();
    				DefaultTableModel model = (DefaultTableModel) tablePatients.getModel();
    				for(int i = 0; i < row_count; i++){
    					String ident = (String) model.getValueAt(i, 0);//priorité(i,2)
    					if (ident.matches(mont_de_recherche))
    						tablePatients.setRowSelectionInterval(0, i);
     
    					else{
    						//j'aimerai afficher le message d'erreur quand on trouve pas le patient mais une fois et ajouter la variable identifiant
                                                   //automatiquement
    						//JOptionPane.showMessageDialog(null,
    					    //		"aucun patient avec l'identifiant ",
    					    //		"Erreur",
    					    	//	JOptionPane.ERROR_MESSAGE);
    					}
     
     
    				}

  6. #6
    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
    Il faudrait faire le test seulement lorsque la boucle est terminé, sinon, si c'est la 42ième ligne qui matche, tu vas avoir 41 fois le JOptionPane qui s'ouvre !

    par 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
     
    boolean found = false;
    table.getSelectionModel().clearSelection(); // pour supprimer la sélection actuelle
    for(int i = 0; i < row_count; i++){
    					String ident = (String) model.getValueAt(i, 0);//priorité(i,2)
    					if (ident.matches(mont_de_recherche)) {
    						found=true;
                                                     table.getSelectionModel().addSelectionInterval(i,i); // ajoute la ligne à la sélection courante
                                            }
    )
     
    if ( !found ) {
    JOptionPane.showMessageDialog(null,
    	"aucun patient avec l'identifiant",
       "Erreur",
       JOptionPane.ERROR_MESSAGE);
    }
    Comme tu utilises matches, tu peux avoir plusieurs lignes trouvées, donc j'utilise la méthode qui permet de cumuler les sélections. Si on faisait un test d'égalité, on pourrait sortir de la boucle avec une break dès qu'on a trouvé quelque chose.
    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.

Discussions similaires

  1. [CakePHP] Ajout d'un élément UNIQUEMENT dans une page spécifique? (condition)
    Par caema dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 29/09/2013, 12h28
  2. [XL-2003] Anomalie lors de l'ajout d'un élément calculé dans un TCD
    Par ced92 dans le forum Conception
    Réponses: 4
    Dernier message: 25/07/2011, 11h24
  3. ajouter un champ de saisie dans mon formulaire
    Par mademoizel dans le forum Général JavaScript
    Réponses: 13
    Dernier message: 09/04/2011, 10h54
  4. ajout/suppression d'une ligne dans une jTable
    Par amelA dans le forum Composants
    Réponses: 1
    Dernier message: 16/05/2007, 08h42
  5. Saisie dans une JTable
    Par Ramage03 dans le forum Composants
    Réponses: 3
    Dernier message: 21/04/2006, 17h01

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