Cherche spécialiste en jTable java
Corb -
Je chercherai quelqu'un qui pourrai m'aider pour la manipulation d'une jTable. L'ajout de données est faite grâce à un model mais maintenant je dois supprimer une ligne sélectionnée et actualiser la jTable après l'ajout ou la suppression dans la jTable.
Merci pour ceux qui prendront le temps de m'aider.
Ce problème me bloque et ne me permet pas donc d'avancer dans mon projet ce qui est problématique.
Merci d'avance
49 réponses
- 1
- 2
- 3
Le problème porte sur la gestion d'une jTable où l'ajout se fait via un modèle, mais la suppression d'une ligne sélectionnée et l'actualisation de la table après ajout ou suppression restent problématiques. Des éléments de réponse suggèrent d'utiliser DefaultTableModel et de supprimer une ligne via removeRow, tout en étudiant la définition de méthodes comme DeleteResa et le rafraîchissement du modèle. D'autres contributions proposent d'actualiser des composants connexes comme un ComboBox après l'ajout, ou de partager des extraits montrant comment récupérer les colonnes et valeurs pour l'insertion en base. En cas de besoin, il est utile de vérifier le modèle utilisé et la synchronisation entre la JTable et la source de données pour garantir que les mises à jour s'appliquent rapidement.
-
C'est Simple voici un Example:
DefaultTableModel model =(DefaultTableModel)myTable.getModel();
model.removeRow(2);
Tu peux voir Tout l'example ici:
http://sakoba.byethost13.com/2010/11/26/working-with-table/-
-
-
Bonjour,
Si tu cherche une solution alternative permettant d'utiliser facilement une JTable, je te conseille ce site :
http://www.flows-projects.com/?c=Java%20Projects&p=JTableDataSet
Pour télécharger le JTableDataset : http://www.flows-projects.com/?c=download
Tu n'as plus besoin de t'embêter avec le modèle. L'utilisation est plus simple.
Par ex, pour ton problème, ça donnerait ://Récupération de l'id de la ligne sélectionné (indépendant de l'affichage) int selectedId = tableDataSet.getSelectedId(); //Suppression de la ligne dans la table (plus de modèle) tableDataSet.getTableValues().remove(selectedId);
L'initialisation de ta table est bien plus simple avec cette solution (ça prend quelques lignes à peine).
-
-
Je veux voir la fonction qui définit ces instructions:
{rs.getObject("NUMPERSONNE"),rs.getObject("NUMGROUPE"),rs.getObject("RESPONSABILITEMEMBRE"),rs.getObject("DATENAISSANCEMEMBRE"),rs.getObject("NOMPERSONNE"),rs.getObject("PRENOMPERSONNE"),rs.getObject("TITRECIVILITE")});-
private JTable getJTableSup() { if (jTableSup == null) { jTableSup = new JTable(); //DefaultTableModel md = new DefaultTableModel(); md.setColumnIdentifiers(new String []{"Numéro Personne","Numéro Groupe","Responsabilité","Naissance","Nom","Prenom","Civilité"}); /*----------------- c'est juste pr Determiner le nom de la colonne ------------------------- */ System.out.print(md); try { ResultSet rs = Select.ListeMembreNum(); while (rs.next()) { /*---------------------- AJOUT DES LIGNES AU JTABLE --------------------*/ md.addRow(new Object[] {rs.getObject("NUMPERSONNE"),rs.getObject("NUMGROUPE"),rs.getObject("RESPONSABILITEMEMBRE"),rs.getObject("DATENAISSANCEMEMBRE"),rs.getObject("NOMPERSONNE"),rs.getObject("PRENOMPERSONNE"),rs.getObject("TITRECIVILITE")}); } System.out.print(md); } catch (SQLException e) { System.out.println("Erreur d'affichage "); } /*---------------------------------- AFFECTER LE MODEL AU JTABLE avec la methode setmodel ------------*/ jTableSup.setModel(md); jTableSup.setBounds(new Rectangle(90, 381, 439, 284)); jTableSup.setBackground(SystemColor.controlHighlight); } return jTableSup; }
-
-
-
-
Donc j'ai une jTable qui récupère la table personne d'une BDD Oracle(ça sa marche nikel)
Ensuite j'ai un bouton supprimer qui doit supprimer une ligne sélectionnée dans la jTable et ça je n'arrive pas.
J'ai fais un petit code qui je pense n'est pas bon.
Voici le code de la suppression :
//Fonction permettant la suppression d'un membre dans la BDD private void btSupprimer_click() { /* MembreSupprimer sup = (MembreSupprimer)jComboBoxSup.getSelectedItem(); if (sup == null) { JOptionPane.showMessageDialog(null, "Sélectionnez un numéro de membre à supprimer" ); return; } System.out.println("Responsabilité sélectionnée : " + sup);*/ /*if (v.contains(sup)){ JOptionPane.showMessageDialog(this, "blabla" , "Message", JOptionPane.INFORMATION_MESSAGE ); } else{ int option = JOptionPane.showConfirmDialog(this,"voulez-vous vraiment supprimer?","supprimer un membre", JOptionPane.YES_NO_OPTION, JOptionPane.WARNING_MESSAGE); if(option == JOptionPane.OK_OPTION){ Delete.DeleteResa(sup.getnumPersonne()); JOptionPane.showMessageDialog(this, "Suppression effectuée" , "Message", JOptionPane.INFORMATION_MESSAGE );*/ //} //} int colonne = jTableSup.getSelectedColumn(); for( int i = 0; i<colonne; i++ ) { jTableSup.getValueAt(0, colonne); } System.out.print(colonne); try { Delete.DeleteResa(colonne); JOptionPane.showMessageDialog(this, "Suppression effectuée" , "Message", JOptionPane.INFORMATION_MESSAGE ); // btValider.setEnabled(false); } catch(Exception e) { System.out.println("Exception " + e.getMessage()); JOptionPane.showMessageDialog(this, "Suppression effectuée" , "Message", JOptionPane.INFORMATION_MESSAGE ); } //Rafraichir jTable //md.fireTableDataChanged(); }
Vraiment merci sakoba de m'aider
-
-
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question -
-
Essais ça.
import java.awt.event.*;
import java.awt.*;
import javax.swing.*;
import javax.swing.table.*;
public class JTableDelete extends JFrame
{
JTable myTable;
String titre[]={"Villes","Nbr. Habitant"};
Object [][]données={{"Paris","3000000"},{"Berlin","45000000"}};
DefaultTableModel tabModel;
public JTableDelete()
{
JPanel p1=new JPanel();
JPanel p2=new JPanel();
JPanel main=new JPanel();
myTable=new JTable();
JButton add=new JButton("Charger");
JButton del=new JButton("Supprimer");
p1.add(myTable);
p2.add(add);
p2.add(del);
main.add(p1,BorderLayout.NORTH);
main.add(p2,BorderLayout.SOUTH);
add(main);
add.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent evt)
{
remplir();
}
});
del.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent evt)
{
supprimer();
}
});
}
void remplir()
{
tabModel=new DefaultTableModel(données,titre);
myTable.setModel(tabModel);
}
void supprimer()
{
tabModel.removeRow(myTable.getSelectedRow());
}
public static void main(String [] arg)
{
JTableDelete tab= new JTableDelete();
tab.setVisible(true);
tab.setSize(180,250);
}
}
ça devrait marcher.
Tu peux voir l'apperçu ici:http://sakoba.byethost13.com/2011/02/05/jtable-delete-row/-
Oui mais ça ne supprime pas dans ma base de données???
Voici le code qui rempli ma jTable :
private JTable getJTableSup() { if (jTableSup == null) { jTableSup = new JTable(); DefaultTableModel md = new DefaultTableModel(); md.setColumnIdentifiers(new String []{"Numéro Personne","Numéro Groupe","Responsabilité","Naissance","Nom","Prenom","Civilité"}); /*----------------- c juste pr Determiner le nom de la colonne ------------------------- */ System.out.print(md); try { ResultSet rs = Select.ListeMembreNum(); while (rs.next()) { /*---------------------- AJOUT DES LIGNES AU JTABLE --------------------*/ md.addRow(new Object[] {rs.getObject("NUMPERSONNE"),rs.getObject("NUMGROUPE"),rs.getObject("RESPONSABILITEMEMBRE"),rs.getObject("DATENAISSANCEMEMBRE"),rs.getObject("NOMPERSONNE"),rs.getObject("PRENOMPERSONNE"),rs.getObject("TITRECIVILITE")}); } System.out.print(md); } catch (SQLException e) { System.out.println("Erreur d'affichage "); } /*---------------------------------- AFFECTER LE MODEL AU JTABLE avec la methode setmodel ------------*/ jTableSup.setModel(md); jTableSup.setBounds(new Rectangle(90, 381, 439, 284)); jTableSup.setBackground(SystemColor.controlHighlight); } return jTableSup; } Du coup est ce que tu peux m'aider à changer le code et à l'adapter d'après mon code d'ajout stp. Merci d'avance sakoba -
-
-
D'abord commence à faire sortir ton Model "md" de la Fonction gejTableSup(). Mais tu laisse l'initialisation dans la Fonction.
Exp:
DefaultTableModel md; //hors du Fonction
md = new DefaultTableModel(); //à l'interieur du Fonction
Dans ton Bouton Supprimer tu appelles la Fonction Supprimer().
Note: tu peux Modifier la fonction supprimer en ajoutant la suppression de l'element dans la base de données.
int del=stmt.executeUpdate("Delete from nomTable where Numero like '"+nomTable.getValueAt(int row,int colum)+"' "); -
-
Voici le code que j'ai testé :
private void btSupprimer_click() { int colonne = jTableSup.getSelectedColumn(); for( int i = 0; i<colonne; i++ ) { jTableSup.getValueAt(0, colonne); } System.out.print(colonne); try { Delete.DeleteResa(colonne); JOptionPane.showMessageDialog(this, "Suppression effectuée" , "Message", JOptionPane.INFORMATION_MESSAGE ); // btValider.setEnabled(false); } catch(Exception e) { System.out.println("Exception " + e.getMessage()); JOptionPane.showMessageDialog(this, "Suppression effectuée" , "Message", JOptionPane.INFORMATION_MESSAGE ); } //Rafraichir jTable //md.fireTableDataChanged(); }
Merci pour ton aide sakoba -
-
Oui bien sur :
public static void DeleteResa( int numPersonne) throws SQLException
{
try
{
// récupération de la connexion
c = Connect.getCon();
stm = c.createStatement();
String sql = "DELETE FROM MEMBRE WHERE numPersonne = " + numPersonne + "";
// Execution de la requete
stm.executeUpdate(sql);
stm.close();
}
catch(SQLException sqlE)
{
System.out.println("Sql Erreur " + sqlE.getMessage());
throw sqlE;
}
catch(Exception e)
{
System.out.println("Erreur " + e.getMessage());
}
}
Personnellement, je pense que le code est bon puisque j'utilisais une jcombobox avant et sa supprimer bien.
Donc je pense que c'est mon code de mon applet qui doit pas être bon.
Merci Sakoba
-
-
Il faut récupérer la valeur de la colonne dans une variable et la passer en paramètre:
int colonne = jTableSup.getSelectedColumn();
String elem=jTableSup.getValueAt(0, colonne).toString();
Delete.DeleteResa(Inetger.parseInt(elem));
ça marche pour une seule colonne selectionnée.-
-
-
-
Je sais d'ou vient le problème.
En fait, quand j'ai rempli ma jTable à l'aide de ma BDD ma date de naissance, c'est rempli comme ceci 1985-08-12 00:00:00.0 au lieu de comme ça 1985-08-12.
Et du coup, quand il essaye de le supprimer dans la BDD il est pas content.
C'est l'insertion de ma date de naissance qui merde alors qu'elle est défini en DATE dans ma BDD.
-
-
-
d'abord il faut s'assurer que le numéro passé en paramètre est correcte c à d la valeur de la colonne sélectionnée. pour ça crées un JOptionPane pour retourner la valeur dans la colonne (0,n). Selon ton programme
for( int i = 0; i<colonne; i++ )
{
JOptionPane.showMessageDialog(null,jTableSup.getValueAt(0, colonne));
}
//Essais ça et donnes moi le message qu'il affiche
Sinon la requête est correcte.-
-
-
J'ai mis comme code :
int colonne = jTableSup.getSelectedColumn(); for( int i = 0; i<colonne; i++ ) { try { Delete.DeleteResa(Integer.parseInt(jTableSup.getValueAt(0, colonne).toString())); }catch(Exception err) { System.out.println("Exception " + err.getMessage()); JOptionPane.showMessageDialog(this, "Erreur" , "Message", JOptionPane.INFORMATION_MESSAGE ); } }
Quand je clique sur le numéro du membre(qui est la 1ère colonne) ça ne m'affiche rien, ni de message de suppression, ni message d'erreur.
Quand, je clique sur une autre colonne ça m'affiche erreur.
Ca m'affiche ceci : Exception For input string: "Tresorier "
Faudrait peut-être supprimer sur la colonne du coup nan??
-
-
Remplaces ça:
int colonne = jTableSup.getSelectedColumn();
for( int i = 0; i<colonne; i++ )
{
try
{
Delete.DeleteResa(Integer.parseInt(jTableSup.getValueAt(0, colonne).toString()));
}catch(Exception err)
{
System.out.println("Exception " + err.getMessage());
JOptionPane.showMessageDialog(this, "Erreur" , "Message",
JOptionPane.INFORMATION_MESSAGE );
}
}
Par ça:
try
{
Delete.DeleteResa(Integer.parseInt(jTableSup.getValueAt(jTableSup.getSelectedRow(), 0).toString()));
JOptionPane.showMessageDialog(this, "INFO" , "Element Supprimé",
JOptionPane.INFORMATION_MESSAGE );
}catch(Exception err)
{
System.out.println("Exception " + err.getMessage());
JOptionPane.showMessageDialog(this, "Erreur" , "Message",
JOptionPane.INFORMATION_MESSAGE );
}-
Ca marche!!!!!!!!!!!!!!!!!!!!!!
Mais y'a quelques trucs à changer.
- D'abords, j'ai des membres qui sont des clés étrangères du coup impossible de les supprimer.
Voici le message : Exception ORA-02292: violation de contrainte (AIRDEJAVA.FK_JOUER_MEMBRE) d'intégrité - enregistrement fils existant
- Ensuite, comment peut-on actualiser la jTable après la suppression ou l'ajout d'un membre dans la jTable?
-
-
Pour les Clés Étrangère, Commences d'abord par supprimer les lignes correspondant au numero de Membre dans la table de liaison. et pour Actualiser ta ta table Insères ça après "Delete.DeleteResa(Integer.parseInt(jTableSup.getValueAt(0, colonne).toString())); "
DefaultTableModel myModel=jTableSup.getModel();
myModel.removeRow(jTableSup.getSelectedRow());
http://sakoba.byethost13.com/2011/02/05/jtable-delete-row/-
Y'a pas de commande permettant de supprimer tous les clés étrangères à la suppression du membre???
Le cascade contrain???
try { Delete.DeleteResa(Integer.parseInt(jTableSup.getValueAt(jTableSup.getSelectedRow(), 0).toString())); md = new DefaultTableModel(); DefaultTableModel md=jTableSup.getModel(); md.removeRow(jTableSup.getSelectedRow()); JOptionPane.showMessageDialog(this, "Membre supprimé" , "Element Supprimé", JOptionPane.INFORMATION_MESSAGE ); }catch(Exception err) { System.out.println("Exception " + err.getMessage()); JOptionPane.showMessageDialog(this, "Erreur" , "Message", JOptionPane.INFORMATION_MESSAGE ); }
J'ai une erreur, il me dit ceci : "Non concordance de types : impossible de convertir de TableModel en DefaultTableMode"
Sachant que je n'ai rien défini avant mon try mais j'ai ceci au début de ma classe : DefaultTableModel md = new DefaultTableModel();
Merci sakoba
-
-
J'ai oublié.
Remplace cette ligne:
DefaultTableModel md=jTableSup.getModel();
par ça:
DefaultTableModel md=(DefaultTableModel)jTableSup.getModel();
Et Supprimes ça:
md = new DefaultTableModel();-
Ben un GRAND GRAND merci à toi sakoba!!
Ca marche tout simplement bien maintenant.
J'ai un dernier souci en fait, c'est lors de l'ajout d'n membre, je voudrais que ça actualise aussi ma jTable.
J'ai essayé pareil avec : md = new DefaultTableModel();
DefaultTableModel md=(DefaultTableModel)jTableSup.getModel();
Mais ça ne marche pas.
As-tu une idée??
Merci d'avance
-
-
un instant pendant que je prends un déjeuner à tout à l'heure
-
-
Ok
private void btValiderAjout_click () { //Gestion numéro de membre int numMembre; //numMembre = 0; //rsNombrePersonne = Select.NombrePersonne(); try { numMembre = Integer.parseInt(jTextFieldNumeroMembre.getText()); } catch (NumberFormatException e) { JOptionPane.showMessageDialog(null, "Rentrez un numéro de membre valide" ); jLabelObli.setVisible(true); jLabelObli1.setVisible(true); jLabelObli2.setVisible(true); jLabelObli3.setVisible(false); jLabelObli4.setVisible(false); jLabelObli5.setVisible(false); jLabelObli6.setVisible(false); jLabelObli7.setVisible(false); jLabelObli8.setVisible(false); return; } /* if (!Pattern.matches("[0-9]+", jTextFieldNumeroMembre.getText())) { JOptionPane.showMessageDialog(null, "Rentrez un numéro de membre valide"); jLabelObli.setVisible(true); jLabelObli1.setVisible(true); jLabelObli2.setVisible(true); jLabelObli3.setVisible(false); jLabelObli4.setVisible(false); jLabelObli5.setVisible(false); jLabelObli6.setVisible(false); jLabelObli7.setVisible(false); jLabelObli8.setVisible(false); return; }*/ //Gestion numéro de groupe Groupe numGroupe = (Groupe) jComboBoxNumeroGroupe.getSelectedItem(); if (numGroupe == null) { JOptionPane.showMessageDialog(null, "Sélectionnez un numéro de groupe" ); jLabelObli.setVisible(true); jLabelObli1.setVisible(true); jLabelObli2.setVisible(false); jLabelObli3.setVisible(false); jLabelObli4.setVisible(false); jLabelObli5.setVisible(false); jLabelObli6.setVisible(true); jLabelObli7.setVisible(false); jLabelObli8.setVisible(false); return; } //Gestion nom de membre String nomMembre = jTextFieldNomMembre.getText(); if (nomMembre.equals("")) { JOptionPane.showMessageDialog(null, "Rentrez un nom de membre" ); jLabelObli.setVisible(true); jLabelObli1.setVisible(true); jLabelObli2.setVisible(false); jLabelObli3.setVisible(true); jLabelObli4.setVisible(false); jLabelObli5.setVisible(false); jLabelObli6.setVisible(false); jLabelObli7.setVisible(false); jLabelObli8.setVisible(false); return; } if (!Pattern.matches("[A-Za-z -]*", nomMembre)) { JOptionPane.showMessageDialog(null, "Rentrez un nom de membre valide" ); jLabelObli.setVisible(true); jLabelObli1.setVisible(true); jLabelObli2.setVisible(false); jLabelObli3.setVisible(true); jLabelObli4.setVisible(false); jLabelObli5.setVisible(false); jLabelObli6.setVisible(false); jLabelObli7.setVisible(false); jLabelObli8.setVisible(false); return; } //Gestion date de naissance du membre /*String jour = (String) jComboBoxJour.getSelectedItem(); String mois = (String) jComboBoxMois.getSelectedItem(); String annee = (String) jComboBoxAnnee.getSelectedItem();*/ /* Date date; try { date = Date.valueOf(jTextFieldDate.getText()); } catch (IllegalArgumentException e) { JOptionPane.showMessageDialog(null, "Rentrez une date au format yyyy/mm/dd" ); return; }*/ //Gestion prénom de membre String prenomMembre = jTextFieldPrenomMembre.getText(); if (prenomMembre.equals("")) { JOptionPane.showMessageDialog(null, "Rentrez un prénom de membre" ); jLabelObli.setVisible(true); jLabelObli1.setVisible(true); jLabelObli2.setVisible(false); jLabelObli3.setVisible(false); jLabelObli4.setVisible(true); jLabelObli5.setVisible(false); jLabelObli6.setVisible(false); jLabelObli7.setVisible(false); jLabelObli8.setVisible(false); return; } if (!Pattern.matches("[A-Za-z -]*", prenomMembre)) { JOptionPane.showMessageDialog(null, "Rentrez un prénom de membre valide" ); jLabelObli.setVisible(true); jLabelObli1.setVisible(true); jLabelObli2.setVisible(false); jLabelObli3.setVisible(false); jLabelObli4.setVisible(true); jLabelObli5.setVisible(false); jLabelObli6.setVisible(false); jLabelObli7.setVisible(false); jLabelObli8.setVisible(false); return; } //Gestion titre de civilité du membre String titre = (String)jComboBoxTitre.getSelectedItem(); if (titre == null) { JOptionPane.showMessageDialog(null, "Sélectionnez un titre de civilité" ); jLabelObli.setVisible(true); jLabelObli1.setVisible(true); jLabelObli2.setVisible(false); jLabelObli3.setVisible(false); jLabelObli4.setVisible(false); jLabelObli5.setVisible(false); jLabelObli6.setVisible(false); jLabelObli7.setVisible(false); jLabelObli8.setVisible(true); return; } //Gestion responsabilité du membre String resp = (String) jComboBoxResponsabilité.getSelectedItem(); if (resp == null) { JOptionPane.showMessageDialog(null, "Sélectionnez une responsabilité" ); jLabelObli.setVisible(true); jLabelObli1.setVisible(true); jLabelObli2.setVisible(false); jLabelObli3.setVisible(false); jLabelObli4.setVisible(false); jLabelObli5.setVisible(true); jLabelObli6.setVisible(false); jLabelObli7.setVisible(false); jLabelObli8.setVisible(false); return; } /*vectorMembre.add(numMembre); vectorMembre.add(numGroupe); vectorMembre.add(titre); vectorMembre.add(jour); vectorMembre.add(mois); vectorMembre.add(annee); vectorMembre.add(resp); vectorMembre.add(nomMembre); vectorMembre.add(prenomMembre);*/ //Gestion de l'insertion du membre try { //Ajout dans la table Personne de la BDD Insertion.insertPersonne(numMembre, nomMembre, prenomMembre, titre); //Ajout dans la table Membre de la BDD Insertion.insertResa( numMembre, numGroupe.getnumGroupe(), resp, null, nomMembre, prenomMembre, titre ); JOptionPane.showMessageDialog(this, "Ajout effectué" , "Message", JOptionPane.INFORMATION_MESSAGE ); } catch(Exception e) { e.printStackTrace(); JOptionPane.showMessageDialog(this, "Ajout non-effectué\n\n"+e , "Message", JOptionPane.ERROR_MESSAGE ); return; } /*int option = JOptionPane.showConfirmDialog(this, "Voulez vous ajouter ce membre?","Ajouter un membre", JOptionPane.YES_NO_OPTION, JOptionPane.WARNING_MESSAGE); if (option == JOptionPane.OK_OPTION){ Insertion.insertResa(vectorMembre); }*/ //Remise des champs à vide ViderChamp(); //Grisonne les champs GrisonnerChamps(); //Supprime les champs obligatoires SupprimeObligation(); //Rafraichir bbb(); aaa(); //md.fireTableDataChanged(); }
Il doit ce faire à l'insertion.
Ma comboBox jComboBoxNom devrait être actualiser aussi mais je n'y arrive pas non plus.
Il ne me reste plus que ça pour finir mon projet.
Merci d'avance sakoba
-
-
-
Je suis de Retour Maria. dessolé pour hier.
Mets moi à jour stp on s'était arrêté ou?
- 1
- 2
- 3