modification d'une cellule d'une JTable
Bonjour,
je développe une petite application qui permet de compter le nombre de ventes que j'ai fait.
J'ai donc une JTable avec trois colonnes : la liste des offres et les objectifs de vente qui correspondent. La troisième colonne contient des zéros : elle me permet de compter le nombre de service vendu par offre.
J'ai en plus de ma JTable deux boutons un pour incrémenter mon compteur et l'autre pour décrémenter mon compteur en cas d'erreur.
C'est par ces compteurs que je souhaite modifier le contenu des cellules. Mais je ne veux pas que l'utilisateur puisse modifier directement à la mano.
Déjà est-ce possible???
Voici le code de mon modèle
Code:
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
|
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import javax.swing.table.AbstractTableModel;
import com.mysql.jdbc.ResultSetMetaData;
public class ModeleDynamiqueObjet extends AbstractTableModel{
private final ArrayList Loffres = new ArrayList();
private final String[] entetes = {"Offres","Objectifs","Résultats"};
public ModeleDynamiqueObjet()
{
super();
Connection con = null;
ResultSet resultats = null;
//placer les valeurs dans Vector ligne
try {
con = DriverManager.getConnection("jdbc:mysql://localhost/batonnage?zeroDateTimeBehavior=convertToNull","root","");
Statement st = con.createStatement();
resultats = st.executeQuery("SELECT libelle_offre,obj from offres LEFT OUTER JOIN obectifs ON offres.code_offre = obectifs.code_offre WHERE code_canal like '%"+ecran.uneActivite.getCode()+"%'");
ResultSetMetaData metadata = (ResultSetMetaData) resultats.getMetaData();
int nbColonnes = metadata.getColumnCount();
String[] rowTmp;
while(resultats.next()) {
rowTmp = new String[4];
rowTmp[0] = resultats.getString("libelle_offre");
rowTmp[1] = resultats.getString("obj");
rowTmp[2] = "0";
Loffres.add(rowTmp);
}
}
catch (SQLException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
}
@Override
public int getColumnCount() {
// TODO Auto-generated method stub
return entetes.length;
}
@Override
public int getRowCount() {
// TODO Auto-generated method stub
return Loffres.size();
}
public String getColumnName(int columnIndex) {
// TODO Auto-generated method stub
switch(columnIndex){
case 0 :
return "Offres";
case 1 :
return "Objectifs";
case 2 :
return "Résultats";
default :
return null;
}
}
@Override
public String getValueAt(int rowIndex, int columnIndex) {
// TODO Auto-generated method stub
String[] rowTmp = (String[]) Loffres.get(rowIndex);
return rowTmp[columnIndex];
}
public void setValueAt(int value, int row, int col) {
int [] rowTmp = (int[]) Loffres.get(row);
rowTmp[col] = Integer.parseInt((String) Loffres.set(row,value));
fireTableCellUpdated(row,col);
}
} |
et voici le code de ma classe faisant appel à une JTable
Code:
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
|
public class ecr_batonnage extends JFrame implements ActionListener
{
private ModeleDynamiqueObjet modele = new ModeleDynamiqueObjet();
private JFrame fen = new JFrame();
private JPanel panRes = new JPanel();
ArrayList<JLabel> listLabel = new ArrayList<JLabel>();
private JButton btnPlus = new JButton("+");
private JButton btnMoins = new JButton("-");
private JButton btnChAct = new JButton("Changer d'activité");
private Container contenu = getContentPane();
private String libelle_offre_selec;
private JTable tableau =new JTable(modele);
public ecr_batonnage() throws SQLException
{
//autoriser une seule sélection dans le tableau
tableau.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
//récupérer la valeur sélectionnée
int num_col = tableau.getSelectedColumn();
System.out.println(num_col);
int num_ligne = tableau.getSelectedRow();
System.out.println(num_ligne);
ecran.lib_of_selec = (String) tableau.getValueAt(num_ligne+1, num_col+1);
//mise en place ActionListener sur les trois boutons
btnPlus.addActionListener(this);
btnMoins.addActionListener(this);
btnChAct.addActionListener(this);
//gestion date pour récup numéro de semaine
String format = "dd/MM/yyyy";
java.text.SimpleDateFormat formater = new java.text.SimpleDateFormat( format );
java.util.Date date = new java.util.Date();
System.out.println( formater.format( date ) );
//connexion et interrogation base MySQL
Connection con = null;
ResultSet resultats = null;
con = DriverManager.getConnection("jdbc:mysql://localhost/batonnage?zeroDateTimeBehavior=convertToNull","root","");
Statement st = con.createStatement();
resultats = st.executeQuery("SELECT libelle_offre from offres where code_canal like '%"+ecran.uneActivite.getCode()+"%'");
ResultSetMetaData metadata = (ResultSetMetaData) resultats.getMetaData();
int nbColonnes = metadata.getColumnCount();
//ajout des controles dans les différents container puis dans la JFrame
contenu.add(new JScrollPane(tableau), BorderLayout.CENTER);
panRes.add(btnPlus);
panRes.add(btnMoins);
panRes.add(btnChAct);
contenu.add(panRes,BorderLayout.AFTER_LAST_LINE);
fen.add(contenu);
fen.setSize(500,300);
fen.setVisible(true);
}
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
Object source=e.getSource();
String pdl = null;
//si click sur le btnPlus
if (source==btnPlus)
{
//récup du PDL
pdl = JOptionPane.showInputDialog(fen, "Vous avez souscrit à l'offre "+ecran.lib_of_selec +", saisissez le PDL correspondant :","PDL",JOptionPane.QUESTION_MESSAGE);
//System.out.println(pdl);
//mise à jour du Résultat dans tableau
String nb_vente = (String) tableau.getValueAt(0,2);
System.out.println(nb_vente);
int new_nb = Integer.parseInt(nb_vente)+1;
System.out.println("erreur");
System.out.println(new_nb);
tableau.setValueAt(new_nb,0,2);
}
//si click sur le btnMoins
else if (source==btnMoins)
{
//récup du pdl
pdl = JOptionPane.showInputDialog(fen, "Vous avez sélectionné l'offre "+ecran.lib_of_selec +", supprimer le PDL correspondant :","PDL",JOptionPane.QUESTION_MESSAGE);
//System.out.println(pdl);
//mise à jour du Résultat dans tableau
String nb_vente = (String) tableau.getValueAt(tableau.getSelectedRow(),2);
int new_nb = Integer.parseInt(nb_vente)-1;
System.out.println("erreur");
System.out.println(new_nb);
tableau.setValueAt(new_nb,0, 2);
}
//si click sur Changement d'activité
else if (source==btnChAct)
{
//retour à l'ecran ecr_choix_act
fen.setVisible(false);
try {
ecr_choix_act ecr = new ecr_choix_act();
} catch (SQLException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
}
} |
Merci de votre aide !