private void CmdAjouterActionPerformed(java.awt.event.ActionEvent evt) { int i=txtJtableRegDispo.getSelectedRow(); int c; Object [] valeur = {txtJtableRegDispo.getValueAt(i, 0)}; txtJtableRegDispo.clearSelection(); if ( isValueValide( valeur ) ){ bModel.addRow(valeur);} else {/*tu peux faire un un msg d erreur si tu veux*/} } public boolean isValueValide( Object[] value ) { int size = bModel.getRowCount(); for ( int i = 0; i < size; i++ ) { if ( value[0].equals( bModel.getValueAt(i, 0) ) ) return false; } return true; }
bModel = new DefaultTableModel() { public boolean isCellEditable(int row, int col) { return false; } @Override public void addRow(Object[] rowData) { if ( isValueValide( rowData ) ){ super.addRow(rowData);} else {/*tu peux faire un un msg d erreur si tu veux*/} } };
class MonModel implements DefaultTableModel { //et la tu surcharge ou ajoute ce que tu veux ;o) ... }
((DefaultTableModel)(table.getModel())).addRow(new String[]{"", "", ""});
private void CmdAjouterActionPerformed(java.awt.event.ActionEvent evt) { int i=txtJtableRegDispo.getSelectedRow();//recupération de l'indice de la ligne Object [] valeur = {txtJtableRegDispo.getValueAt(i, 0)}; //recupération de sa valeur if(verif(valeur)==true){//verification de doublon bModel.addRow(valeur); } }
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre questionif(verif(valeur)==true){//verification de doublonpar
if(verif(valeur)){//verification de doublon
{soit encor mieux tu empeches carrement la saisie de mauvaise valeures au niveau du cellEditor ;o)}je ne comprends pas trop,car il n'y pas de saisie a faire.c'est juste sélectionné la ligne clicquer sur ajouter pour que la ligne soit copiée dans la table B.Merci
Ce que tu peux faire est de gérer les ajouts dans ta tables en utilisant des JTextField avec un bouton ajouter plutôt que de recopier la dernière ligne. de cette manière, tu peux vérifier que ta table ne contient pas de doublons avant d'ajouter une ligne.
private javax.swing.JTable txtJtableRegDispo; private javax.swing.JTable txtJtableRegCharger; // code de la table contenant les données en BD txtJtableRegDispo = new javax.swing.JTable(); String[] tableColumnsName = {"Liste des registres disponibles"}; aModel = new DefaultTableModel() { public boolean isCellEditable(int row, int col) { return false; } }; txtJtableRegDispo.getSelectionModel().addListSelectionListener(new RowListener()); aModel.setColumnIdentifiers(tableColumnsName); txtJtableRegDispo.setModel(aModel); // code de la table contenant les données copiées depuis la 1ere table txtJtableRegCharger = new javax.swing.JTable(); String[] tableColumnsName1 = {"Liste des registres àcharger"}; bModel = new DefaultTableModel() { public boolean isCellEditable(int row, int col) { return false; } }; bModel.setColumnIdentifiers(tableColumnsName1); txtJtableRegCharger.setModel(bModel); //Methodes me permettant de remplir mon tableau avec les donnée en bd public void ListeRegistre() { try { String Query = "SELECT * FROM registres ";//ici j'ajoutes le code du registre Connection connection = (Connection) DataBaseConnector.getConnection(); PreparedStatement ps = (PreparedStatement) connection.prepareStatement(Query); ResultSet rs = ps.executeQuery(); ResultSetMetaData md = (ResultSetMetaData) rs.getMetaData(); colNo = md.getColumnCount(); while (rs.next()) { objects = new Object[colNo]; for (int i = 0; i < colNo; i++) { objects[i] = rs.getObject(i + 1); } aModel.addRow(objects); } txtJtableRegDispo.repaint(); } catch (SQLException ex) { Logger.getLogger(FormChoixRegistre1.class.getName()).log(Level.SEVERE, null, ex); } }si je te comprends tuvoudrais que j'associe chaque regitre à sa clé? mais mon problème va se situer au niveau de la copie,comment pouvoir utilier cette clé cachée afin d'effectuer les tests.Merci.je crois tu devrais plus t'ennuyer.merci pour ton aide.
par une methode Ajouter tu fais passer des selections de A vers B... et donc ton soucis : es ce bien que sur un 2nd ajout tu risques d avoir des doublons dans B??
public boolean verif(Object[] val){ boolean result=true; for(int k=0;k< txtJtableRegCharger.getModel().getRowCount();k++){ if(txtJtableRegCharger.getModel().getValueAt(k, 0) == val){ JOptionPane.showMessageDialog(null, val+" existe déjà", "Erreur", JOptionPane.ERROR_MESSAGE); result=false; } } return result; } private void CmdAjouterActionPerformed(java.awt.event.ActionEvent evt) { int i=txtJtableRegDispo.getSelectedRow(); Object [] valeur = {txtJtableRegDispo.getValueAt(i, 0)}; txtJtableRegDispo.clearSelection(); if(verif(valeur)==true){ bModel.addRow(valeur); } }
private DefaultTableModel aModel,bModel; bModel = new DefaultTableModel();
private class VerifDoublon extends DefaultTableModel{ public void addRegistre(Object[] val) { } } et puis le definir dans le constructeur de DefaultTableModel comme ceci? bModel = new DefaultTableModel(new VerifDoublon()) { public boolean isCellEditable(int row, int col) { return false; } };je l'ai fait ainsi,mais y'a erreur.Pour tout dire je ne vois vraiment pas comment y arriver.je suis a bout de refflection.