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?
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());
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.
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.
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.
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);
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!!
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.