Deshabilitar edición de usuario en JTable


Cuando se crea un componente JTable, la edición de celdas está habilitada de forma predeterminada. ¿Cómo puedo evitar que el usuario edite el contenido de una JTable?

Author: AsksAnyway, 2012-03-29

8 answers

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

public class MyTableModel extends AbstractTableModel {

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

}

Y luego inicializar su JTable como

JTable myTable = new JTable(new MyTableModel());
 37
Author: richard,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-03-29 05:25:35

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 falso de ella. Esto hará un JTabel no editabe.

 41
Author: Rahul Borkar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-06-28 04:49:20
myTable.setDefaultEditor(Object.class, null);
 12
Author: Aïssa Ghouti,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-04-10 23:37:14

Hola, estoy trabajando mucho en Java, así que voy a darte mi camino: Hay dos posibilidades, la primera bajo netbeans. Ve a personalizar 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 de hacerlo es hacer una instancia del modelo de tabla. Esta es la segunda manera:

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

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

 4
Author: Mohammed Housseyn Taleb,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-05-31 18:16:49

Has intentado simplemente:

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

Acerca de JComponent.setEnabled (booleano) 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 para proporcionar comentarios al usuario que no pueden tomar entrada.

Cuando se trata de JTable no parece para dar cualquier retroalimentación visual en absoluto. Con la ventaja de seguir siendo capaz de hacer clic en los encabezados de columna. Y en mi implementación la aplicación todavía podría cambiar el contenido de las celdas.

 3
Author: brat,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-20 01:55:39
        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);
 0
Author: Kavitha yadav,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-03-05 12:15:31

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

 0
Author: Yahrs,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-07-18 16:08:52

Sé que llego tarde, pero espero que alguien haga uso de esto. Usted puede agregar simple oyente del ratón como este:

jtable.addMouseListener( new MouseAdapter () {
    @Override
    public void mouseClicked ( MouseEvent e ) {
        columnIndex = replacedAssets.getSelectedColumn ();
        System.out.println ( "Double click on jtable" );
        if ( columnIndex == 1 || columnIndex == 2 ) {
            JOptionPane.showMessageDialog ( parent , "Editing this Field may cause error in the data." , "Error Edit Not Permitted For This Field" , JOptionPane.ERROR_MESSAGE );
        }
    }
});

Este código impide editar las columnas de los índices 1 y 2 puede eliminar la condición if para que esto funcione para todas las columnas.

 0
Author: Sparks,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-09-15 14:56:39