editable disable column java swing jtable edit

disable - jtable no editable java



Deshabilitar ediciĆ³n de usuario en JTable (7)

Cuando se crea un componente JTable, la edición de celda se habilita de manera predeterminada. ¿Cómo puedo evitar que el usuario edite el contenido de una JTable?


¿Has probado simplemente?

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

Acerca de JComponent.setEnabled(boolean) dice:

Establece si este componente está habilitado o no. Un componente que está habilitado puede responder a la entrada del usuario, mientras que un componente que no está habilitado no puede responder a la entrada del usuario. Algunos componentes pueden alterar su representación visual cuando están deshabilitados con el fin de proporcionar retroalimentación al usuario de que no pueden tomar la entrada.

Cuando se trata de JTable, no parece dar ningún tipo de retroalimentación visual. Con la ventaja de poder hacer clic en los encabezados de las columnas. Y en mi implementación, la aplicación aún podría cambiar el contenido de las celdas.


Bien en netbeans, puede hacer clic derecho en la tabla y hacer clic en el contenido de la tabla, luego ir a la pestaña de la columna y desmarcar la casilla de verificación "Editable". ¡¡Saludos!!


Hola, estoy trabajando mucho en Java, así que te voy a decir lo que quiero: hay dos posibilidades, la primera en netbeans. Ve a personalizar el código y hazlo así:

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

Mi otra forma es hacerlo es hacer una instancia del modelo de tabla. Esta es la segunda forma:

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

Disfrutar esto está funcionando bien para mí. Todo lo que quiero hacer es ayudarlos porque me ayudaron mucho antes.


Puede crear una JTable usando el siguiente código:

JTable jTable = new JTable() { private static final long serialVersionUID = 1L; public boolean isCellEditable(int row, int column) { return false; }; };

Básicamente, lo que estamos haciendo aquí es anular isCellEditable y siempre devolver false desde allí. Esto hará que JTabel no editabe.


Una JTable utiliza un objeto AbstractTableModel. Esto es lo que pasa al constructor de JTable. Puede escribir su propio AbstractTableModel de la siguiente manera

public class MyTableModel extends AbstractTableModel { public boolean isCellEditable(int row, int column){ return false; } }

y luego inicialice su JTable como

JTable myTable = new JTable(new MyTableModel());


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


myTable.setDefaultEditor(Object.class, null);