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 :

modification d'une cellule d'une JTable


Sujet :

Composants Java

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    512
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Indre et Loire (Centre)

    Informations forums :
    Inscription : Juin 2007
    Messages : 512
    Points : 97
    Points
    97
    Par défaut 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 : 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
    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 : 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
    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 !

  2. #2
    Membre confirmé Avatar de ngpub
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    449
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 449
    Points : 505
    Points
    505
    Par défaut
    Rapidement, voici une idée qui devrait fonctionner, on peut faire mieux, je te laisse affiner.

    Dans le modèle :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    	public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
    		String[] rowTmp = (String[]) Loffres.get(rowIndex);
    		rowTmp[columnIndex] = (String)aValue;
    		fireTableCellUpdated(rowIndex, columnIndex);
    	}
    Dans la gestion des événements des boutons :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    	@Override
    	public void actionPerformed(ActionEvent e) {
    		...
    		if(source==btnPlus)
    		{
    			...	
    			//mise à jour du Résultat dans tableau
    			String nb_vente = (String) tableau.getValueAt(0, 2);
    			int new_nb = Integer.parseInt(nb_vente) + 1;
    			tableau.setValueAt(Integer.toString(new_nb), 0, 2);
    		}
    		...

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    512
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Indre et Loire (Centre)

    Informations forums :
    Inscription : Juin 2007
    Messages : 512
    Points : 97
    Points
    97
    Par défaut
    et ben merci beaucoup!

    juste une petite question...
    si je remplie ma troisième colonne à partir d'une base de données est-ce que je pourrais utiliser la même façon d'incrémenter mon compteur?

  4. #4
    Membre confirmé Avatar de ngpub
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    449
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 449
    Points : 505
    Points
    505
    Par défaut
    Oui, mais dans ce cas il faut en plus penser à sauvegarder le résultat dans la bd.

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    512
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Indre et Loire (Centre)

    Informations forums :
    Inscription : Juin 2007
    Messages : 512
    Points : 97
    Points
    97
    Par défaut
    oui oui faire un insert à chaque fois qu'il clique sur plus... reste maintenant à réussir à remplir ma troisième colonne

    en tout cas merci beaucoup.

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    512
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Indre et Loire (Centre)

    Informations forums :
    Inscription : Juin 2007
    Messages : 512
    Points : 97
    Points
    97
    Par défaut
    Une petite question juste avant de faire mon insert je demande à l'utilisateur de saisir un code dans un ShowInputDialog. ce code est sur 14 caractères?
    Est-il possible de limiter la saisie dans la showInputDialog?

  7. #7
    Membre confirmé Avatar de ngpub
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    449
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 449
    Points : 505
    Points
    505
    Par défaut
    Le plus simple est de ré-afficher showInputDialog si la saisie ne convient pas.

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    512
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Indre et Loire (Centre)

    Informations forums :
    Inscription : Juin 2007
    Messages : 512
    Points : 97
    Points
    97
    Par défaut
    je récupère ma chaine je vérifie qu'elle est de 14 caractère sinon j ré-affiche un message et je n'enregistre pas...mais lorsque je clique sur annuler d ma showInput Dialog il me sauvegarde un champs null dans ma base...
    Existe-il des actionListener sur les boites de dialogue?

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    512
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Indre et Loire (Centre)

    Informations forums :
    Inscription : Juin 2007
    Messages : 512
    Points : 97
    Points
    97
    Par défaut
    J me complique tro p la vie, suffit de vérifier que ma chaine n'est pa vide pour se qui est du bouton annuler

Discussions similaires

  1. Réponses: 1
    Dernier message: 13/04/2015, 11h17
  2. [Toutes versions] coller les données d'une plage d'une cellule dans une cellule d'une autre feuille[VBA]
    Par arthson dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 24/01/2012, 17h37
  3. [XL-2007] problème de codage en vba ("copie d'une partie d'une cellule dans une cellule vide")
    Par skipeemed dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 26/10/2010, 17h01
  4. [XL-2002] Macro de comparaison d'une cellule d'une feuille avec une cellule d'une autre feuille.
    Par steelydan dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 08/09/2010, 12h59
  5. Recherche une valeur d'une cellule dans une colonne d'une autre feuille
    Par kourria dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 21/06/2007, 13h48

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