Désactiver l'édition de l'utilisateur dans JTable

Lorsqu'un composant JTable est créé, l'édition de cellule est activée par défaut. Comment puis-je empêcher l'utilisateur de modifier le contenu d'un JTable?

24
demandé sur AsksAnyway 2012-03-29 08:49:46

8 réponses

Un JTable utilise un objet AbstractTableModel. C'est la chose que vous passez dans le constructeur du JTable. Vous pouvez écrire votre propre AbstractTableModel comme suit

public class MyTableModel extends AbstractTableModel {

      public boolean isCellEditable(int row, int column){  
          return false;  
      }

}

Puis initialisez votre JTable comme

JTable myTable = new JTable(new MyTableModel());
37
répondu richard 2012-03-29 05:25:35

Vous pouvez créer un JTable en utilisant le code suivant:

    JTable jTable = new JTable() {
        private static final long serialVersionUID = 1L;

        public boolean isCellEditable(int row, int column) {                
                return false;               
        };
    };

Fondamentalement, ce que nous faisons ici est en remplaçant isCellEditable et en renvoyant toujours false. Cela fera un jtabel Non editabe.

41
répondu Rahul Borkar 2016-06-28 04:49:20
myTable.setDefaultEditor(Object.class, null);
12
répondu Aïssa Ghouti 2017-04-10 23:37:14

Salut je travaille beaucoup sur java donc je vais vous donner mon chemin: Il y a deux possibilités la première sous netbeans. Allez à personnaliser le code et faites-le comme ceci:

JTArticleJPAddArrticle = new javax.swing.JTable();

JTArticleJPAddArrticle.setBackground(new java.awt.Color(204, 204, 255));

JTArticleJPAddArrticle.setModel(new javax.swing.table.DefaultTableModel(
new Object [][] {

},
new String [] {
    "Reference","Libellé","Marque","Prix d'achat","Prix de vente","Quantité","Total","Etat"
}
){
public boolean isCellEditable(int rowIndex, int columnIndex) {
    return false;
}
});



jScrollPane8.setViewportView(JTArticleJPAddArrticle);

Mon autre moyen est de le faire est de faire une instance du modèle de table. C'est la deuxième façon:

model=new DefaultTableModel(head, 0){

    @Override
    public boolean isCellEditable(int i, int i1) {
        return false; //To change body of generated methods, choose Tools | Templates.
    }

   };
jtable.setmodel(model);

Profitez de cela fonctionne bien pour moi. Tout ce que je veux faire, c'est vous aider parce qu'on m'a aidé beaucoup plus tôt.

4
répondu Mohammed Housseyn Taleb 2016-05-31 18:16:49

Avez-vous essayé simplement:

JTable table = new JTable();
table.setEnabled(false);

À Propos De JComponent.setEnabled (booléen) {[5] } Il dit:

Définit si ce composant est activé ou non. Un composant qui est activé peut répondre à l'entrée de l'utilisateur, tandis qu'un composant qui n'est pas activé ne peut pas répondre à l'entrée de l'utilisateur. Certains composants peuvent modifier leur représentation visuelle lorsqu'ils sont désactivés afin de fournir une rétroaction à l'utilisateur qu'ils ne peuvent pas prendre l'entrée.

Quand il s'agit de JTable il ne semble pas pour donner une rétroaction visuelle du tout. Avec l'avantage de pouvoir toujours cliquer sur les en-têtes de colonne. Et dans mon implémentation, l'application pourrait toujours changer le contenu des cellules.

3
répondu brat 2017-05-20 01:55:39
        tm = new javax.swing.table.DefaultTableModel()
                 {
                      public Class<?> getColumnClass(int column)
                      {
                        switch(column)
                        {
                        case 0:
                          return String.class;
                        case 1:
                          return String.class;
                        case 2:
                          return String.class;
                        case 3:
                          return String.class;
                        case 4:
                          return String.class;
                        case 5:
                              return String.class;
                            case 6:
                              return String.class;
                            case 7:
                              return String.class;
                            case 8:
                              return String.class;
                            case 9:
                                  return String.class;
                                case 10:
                                  return String.class;
                                case 11:
                                    return Boolean.class;

                          default:
                            return String.class;
                        }
                      }

                      @Override
                      public boolean isCellEditable(int row, int column) {
                         /* Set the 11th column as editable and rest non-
                              editable */
                          if(column==11){
                              return true;
                          }else{
 //all other columns to false
                         return false;
                          }
                      }
                    };
    table = new javax.swing.JTable(tm);
0
répondu Kavitha yadav 2018-03-05 12:15:31

Eh bien sur netbeans, vous pouvez faire un clic droit sur la table et cliquer sur le contenu de la table, puis vous allez dans l'onglet colonne et décochez la case "modifiable". Salutations!!

0
répondu Yahrs 2018-07-18 16:08:52

Je sais que je suis en retard mais j'espère que quelqu'un s'en servira. Vous pouvez simplement ajouter un écouteur de souris comme ceci:

jtable.addMouseListener( new MouseAdapter () {
    @Override
    public void mouseClicked ( MouseEvent e ) {
        columnIndex = replacedAssets.getSelectedColumn ();
        System.out.println ( "Double click on jtable" );
        if ( columnIndex == 1 || columnIndex == 2 ) {
            JOptionPane.showMessageDialog ( parent , "Editing this Field may cause error in the data." , "Error Edit Not Permitted For This Field" , JOptionPane.ERROR_MESSAGE );
        }
    }
});

CE code empêche d'éditer les colonnes des index 1 et 2 Vous pouvez supprimer la condition if pour que cela fonctionne pour toutes les colonnes.

0
répondu Sparks 2018-09-15 14:56:39