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
- Cherche spécialiste en jTable java
- Jeux java itel - Télécharger - Jeux vidéo
- Jeux java football - Télécharger - Jeux vidéo
- Java apk - Télécharger - Langages
- Jeux java itel touche ✓ - Forum Logiciels
- Jeux java itel 5360 - Forum Mobile
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.
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/
{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;
}
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 questionimport 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/
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
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)+"' ");
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
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
int colonne = jTableSup.getSelectedColumn();
String elem=jTableSup.getValueAt(0, colonne).toString();
Delete.DeleteResa(Inetger.parseInt(elem));
ça marche pour une seule colonne selectionnée.
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.
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.
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??
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 );
}
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?
DefaultTableModel myModel=jTableSup.getModel();
myModel.removeRow(jTableSup.getSelectedRow());
http://sakoba.byethost13.com/2011/02/05/jtable-delete-row/
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
Remplace cette ligne:
DefaultTableModel md=jTableSup.getModel();
par ça:
DefaultTableModel md=(DefaultTableModel)jTableSup.getModel();
Et Supprimes ça:
md = new DefaultTableModel();
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
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
- 1
- 2
- 3
Je débute en jTable et je peux te dire que c'est galère au début sachant qu'il faut pas juste supprimer dans la jTable faut aussi supprimer dans la BDD oracla...
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 :
L'initialisation de ta table est bien plus simple avec cette solution (ça prend quelques lignes à peine).