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.