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 :

Sélection d'une cellule Après la mise a jour


Sujet :

Composants Java

  1. #1
    Membre habitué
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Mai 2008
    Messages
    382
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2008
    Messages : 382
    Points : 191
    Points
    191
    Par défaut Sélection d'une cellule Après la mise a jour
    Bonjour à tous,

    J'ai actuellement un tableau.
    Et j'aimerai que lorsque j'appuie sur le bouton pour modifier les lignes du tableau, ça me sélectionne une cellule (pour actualiser les renderers)
    Car lorsque j'appuie sur le bouton pour mettre a jour, les renderers ne s'actualise pas et me créer mêmes des erreurs.

    J'ai testé :
    L'action du bouton:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Tableau_pointage_compta_model refModel = (Tableau_pointage_compta_model)table.getModel();
    refModel.updateRows();// J'appel la mise a jour du tableau
    table.setRowSelectionInterval(0,0);// ne met pas a jour les renderers
    table.changeSelection(1, 1, false, false);// Pareil ne fonctionne pas

  2. #2
    Membre habitué
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Mai 2008
    Messages
    382
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2008
    Messages : 382
    Points : 191
    Points
    191
    Par défaut
    Il faut peut être sélectionner la JTable pour activer les renderers.

    Comment?

  3. #3
    Membre expérimenté Avatar de rtg57
    Homme Profil pro
    Autodidacte
    Inscrit en
    Mars 2006
    Messages
    1 340
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Autodidacte
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 340
    Points : 1 576
    Points
    1 576
    Par défaut
    Bonjour,

    avez-vous essayé les fireTableRowsUpdated( index_debut, index_fin ) ou fireTableDataChanged();, après avoir modifié le contenu de votre tabelau ?

    @ bientôt...

  4. #4
    Membre habitué
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Mai 2008
    Messages
    382
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2008
    Messages : 382
    Points : 191
    Points
    191
    Par défaut
    Oui j'ai déjà une mise a jour des données sans avoir une mise a jour des renderers.

    A voir les photos mises ci jointes au message.

    En gros j'explique ce qu'il se passe.
    -Je clique sur le bonton Dépointage ->(ça me met a jour le traitement et le nom du bouton passe en Pointage)
    -Je clique sur le bouton désormais Pointage ->(ça me met a jour le traitement et le nom du bouton passe en Dépointage.
    -Si je demande d'afficher les non pointés: J'ai le bug sur le total.
    Et dès que je clique dans une cellule de la Jtable, le bouton s'enlève avec le renderer.

    J'ai essayé de sélectionné les cellules après le traitement du bouton pointage ou dépointage (ça ne change rien)
    J'ai essayé de sélectionné les cellules après un clic sur le bouton afficher
    c'est pareil.

    Si avant de cliquer sur le bouton afficher je clique sur une autre cellule de la jtable après avoir cliquer sur un bouton (Pointage & dépointage).
    Alors dès que j'affiche les non pointés (il ne me met pas de bouton sur le total) Donc c'est bien un problème de renderer et de dé-sélection de la Jtable qui met a jour les données sans pour autant mettre a jour le renderer.
    Images attachées Images attachées    

  5. #5
    Membre habitué
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Mai 2008
    Messages
    382
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2008
    Messages : 382
    Points : 191
    Points
    191
    Par défaut
    Pour faire bref:
    Je cherche une solution pour que dès que j'appuie sur un bouton dans la Jtable, cela m'applique immédiatement les renderers (sans que l'utilisateur sélectionne une cellule).

  6. #6
    Membre averti
    Homme Profil pro
    Inscrit en
    Avril 2011
    Messages
    214
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2011
    Messages : 214
    Points : 338
    Points
    338
    Par défaut
    Bonjour,

    Si le TableModel hérite de AbstractTableModel alors l'appel à fireTableDataChanged() force toute la partie données de la table à se redessiner (et provoque donc l'appel aux renderers).

    Sinon il faut envoyer un événement new TableModelEvent(this) à ses listeners (où this est le TableModel) ce qui aura le même effet.

  7. #7
    Membre habitué
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Mai 2008
    Messages
    382
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2008
    Messages : 382
    Points : 191
    Points
    191
    Par défaut
    Merci pour ta réponse gma

    J'ai mis en place le fireTableDataChanged() après chaque clic sur un bouton de la Jtable: ligne 106

    Mais rien y fait, j'ai encore le bug!

    Voici mon code des boutons:
    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
     
    import java.awt.Component;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.util.Calendar;
    import java.util.EventObject;
     
    import javax.swing.DefaultCellEditor;
    import javax.swing.JButton;
    import javax.swing.JCheckBox;
    import javax.swing.JTable;
    import javax.swing.event.CellEditorListener;
    import javax.swing.table.AbstractTableModel;
    import javax.swing.table.TableCellEditor;
     
    import com.pforissier.controler.Datetime;
    import com.pforissier.dao.DAO;
    import com.pforissier.dao.tables.Compta_banque;
    import com.pforissier.dao.tables.Compta_banqueDao;
    import com.pforissier.model.Tableau_pointage_compta_model;
    import com.pforissier.model.Tableau_stock_articles_model;
     
    public class ButtonEditor extends DefaultCellEditor {
    	protected JButton button;
    	private ButtonListener bListener = new ButtonListener();
     
    	/**
             * Constructeur avec une checkBox
             * @param checkBox
             * @param count
             */
    	public ButtonEditor(JCheckBox checkBox) {
    		//Par défaut, ce type d'objet travaille avec un JCheckBox
    		super(checkBox);
    	    //On crée à nouveau notre bouton
    		button = new JButton();
    	    button.setOpaque(true);
    	    //On lui attribue un listener
    	    button.addActionListener(bListener);
    	}
     
    	public Component getTableCellEditorComponent(JTable table, Object value,
    	                   boolean isSelected, int row, int column) { 
    		//On définit le numéro de lignes à notre listener
    		bListener.setRow(row);
    		//Idem pour le numéro de colonnes
    		bListener.setColumn(column);
    		//On passe aussi le tableau pour des actions potentielles
    		bListener.setTable(table);
    		//On réaffecte le libellé au bouton
    		button.setText( (value ==null) ? "" : value.toString() );
    		Tableau_pointage_compta_model table_model = (Tableau_pointage_compta_model) table.getModel();
    		button.setEnabled(((table_model.getValueAt(row, 1, 1)=="non" && column==1) || value=="") ? false : true);
    		//On renvoie le bouton
    	    return button;
    	}
     
    	/**
             * Notre listener pour le bouton
             * 
             *
             */
    	class ButtonListener implements ActionListener{
     
    		private int column, row;
    		private JTable table;
    		private int nbre = 0;
    		private JButton button;
    		private Datetime date;
    		private DAO<Compta_banque> compta_banqueDao = new Compta_banqueDao();
     
    		public void setColumn(int col){this.column = col;}
    		public void setRow(int row){this.row = row;}
    		public void setTable(JTable table){this.table = table;}
    		public JButton getButton(){return this.button;}
     
    		public void actionPerformed(ActionEvent event) {
    			Tableau_pointage_compta_model table_model = (Tableau_pointage_compta_model) table.getModel();
    			this.button = ((JButton)event.getSource());
    			if(this.button.getText()=="Voir le détail"){
    				// On affiche le détail
    				//On affiche un Zoli message mais vous pourriez faire les traitements que vous voulez
    				System.out.println("coucou du bouton : " + ((JButton)event.getSource()).getText() );
    			}
    			else if(this.button.getText()=="Pointage"){
    				// Mois de pointage
    				int mois=(Integer) table_model.getValueAt(row, 0, 2);
    				//date du jour
    				date = new Datetime(1, mois, Integer.valueOf(Calendar.getInstance().get(Calendar.YEAR)), 1, 1, 1);
    				System.out.println("date: "+date.getDateTimesql());
    				//On affecte la date dans le tableau
    				table_model.setValueAt("Dépointage", 0, this.row, (this.column));
    				((AbstractTableModel)table.getModel()).setValueAt(date.getMoisMajString(), this.row, (this.column +1));
    				//On affecte la date dans la bdd	
    				compta_banqueDao.update("check", "1", "check_mois", date.getDateTimesql(), (Integer) table_model.getValueAt(row, 0, 1));
    				this.button.setText("Dépointage");
    			}
    			else if(this.button.getText()=="Dépointage"){
    				//On supprime la date dans le tableau
    				table_model.setValueAt("Pointage", 0, this.row, (this.column));
    				((AbstractTableModel)table.getModel()).setValueAt("", this.row, (this.column +1));
    				//On dé-check la date dans la bdd
    				compta_banqueDao.update("check", "0", (Integer) table_model.getValueAt(row, 0, 1));
    				this.button.setText("Pointage");
    			}
    			((AbstractTableModel)table.getModel()).fireTableDataChanged();// On met a tout a jour
    		}
    	}
    }

  8. #8
    Membre averti
    Homme Profil pro
    Inscrit en
    Avril 2011
    Messages
    214
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2011
    Messages : 214
    Points : 338
    Points
    338
    Par défaut
    Citation Envoyé par peofofo Voir le message
    J'ai mis en place le fireTableDataChanged() après chaque clic sur un bouton de la Jtable: ligne 106
    Oui mais si j'ai bien compris le problème c'est lorsqu'on clique sur "Afficher" qu'il y a un problème. Alors que là le fireTableDataChanged() est appelé lorsqu'on clique sur "Dépointage".

    Sinon il faut la distinction entre un "TableCellEditor" et un "TableCellRenderer". Le renderer ne sert qu'à dessiner la valeur dans une cellule alors que l'editor permet d'éditer une valeur. Et la logique de la JTable veut qu'il y ait au plus un éditeur actif par table.

  9. #9
    Membre habitué
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Mai 2008
    Messages
    382
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2008
    Messages : 382
    Points : 191
    Points
    191
    Par défaut
    Désolé pour ce temps d'absence.
    J'ai pas vraiment eu le temps de m'y remettre.

    J'ai fais plein d'essais et le bug vient dès que je clique sur le bouton dans la Jtable. Il ne met pas a jour la Jtable! Du coups quand je demande la mise a jour à l'aide d'un bouton extérieur à la Jtable, ça me laisse le bouton.

    Il faudrait que dès que je clique sur un bouton de la Jtable, j'ai l'équivalent d'un clic sur une cellule pour mettre à jour les renderers.

    J'ai regardé du coté des sélection de cellule, mais pour le moment rien ne fonctionne.

Discussions similaires

  1. Sélection d'une cellule après un filtre ?
    Par derin dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 10/10/2008, 15h09
  2. ListView empecher la sélection d'une cellule
    Par frizou11 dans le forum C
    Réponses: 2
    Dernier message: 17/10/2007, 17h12
  3. Réponses: 5
    Dernier message: 21/03/2007, 11h26
  4. Réponses: 2
    Dernier message: 13/02/2007, 17h40
  5. Slection d'une cellule dans une Flexgrid
    Par ecarbill dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 29/08/2006, 13h44

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