2012-05-03 21 views
10

Creé una función que carga datos en un JTable. Todo funciona bien, excepto que todas las celdas de esta tabla son editables. Por cierto, utilicé defaultTableModel para el modelo de tabla. Estoy haciendo esto en Netbeans IDE. Por favor ayuda. Aquí está mi código:¿Cómo hacer un jtable no editable en java?

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); 
    } 
} 
+0

Este es el código de la actualización del modelo de datos. Las celdas editables tienen que ver con JTable. –

+0

Sugiero que evite los bloqueos de captura vacíos, sin duda si detecta cualquier posible 'Excepción' en la captura – Robin

+0

posible duplicado de [Cómo hacer que una tabla no sea editable] (http://stackoverflow.com/questions/1990817/how -to-make-a-jtable-non-editable) – Math

Respuesta

25
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); 

Editado. Si usted está haciendo esto en diseñador IDE Netbeans, siga los siguientes pasos:

  • Seleccione la forma en la que se coloca el JTable
  • Desde el panel de navegación, expanda JScrollPane y haga clic en JTable y seleccionar Personalizar Código como se muestra a continuación:

Navigator Pane

  • En el personalizador de código, seleccione el segundo menú desplegable y elija propiedad personalizada. Esto le permite editar la definición del código DefaultTableModel.
  • Ahora pegue esto: {public boolean isCellEditable(int row, int column){return false;}} antes del último cierre blacket );

su configuración final debe verse como se muestra a continuación:

  • pulse OK para guardar - y trabajo.

Code Customizer

+0

sugerencia correcta +1 – mKorbel

+0

gracias, pero no creo que esto funcione en mi código. el modelo de tabla predeterminado que estoy usando fue creado por netbeans. Desafortunadamente, no puedo editar el código. ¿Hay alguna otra forma de esto? – John

+0

Puedes hacerlo en Netbeans '@ alain.janinm' ya ha publicado cómo hacer esto en el diseñador Netbean. – Bitmap

6

Si utiliza DefaultTableModel puede anular el método isCellEditable y ponerlo en práctica en la construcción de GUI:

table.setModel(new DefaultTableModel() { 

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

Como otro dijo que hay que crear su propio DefaultTableModel y anular isCellEditable. Con el fin de utilizarlo en el diseñador de Netbeans:

  • Haga clic derecho sobre su mesa
  • Propiedades -> Código
  • en Código creación personalizada añadir lo siguiente: new JTable(new MyModel()) (suponiendo que se crea MyModel clase extiende AbstractTableModel)
1

Uso de Netbeans OTRA MANERA es posible. si desea continuar utilizando el modelo de tabla predeterminado, ya que OP menciona No es necesario crear un nuevo modelo de tabla si no lo desea.

  1. Seleccionar las "propiedades" JTable

  2. Seleccione el campo "TableModel" en "propiedades" que abrirán otro DialogBox.

  3. Desde allí, es posible modificar el campo de casilla de verificación "editable" para cada columna.

No está seguro de qué versión de este comienza pero yo estoy usando Netbeans 7.2

+0

Cuida explicar tu voto a la baja. Esta solución funciona – user2485933

+0

Esto funcionó bien para mí, estoy en NetBeans 7.0.1 – Gurce

0

intenta esto

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

Agregue algunos detalles –

Cuestiones relacionadas