una - jtable java como usar
Hacer una celda en una tabla J editable: el valor predeterminado de la celda (2)
¿Está utilizando un TableCellEditor
apropiado para mostrar el componente para editar?
class MyTableCellEditor
extends DefaultCellEditor
{
@Override
public Component getTableCellEditorComponent(
JTable table,
Object value,
boolean isSelected,
int row,
int column)
{
final JTextField c = (JTextField) super.getTableCellEditorComponent(
table,
((Cell) value).text, // edit the text field of Cell
isSelected,
row,
column);
c.selectAll(); // automatically select the whole string in the cell
return c;
}
}
Tendrá que indicarle a su mesa que use este editor de celdas personalizado, además del renderizador de celdas personalizado.
myTable.setDefaultEditor(Cell.class, new MyTableCellEditor());
Estoy trabajando con Java, y estoy tratando de hacer que una celda en JTable sea editable. Mi clase implementa TableModel y extiende AbstractTableModel (para que pueda usar el método fireTableCellUpdated(rowIndex, columnIndex))
, y he implementado los métodos isCellEditable()
y setValueAt()
. Represento una sola celda en la tabla como un objeto de la clase Cell.
Ahora aquí está mi problema: la celda ya es editable, y cuando hago clic en ella, el cursor aparece en la celda, sin embargo, también aparece una cadena en la celda como esta: Cell@1e63e3d
. Elimino esta cadena y coloco en la celda el valor que quiero poner, luego hago clic en Entrar y funciona bien. Pero quiero cuando hago clic en la celda para que no aparezca nada, una cadena vacía y no Cell@1e63e3d
. Y no sé cómo configurar esta cadena vacía como predeterminada y dónde.
La clase My Cell almacena información (características) sobre el color de celda de la celda y su valor como variables de instancia.
Por favor, dime si necesitas más información.
¿Ha establecido un TableCellRenderer
y TableCellEditor
para su JTable
?
Para mostrar una celda , TableCellRenderer
se usa para representar los contenidos de una ubicación desde TableModel
. De forma predeterminada, usará el método toString
del Object
en esa ubicación, por lo que esto explicaría que Cell@1e63e3d
se muestre en la celda; ese es el resultado del llamado al método toString
en su objeto Cell
.
Al escribir un renderizador de células personalizado (una clase que implementa TableCellRenderer
), podrá devolver un Component
que quiera usar para mostrar el objeto Cell
, utilizando el método getTableCellRendererComponent
. En su caso, es posible que desee subclasificar un JLabel
que implemente TableCellRenderer
y establecerá el contenido de la etiqueta para reflejar el contenido de su objeto Cell
.
En cuanto a la edición de una celda , el TableCellEditor
recibe el Object
de TableModel
cuando se desea editar una celda con JTable
. El TableCellEditor
devolverá un Component
que se utiliza para editar el contenido de la celda (el Object
) utilizando el método getTableCellEditorComponent
.
En el caso que proporcione, creo que la creación de un JTextField
que implemente la interfaz TableCellEditor
podrá hacer el trabajo por usted. Cuando anula getTableCellEditorComponent
, compruebe que tiene una instancia del objeto Cell
(es decir, object instanceof Cell
) y, si ese es el caso, inicialice su JTextField
para que contenga el contenido de su objeto Cell
que desea visualizar o editar.
Lectura recomendada: Encontré las celdas de Rendering en el artículo del componente JTable de Swing de IBM developerWorks para ser bastante útil para aprender a manejar JTable
s y sus funciones de renderizado y edición de celdas. En particular, las secciones Creando procesadores personalizados y Editando celdas de tabla pueden ser de interés.