web-dev-qa-db-fra.com

Comment faire une table non éditable en java?

J'ai créé une fonction qui charge des données dans une JTable. Tout fonctionne bien sauf que toutes les cellules de ce tableau sont modifiables. Btw, j'ai utilisé defaultTableModel pour le modèle de table. Je fais cela dans l'EDI Netbeans. 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);
    } 
}
10
John
 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);

Modifié. Si vous le faites dans Netbeans IDE designer , suivez les étapes ci-dessous:

  • Sélectionnez le formulaire sur lequel le JTable est placé
  • Dans le volet de navigation, développez JScrollPane et cliquez avec le bouton droit sur JTable et sélectionnez Personnaliser le code comme indiqué ci-dessous:

Navigator Pane

  • Sur le personnaliseur de code, sélectionnez le deuxième menu déroulant et choisissez propriété personnalisée . Cela vous permet de modifier la définition de code DefaultTableModel.
  • Collez maintenant ceci: {public boolean isCellEditable(int row, int column){return false;}} avant le dernier blacket de clôture);

Votre configuration finale devrait ressembler à ceci:

  • Appuyez sur ok pour enregistrer - et le travail est fait.

Code Customizer

26
Bitmap

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

table.setModel(new DefaultTableModel() {

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

Utiliser Netbeans d'une autre manière est possible. si vous souhaitez continuer à utiliser le modèle de table par défaut comme le mentionne l'OP Il n'est pas nécessaire de créer un nouveau modèle de table si vous ne le souhaitez pas.

  1. Sélectionnez le JTable "propriétés"

  2. Sélectionnez le champ "TableModel" dans "propriétés", ce qui ouvrira un autre DialogBox.

  3. A partir de là, il est possible de modifier le champ de case à cocher "éditable" pour chaque colonne.

Vous ne savez pas à partir de quelle version cela démarre, mais j'utilise Netbeans 7.2

2
user2485933

Comme d'autres l'ont dit, vous devez créer votre propre variable DefaultTableModel et la remplacer par isCellEditable. Pour l'utiliser dans Netbeans Designer:

  • Clic droit sur votre table
  • Propriétés -> Code
  • Dans Code de création personnalisé ajoutez ceci: new JTable(new MyModel()) (en supposant que vous créez la classe MyModel extend AbstractTableModel)
1
alain.janinm

Essaye ça

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