93 votes

Comment faire un JTable non-modifiable

Comment faire un JTable non-modifiable? Je ne veux pas que mes utilisateurs puissent modifier les valeurs dans les cellules en double-cliquant sur eux.

Toute aide serait grandement appréciée.

Merci.

144voto

nelson eldoro Points 749

Vous pouvez remplacer la méthode isCellEditable et à mettre en œuvre que vous le souhaitez par exemple:

//instance table model
DefaultTableModel tableModel = new DefaultTableModel() {

    @Override
    public boolean isCellEditable(int row, int column) {
       //all cells false
       return false;
    }
};

table.setModel(tableModel);

ou

//instance table model
DefaultTableModel tableModel = new DefaultTableModel() {

   @Override
   public boolean isCellEditable(int row, int column) {
       //Only the third column
       return column == 3;
   }
};

table.setModel(tableModel);

37voto

Siddhu Points 354

ajoutez simplement

table.setEnabled(false);

il fonctionne très bien pour moi.

20voto

JCasso Points 2822

Vous pouvez utiliser un TableModel.

Définir une classe comme ceci:

public class MyModel extends AbstractTableModel{
    //not necessary
}

en fait isCellEditable est false par défaut de sorte que vous pouvez omettre. (voir: http://docs.oracle.com/javase/6/docs/api/javax/swing/table/AbstractTableModel.html)

Ensuite, utilisez setModel méthode de votre JTable.

JTable myTable = new JTable();
myTable.setModel(new MyModel());

10voto

freesoft Points 138

Si vous êtes à la création de la TableModel automatiquement à partir d'un ensemble de valeurs (avec "new JTable(vecteur, Vecteur)"), c'est peut-être plus facile de supprimer des éditeurs de colonnes:

JTable table = new JTable(my_rows, my_header);

for (int c = 0; c < table.getColumnCount(); c++)
{
    Class<?> col_class = table.getColumnClass(c);
    table.setDefaultEditor(col_class, null);        // remove editor
}

Sans éditeurs, les données seront pas modifiables.

2voto

Ehsan Horrible Points 51

créer de nouveaux DefaultCellEditor classe :

public static class Editor_name extends DefaultCellEditor {
  public Editor_name(JCheckBox checkBox) {
   super(checkBox);
  }
  @Override
  public boolean isCellEditable(EventObject anEvent) {
    return false;
  }
}

et l'utilisation setCellEditor :

JTable table = new JTable();
table.getColumn("columnName").setCellEditor(new Editor_name(new JCheckBox()));

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X