Foro sobre Java SE > Seleccionar JLabel en JTable
Ese método tiene un parámetro, isSelected, que puedes usar para cambiar el background del JLabel, en función del que usan las celdas de la JTable.
@choces
Mil gracias, la verdad es que era algo de lo más obvio. Una de esas cosas que se te pasan por estar a diez otras historias a la vez
Le he añadido un simple
if (isSelected)
{
etiqueta.setOpaque(true);
float[] colores = new float[3];
Color.RGBtoHSB(22, 87, 100, colores);
etiqueta.setBackground(Color.getHSBColor(colores[0],colores[1],colores[2]));
}
al código, y ahora se me subraya. Lo que no tengo muy claro ahora es como hacer que se subraye del mismo color que el resto de la tabla, porque haciendo la chapuza esta se me queda un poco más verdoso que el original. Investigaré al respecto, a ver que saco
Muchas gracias de nuevo :)
He tirado al final del ResourceMap de la aplicación. Ya se subraya. Que bonito queda, oigan
Yo suelo usar esto en los renderers:
private static final Color selectForeground = UIManager.getColor("Table.selectionForeground");
private static final Color selectBackground = UIManager.getColor("Table.selectionBackground");
private static final Color background = UIManager.getColor("Table.background");
Así me aseguro de que si cambio el LaF de la aplicación, los colores sean consistentes.
Hola a todos.
En estos momentos me encuentro realizando un programa que usa un JTable para mostrar una lista de proyectos de una empresa y permitir al usuario hacer doble click sobre ellos para editarlos. Una de las columnas, en concreto, muestra el icono del proyecto, una imagen definida como byte[]. El render que uso para mostrarla lo adjunto aquí:
public Component getTableCellRendererComponent(JTable table, Object value,
boolean isSelected, boolean hasFocus, int row, int column)
{
JLabel etiqueta = new JLabel();
if (value instanceof byte[])
{
etiqueta.setIcon(new ImageIcon((byte[]) value));
etiqueta.setHorizontalAlignment(JLabel.CENTER);
etiqueta.setHorizontalTextPosition(JLabel.CENTER);
etiqueta.setVerticalTextPosition(JLabel.BOTTOM);
}
return etiqueta;
}
Y no tiene más misterio, en principio. El Render se aplica cuando la celda recibe un valor de byte[], mostrando el icono. Sin embargo, me he dado cuenta de que ocurre algo que no había previsto: El JLabel no se selecciona. Bueno, sí. Pero no se "ilumina" en azul, como el resto de la fila. La razón me parece fácilmente deducible: Al ser un objeto en sí mismo, tiene su propio campo de Background, por lo cuál este no cambia al aplicarle la selección a la línea. El resultado, tanto de la línea sin seleccionar como de la línea seleccionada, es como se puede observar en esta imagen: http://fc03.deviantart.net/fs70/f/2012/335/0/f/icono_seleccion_1_by_kyrawaylaird-d5mov7d.png
¿Alguien tiene idea de como podría solventar esto? No es que sea un gran trauma, pero queda algo chapuzas que se ilumine todo menos la imagen...