No puede hacer que un public voidmétodo devuelva un booleano.
Geo
1
También el método esisCellEditable
Matt
Si bien el enfoque que especifica funciona, no existe un método como isEditable en AbstractTableModel. Lo que existe es el método isCellEditable (int, int) que toma rowIndex y coulmnIndex como parámetros. El usuario puede habilitar / deshabilitar selectivamente la edición para una fila / columna en particular anulando el método "isCellEditable" o puede usar la implementación predeterminada para deshabilitar la edición para todas las celdas.
sateesh
150
Puede anular el método isCellEditable e implementarlo como desee, por ejemplo:
Esta es también la solución para hacer que los eventos de doble clic funcionen correctamente con JTable. Un doble clic normalmente es consumido por una celda cuando entra en modo de edición, y esto evitará que la celda lo haga y en su lugar enviará el doble clic al JTable. ¡Gracias por la solución, Nelson!
anacoreta
2
@Jop, entonces algo está mal en otra parte de su código: una tabla nunca desaparece solo porque el modelo de la tabla no es editable ...
kleopatra
1
@DougHauf parece que no conoce Java, o realmente ningún lenguaje tan bien, ya que la mayoría de los lenguajes usan la misma sintaxis para operaciones booleanas ... que devuelve un booleano ... Le recomendaría que busque un Java muy básico tutorial y empezar desde el principio. Tratar de saltar al swing de esta manera terminará aprendiendo todo mal.
seekchengine27
1
@DougHauf, == es un alias para la función Equals que compara los objetos (a la izquierda y a la derecha) y devuelve un valor booleano. Supongo que ha usado la declaración si eso evalúa booleanos y generalmente se usa con este tipo de expresiones, por ejemplo, si (a == b) hacer algo. Intente imprimir a == bo simplemente asigne esto para una variable y comprenda el resultado.
nelson eldoro
1
La solución anterior tampoco me funciona. Hace que la columna y los elementos de datos de la tabla desaparezcan. Mi tabla se crea con table = new JTable (tempTable, columnNames) ;, donde tempTable es una Cadena [] [] y Nombres de columna es una Cadena []. Creo que el problema se debe a que el nuevo DefaultTableModel () no especifica los nombres de datos y columnas para el modelo de tabla. ¿Cómo los especifico en el modelo de datos? Intenté table.setModel (tableModel (tempTable, columnNames)) ;, pero eso provoca un error de "no se puede encontrar el símbolo".
¡Esto es genial si no estás usando un modelo de mesa personalizado!
Kingsolmn
26
Pero no podrá seleccionar una celda o fila.
tianz
3
Esto se verá "atenuado" en algunas L & F.
stommestack
2
Eso funciona. Gracias. Sin embargo, todavía me gustaría saber por qué el método del modelo de datos de nelson hace que la columna de la tabla y los elementos de datos desaparezcan.
user1164199
1
¡Funciona bien para mí!
Colby Cox
10
Si está creando el TableModel automáticamente a partir de un conjunto de valores (con "new JTable (Vector, Vector)"), quizás sea más fácil eliminar editores de columnas:
JTable table =newJTable(my_rows, my_header);for(int c =0; c < table.getColumnCount(); c++){Class<?> col_class = table.getColumnClass(c);
table.setDefaultEditor(col_class,null);// remove editor}
-1 pirateo aleatorio en ubicaciones inapropiadas nunca es una opción
kleopatra
Por favor, ¿puede explicar por qué se trata de un "pirateo aleatorio en ubicaciones inapropiadas"? Según el documento setDefaultEditor () : "Si el editor es nulo, elimina el editor predeterminado para esta clase de columna".
Freesoft
sí, y vuelve al valor predeterminado para Objeto ;-) Por lo que realmente no deshabilita la edición (solo accidentalmente si una de las columnas es de tipo Objeto), también le faltan columnas que podrían tener un editor personalizado. Hay una API destinada a ser implementada para controlar la editabilidad de la celda, y esa es la del modelo. Todo lo demás es piratería y, como tal, inapropiado.
kleopatra
Entiendo tu argumento. Pero lo que entendí de la API es que, si creo una tabla de forma rápida (con "new JTable (Vector, Vector)"), la tabla tendrá editores predeterminados para todas sus columnas. Por lo tanto, si ejecuto "table.setDefaultEditor (column, null)", eliminaré el editor predeterminado de la columna, por lo que la columna no tendrá ningún editor y la columna no será editable. ¿Lo será?
freesoft
Creé la tabla de esa manera new JTable(Vector, Vector)y funcionó para mí. No necesito editor en ninguna celda, así que tienes mi voto.
Dani Sancas
3
Usé esto y funcionó: es muy simple y funciona bien.
Respuestas:
Puede utilizar un
TableModel
.Defina una clase como esta:
en realidad
isCellEditable()
estáfalse
por defecto, por lo que puede omitirlo. (ver: http://docs.oracle.com/javase/6/docs/api/javax/swing/table/AbstractTableModel.html )Entonces usa el
setModel()
método de tuJTable
.fuente
public void
método devuelva un booleano.isCellEditable
Puede anular el método isCellEditable e implementarlo como desee, por ejemplo:
o
Nota para si su JTable desaparece
Si
JTable
está desapareciendo cuando usa esto, lo más probable es que deba usar elDefaultTableModel(Object[][] data, Object[] columnNames)
constructor en su lugar.fuente
fuente
solo agrega
Funciona bien para mí.
fuente
Si está creando el TableModel automáticamente a partir de un conjunto de valores (con "new JTable (Vector, Vector)"), quizás sea más fácil eliminar editores de columnas:
Sin editores, los datos no se podrán editar.
fuente
new JTable(Vector, Vector)
y funcionó para mí. No necesito editor en ninguna celda, así que tienes mi voto.Usé esto y funcionó: es muy simple y funciona bien.
fuente
crear una nueva clase DefaultCellEditor:
y use setCellEditor:
fuente