Olá a todos!
Fiz o seguinte código java em baixo que altera a cor do texto de uma coluna do JTable em função da String escrita.
O meu problema está na cor de seleção das linhas da tabela que não consegue sobrepor-se na coluna onde apliquei a cor do texto!!
Alguém consegue ajudar-me a encontrar uma solução para este problema?
Obrigados
public class Celula_Tipo_Texto extends JFrame {
public Celula_Tipo_Texto() {
// Nomes das colunas da tabela:
String[] colunas = {"Nome", "Idade", "Sexo"};
// Linhas da tabela
Object[][] conteudo = {
{"Osmar J. Silva", "32", "Masculino"},
{"Maria Clara Gomes", "19", "Feminino"},
{"Fernando Gomes", "15", "Masculino"},
{"Indefenido", "15", "Outro"},
{"Rute Cassandra", "10", "Feminino"}
};
// Constrói a tabela
JTable tabela = new JTable(conteudo, colunas);
// Render para alterar a cor do texto da Célula da terceira coluna:
TableCellRenderer tcr = new ColorirTexto();
TableColumn column = tabela.getColumnModel().getColumn(2);
column.setCellRenderer(tcr);
tabela.setPreferredScrollableViewportSize(new Dimension(350, 100));
// Define a cor para linha selecionada:
tabela.setSelectionBackground(new Color(204,204,0));
Container c = getContentPane();
c.setLayout(new FlowLayout());
JScrollPane scrollPane = new JScrollPane(tabela);
c.add(scrollPane);
setLocationRelativeTo(this);
setSize(400, 300);
setVisible(true);
}
public static void main(String args[]) {
Celula_Tipo_Texto app = new Celula_Tipo_Texto();
app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
// Classe para Colorir o Texto de uma Coluna da Tabela:
class ColorirTexto extends JLabel implements TableCellRenderer {
@Override
public Component getTableCellRendererComponent(
JTable table, Object value, boolean isSelected,
boolean hasFocus, int row, int column) {
// ALTERA A COR:
if (value.toString().equals("Masculino")) {// Caso o valor da Célula seja igual a "Masculino":
setForeground(Color.BLUE);//Altera para esta cor.
} else if (value.toString().equals("Feminino")) {// Caso o valor da Célula seja igual a "Masculino":
setForeground(Color.RED);//Altera para esta cor.
} else {//Nos restantes casos:
setForeground(Color.BLACK);//Altera para esta cor.
}
setText(value.toString());
return this;
}
@Override
public void validate() {
}
@Override
public void revalidate() {
}
@Override
protected void firePropertyChange(String propertyName,
Object oldValue, Object newValue) {
}
@Override
public void firePropertyChange(String propertyName,
boolean oldValue, boolean newValue) {
}
}