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 :

[JTable] rendre une cellule non editable après edition


Sujet :

Composants Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Mai 2006
    Messages : 9
    Par défaut [JTable] rendre une cellule non editable après edition
    Bonjour,

    Voici mon problème, je rempli une JTable dans laquelle j'ai défini des cellules éditable et d'autres non (par colonne, surcharge iscelleditable); je voudrais lorsque j'ai rempli une colonne rendre celle-ci non editable par un bouton (en dehors du Jtable).
    Je cherche depuis un moment, hélas je n'ai rien trouvé, un détail m'échappe.

    Merci

    Bonne soirée

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Mai 2006
    Messages : 9
    Par défaut
    Re,

    J'ai compris qu'il faut ajouter une variable booléenne (celluleEditable) au model (abstractTableModel) et dans le isCellEditable tester cette valeur et en fonction du résultat retourner true ou false.
    Seulement je n'arrive pas a atteindre la variable depuis la classe d'affichage.
    J'ai essayer:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    maTable.getModel.celluleEditable=false;
    cela ne marche pas.

    Une idée?

    @ +

    Phil

  3. #3
    Membre émérite Avatar de fraco
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    750
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2006
    Messages : 750
    Par défaut
    Redéfinir le modèle, cellule non éditable :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    public class GelerColonne extends DefaultTableModel {    
        public GelerColonne(Object[] columnNames, int numRows)
        {
          super(columnNames, numRows);
        }
        public boolean isCellEditable(int row, int column) {     
            if (column == 0) {
              System.out.println("IsCellEditable should be false");
              return false;
            }
            else { return true; }      
        }
    }
    plus simple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
     public boolean isCellEditable(int row, int column) {     
           return column != 0;
     }
    et

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
            DefaultTableModel dtm = new GelerColonne( titresColonnes, nblignes);
            jXTable1.setModel(dtm);
    regarde si tu peux en tirer quelque chose.

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Mai 2006
    Messages : 9
    Par défaut
    Bonjour,
    Merci pour ta réponse.
    Je constate qu'effectivement je peux empêcher l'edition de certaine colonne, hélas je suis obliger de les mettre en dur dans le model. Je souhaiterais les passer à partir de ma classe graphique.
    De plus je pers les valeurs préenregistrées dans le JTable.
    Comment acceder au methodes du TableModel?

    Voici maTable:
    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
    import javax.swing.JTable;
    import javax.swing.table.TableColumnModel;
     
    public class tMSResult extends JTable{
    	/**
             * 
             */
    	private static final long serialVersionUID = -6157679622663166188L;
     
     
    	public tMSResult (String [] result)
            {
                super(new tModelMSResult(result));
     
                this.setRowHeight(20);
                TableColumnModel model = getColumnModel();
                for(int j=0;j<model.getColumnCount();j++)
                {
                    model.getColumn(j).setPreferredWidth(60);
                    model.getColumn(j+1).setPreferredWidth(20);
                    j++;
                }
    	}
     
    	public void maskColumn(int i)
    	{
    		TableColumnModel model = getColumnModel();
    		for(int j=i; j< model.getColumnCount();j++)
    		{
    			model.getColumn(j).setMinWidth(0);
    		}
            }
    }
    le model

    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
    import java.util.ArrayList;
     
    import javax.swing.table.AbstractTableModel;
     
     
    public class tModelMSResult extends AbstractTableModel{
    	  /**
             * 
             */
    	private static final long serialVersionUID = 1L;
    	private String [] labelColonne; //Les entêtes des colonnes
            public boolean celluleEstEditable=false;
    	@SuppressWarnings("unchecked")
    	private ArrayList [] data; //Les données
     
    	  public tModelMSResult (String [] titres) {
    	    labelColonne = titres;	    //On initialise la structure de donnée
    	    data = new ArrayList[labelColonne.length];
    	    for (int i = 0; i < labelColonne.length;i++)
    	      data[i] = new ArrayList<Object>();
    	  }
     
    	  //Fonctions qu'il est necessaire de surcharger
     
    	  public String  getColumnName  (int col)          {return labelColonne[col].toString();}
    	  public int     getRowCount    ()                 {return data[0].size();}
    	  public int     getColumnCount ()                 {return labelColonne.length;}
    	  public Object  getValueAt     (int row, int col) 
    	  	{
    		  try{return data[col].get(row);}catch(Exception a){}
    		  return null;}
     
    	  //On ajoute , on remplace ou on supprimer suivant les valeurs entrees...
    	  @SuppressWarnings("unchecked")
    	public void setValueAt(Object value, int row, int col) {
    	    if (value != null) {
    	      if (row >= data[col].size())
    	        data[col].add(row,value);
    	      else
    	        data[col].set(row,value);
    	    } else 
    	    {  for (int i = 0; i < getColumnCount(); i++) 
    	        data[i].remove(row);
    	    }
     
    	   try{ fireTableDataChanged();
    	  } catch (Exception e) {
    			System.out.println("fireTableDataChanged\n");
    		}
    	  }
     
    	  public boolean isCellEditable(int row, int col)
    	  {
    	       //1° colonne non editable,2 ° editable
                   switch(col)
                   {
                        case 0: return false;
                        case 1: return ( true );
                        case 2: return false;
                        case 3: return ( true );
                        case 4: return false;
                        case 5: return ( true );
                        case 6: return false;
                        case 7: return ( true );
                        default:return false;
                   }
               }
     
    	  //Permet de tout effacer
    	  public void clear ()
              {
    	    for (int i = 0;i < labelColonne.length;i++)
    	      data[i].clear();
    	    try{ fireTableDataChanged();
    		  } catch (Exception e) {
    				System.out.println("fireTableDataChanged\n");
    			}
    	  }
     
    }
    la déclaration dans la classe graphique
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
        public static tMSResult maTableRS;
     
        String [] result4={"Partie 1","Resultat1","Partie 2","Resultat2","Partie 3","Resultat3","Partie 4","Resultat4"};
    maTableRS = new tMSResult(result4);break;
            maTableRS.setDefaultRenderer(Object.class, new tMResultRenderer(maTableRS.getDefaultRenderer(Object.class)));
            maTableRS.setDefaultEditor(Integer.class, new IntegerEditor(0, 13));
            maTableRS.getColumnModel().getColumn(1).setCellEditor(new IntegerEditor(0, 13));
            maTableRS.getColumnModel().getColumn(3).setCellEditor(new IntegerEditor(0, 13));
            maTableRS.getColumnModel().getColumn(5).setCellEditor(new IntegerEditor(0, 13));
            maTableRS.getColumnModel().getColumn(7).setCellEditor(new IntegerEditor(0, 13));
     
            initComponents();
    En gros je remplis la colonne 1 avec les résultats je calcule et met à jour dans une table resultat par la suite je souhaite empêcher l'edition de cette colonne sauf si l'on appuie sur un bouton.

    J'espère avoir été clair.

    Bonne soirée

    @ +

    Phil

Discussions similaires

  1. [Swing / JTable] Rendre les cellules d'un JTable non éditables
    Par Jérôme_20 dans le forum Composants
    Réponses: 20
    Dernier message: 10/02/2011, 10h32
  2. Edition d'une cellule non sélectionnée
    Par darling dans le forum Composants
    Réponses: 9
    Dernier message: 31/03/2010, 19h00
  3. Modifier la bordure d'une cellule lors de son edition.
    Par pascal_feutseu dans le forum Composants
    Réponses: 1
    Dernier message: 26/03/2010, 14h05
  4. [JTable] Rendre une colonne non éditable
    Par d_hazem dans le forum Composants
    Réponses: 2
    Dernier message: 04/06/2008, 10h48
  5. rendre les cellules de ma table editable
    Par christianf dans le forum AWT/Swing
    Réponses: 10
    Dernier message: 29/09/2007, 07h22

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