2011-06-23 450 views
5

en un JTable, quiero cuando un usuario hace clic en una celda, esta frase se va a imprimir en la pantalla:Java: cómo seleccionar una sola celda en una JTable y no toda la fila

I am cell in row X and column Y 

donde x e Y son la fila y la columna de la celda cliqueada. Pero lo que quiero decir es: al hacer clic, por ejemplo, la celda de la fila 1 y la columna 4 consigo el siguiente:

I am cell in row 1 and column 0 
I am cell in row 1 and column 1 
I am cell in row 1 and column 2 
.... 
I am cell in row 1 and column N (N = number of columns) 

es decir, el conjunto de la fila se selecciona.

este es el código:

public class CustomTableCellRenderer extends DefaultTableCellRenderer{ 

public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) 
{ 

    Component cell = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column); 

      if(isSelected) System.out.println("I am cell in row "+row+" and column "+column); 



    return cell; 

} 

}

Gracias por cualquier ayuda.

+0

significa que quiere eliminar resaltar seleccionado JTable row – mKorbel

Respuesta

1

CellRenderers se utilizan para representar el contenido de la celda. Si desea encontrar la celda en la que hizo clic el mouse, use un MouseListener y en el método mouseClicken encuentre la celda.

14

No debe usar un procesador de celda para esto.

Habilite la selección de celda en su tabla (usando setCellSelectionEnabled(true)), luego obtenga el modelo de selección de la tabla (usando getSelectionModel()), y agregue un detector en este modelo de selección. Cada vez que se desencadena un evento, use getSelectedRow() y getSelectedColumn() para saber qué celda se ha seleccionado.

Tenga en cuenta que esto le dará la celda seleccionada, que se puede modificar con el mouse o el teclado. Si solo quiere saber dónde hizo clic el mouse, entonces vea la respuesta de KDM.

+2

Si desea restringir la selección para permitir solo una celda, como lo hice, querrá llamar a 'setSelectionMode (ListSelectionModel.SINGLE_SELECTION);' también. En conjunción con 'setCellSelectionEnabled (true)' esto produce el efecto deseado muy bien. – Jeff

6
myTable.setRowSelectionAllowed(false); 
0

Cambiar la if(isSelected) a if (isSelected && hasFocus). Esto se imprimirá solo para la celda seleccionada, en lugar de la fila seleccionada.

respuesta de mKorbel también debería funcionar ...

0

myTable.setCellSelectionEnabled (true);

Cuestiones relacionadas