una tabla resaltar ponerle pintar hacer formato fila diseño dar configurar como color celdas celda cambiar java jtable tablecellrenderer

tabla - ¿Por qué mi renderizador de células personalizadas Java no muestra resaltado cuando se selecciona la fila/celda?



java pintar celdas (3)

Tengo un procesador de células personalizado para que una celda pueda ajustar las palabras para que se pueda leer más contenido. Aquí está el código:

import java.awt.Color; import java.awt.Component; import java.awt.Insets; import javax.swing.JTable; import javax.swing.JTextArea; import javax.swing.table.TableCellRenderer; public class TextWrapCellRenderer extends JTextArea implements TableCellRenderer { private static final long serialVersionUID = 1L; public TextWrapCellRenderer() { setLineWrap(true); setWrapStyleWord(true); setMargin(new Insets(0, 5, 0, 5)); setSelectionColor(Color.GREEN); } public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { setText((String)value); setSize(table.getColumnModel().getColumn(column).getWidth(),getPreferredSize().height); setSelectionColor(Color.GREEN); return this; } }

Actualización : el renderizador de celda se usa correctamente, pero cuando el usuario selecciona una fila en JTable, solo muestra el resaltado de las celdas renderizadas no personalizadas. Sin embargo, el resaltado se muestra para todas las otras celdas de esa fila. Esto deja solo una celda con un fondo blanco, mientras que el resto de la fila tiene azul (en mi caso) como el color de fondo resaltado.


Creo que primero debes llamar a la implementación predeterminada:

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

La implementación predeterminada procesará todos los argumentos habituales como isSelected y hasFocus , configurará el texto y el color de fondo, activará el borde del enfoque, etc. Luego, cambiará el texto que se muestra, cambiará el tamaño de la celda y lo return this .


Usando setSelectionColor (Color.GREEN); usted está diciendo exactamente qué usuario selecciona es verde. ¿Cuál es tu problema y qué esperas que haga tu código?


isSelected verificar el argumento isSelected para ver si la celda está seleccionada o no, algo así como:

public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { setText((String)value); setSize(table.getColumnModel().getColumn(column).getWidth(),getPreferredSize().height); setSelectionColor(Color.GREEN); if (isSelected) { setBackground(table.getSelectionBackground()); setForeground(table.getSelectionForeground()); } else { setBackground(table.getBackground()); setForeground(table.getForeground()); } return this; }