11
votes

Comment faire une JTABLE non modifiable en Java?

J'ai créé une fonction qui charge des données dans un JTable code>. Tout fonctionne bien, sauf que toutes les cellules de cette table sont modifiables. BTW, j'ai utilisé DefaultTableModel code> pour le modèle de table. Je fais cela dans NetBeans IDE. S'il vous plaît aider. Voici mon code:

private void updateTable(String searchText){

    if(searchText != null)
        this._sqlCmd = this._sqlCmd + " WHERE "+columnCombo.getSelectedItem()+" LIKE '%"+searchText+"%'";
    jTable1.setSurrendersFocusOnKeystroke(true);
    table = (javax.swing.table.DefaultTableModel) jTable1.getModel();  

    try{
        table.setRowCount(0);
    }catch(Exception e){}

    try {
        ResultSet rs = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY).executeQuery(_sqlCmd);
        while (rs.next()){
            Object[] data = new Object[numOfCols];
            for(int i=0; i<data.length; i++){
                data[i] = rs.getObject(i+1);
            }
            table.addRow(data);
        }
        table.fireTableDataChanged();


    } catch (SQLException ex) {
        Logger.getLogger(FindContactGrid.class.getName()).log(Level.SEVERE, null, ex);
    } 
}


3 commentaires

Ceci est le code mettant à jour le modèle de données. Les cellules modifiables ont à voir avec la jtalie à la place.


Je suggère fortement d'éviter les blocs de capture vides, certainement si vous attrapez une exception possible dans la capture


Dupliqué possible de Comment faire une JTable non modifiable


6 Réponses :


34
votes
 private TableModel model = new DefaultTableModel(data, columnNames)
  {
    public boolean isCellEditable(int row, int column)
    {
      return false;//This causes all cells to be not editable
    }
  };
  private JTable table = new JTable(model);
Edited.
If you are doing this in Netbeans IDE designer, follow the steps below:
  
  Select the form on which the JTable is placed
  From the Navigation Pane, expand JScrollPane and right-click on JTable and Select Customize Code as shown below:
  

On the code customizer, select the second drop down and choose custom property. This enables you to edit the DefaultTableModel code definition.
Now paste this: 
{public boolean isCellEditable(int row, int column){return false;}} before the last closing blacket );
Your final setup should look as shown below:
Press ok to save - and job done.

3 commentaires

Merci mais je ne pense pas que cela fonctionnera dans mon code. Le modèle de table par défaut que j'utilise a été créé par Netbeans. Malheureusement, je ne peux pas éditer le code. Y a-t-il un autre moyen pour cela?


Vous pouvez le faire dans NetBeans @ alain.janinm a déjà posté comment faire cela dans NetBean Designer.


@ user1349213 Voir la version modifiée de ma réponse sur la façon de faire cela dans Netbeans.



9
votes

Si vous utilisez DefaultTableModel, vous pouvez remplacer la méthode iScelleditable et l'implémenter lors de la construction de GUI:

table.setModel(new DefaultTableModel() {

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


0 commentaires

1
votes

Comme autre dit que vous devez vous créer posséder posséder votre propre par défautTableModel et la remplacement iScelleditable . Afin de l'utiliser dans NetBeans Designer:

  • Cliquez avec le bouton droit de la souris sur votre table
  • Propriétés -> Code
  • dans Code de création personnalisé Ajouter ceci: Nouvelle JTABLE (Nouveau MyModel ()) (En supposant que vous créez une classe MyModel étend abstracttablodel)

0 commentaires

2
votes

Utiliser NetBeans Une autre manière est possible. Si vous souhaitez continuer à utiliser le modèle de tableau par défaut comme l'op mentionne Il n'est pas nécessaire de créer un nouveau modèle de table si vous ne voulez pas.

  1. Sélectionnez les "propriétés" JTAble

  2. Sélectionnez le champ "TableModel" dans "Propriétés" qui ouvrira une autre boîte de dialogue.

  3. de là, il est possible de modifier le champ de la case "modifiable" pour chaque colonne.

    Je ne sais pas à partir de quelle version cela commence mais j'utilise NetBeans 7.2


1 commentaires

Soin d'expliquer votre bowvote. Cette solution fonctionne.



2
votes

Essayez ceci xxx


1 commentaires

Ajouter quelques détails



-1
votes
JTextField f = new JTextField();
f.setEditable(false);
for (int i = 0; i < table.getColumnModel().getColumnCount(); i++) {
    table.getColumnModel().getColumn(i).setCellEditor(new DefaultCellEditor(f));
}

2 commentaires

Bien que cela puisse fonctionner, ce n'est pas le moyen de y parvenir. La réponse déjà acceptée donne la méthode correcte.


C'est une autre façon de désactiver Jtalable et cela fonctionne parfaitement.