web-dev-qa-db-fra.com

Désactiver la modification 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?

26
Parag

Un JTable utilise un objet AbstractTableModel. C'est la chose que vous transmettez au constructeur de la 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 en tant que 

JTable myTable = new JTable(new MyTableModel());
39
richard

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 de remplacer isCellEditable et de toujours retourner faux Cela fera un JTabel non éditable.

41
Rahul Borkar
myTable.setDefaultEditor(Object.class, null);
13
Aïssa Ghouti

Avez-vous essayé simplement:

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

À propos de JComponent.setEnabled (booléen) il dit:

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

En ce qui concerne JTable, il ne semble pas y avoir de retour visuel du tout. Avec l'avantage de pouvoir toujours cliquer sur les en-têtes de colonnes. Et dans mon implémentation, l'application pourrait encore changer le contenu des cellules.

4
brat

Bonjour, je travaille beaucoup sur Java, je vais donc 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 créer 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);

Profite que ça marche bien pour moi. Tout ce que je veux faire, c'est vous aider, car on m'a beaucoup aidé plus tôt.

4

Je sais que je suis en retard, mais j'espère que quelqu'un l'utilisera. Vous pouvez simplement ajouter un auditeur 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 la modification des colonnes des index 1 et 2. Vous pouvez supprimer la condition if pour que cela fonctionne pour toutes les colonnes.

0
Sparks
        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
Kavitha yadav

Sur Netbeans, vous pouvez cliquer avec le bouton droit de la souris sur le tableau, cliquer sur le contenu du tableau, puis accéder à l'onglet des colonnes et décocher la case "Modifiable". Salutations!!

0
Yahrs