У меня есть JTable, и я хочу нарисовать столбец разными цветами в зависимости от значения ячейки.Чтобы сделать это, я пытаюсь создать «TableCellRender», но не могу заставить его работать, значения кажутся скрытыми после «setDefaultRenderer».
Как я могу это сделать?
пытаюсь
TableModel
public class PartidasTableModel extends AbstractTableModel{
private List<Partida> lista;
private String[] colunas = {"Data ", "Casa x Visitante ", "Banca Inicial ", "Banca Final ", "Saldo ", "Green/Red "};
private ControlaDatas cDatas = new ControlaDatas();
public PartidasTableModel(){
this.lista = new ArrayList<Partida>();
}
public PartidasTableModel(List<Partida> lista){
this();
this.lista.addAll(lista);
}
@Override
public int getRowCount() {
return this.lista.size();
}
@Override
public int getColumnCount() {
return this.colunas.length;
}
//private String[] colunas = {"Data ", "Casa x Visitante ", "Banca Inicial ", "Banca Final ", "Saldo ", "Green/Red "};
public String getColumnName(int column){
if(colunas[column] == "Data "){
return "Data ";
}else if(colunas[column] == "Casa x Visitante "){
return "Casa x Visitante ";
}else if(colunas[column] == "Banca Inicial "){
return "Banca Inicial ";
}else if(colunas[column] == "Banca Final "){
return "Banca Final ";
}else if(colunas[column] == "Saldo "){
return "Saldo ";
}else if(colunas[column] == "Green/Red "){
return "Green/Red ";
}
return "";
}
//private String[] colunas = {"Data ", "Casa x Visitante ", "Banca Inicial ", "Banca Final ", "Saldo ", "Green/Red "};
public Class getColumnClass(int column){
if(colunas[column] == "Data "){
return String.class;
}if(colunas[column] == "Casa x Visitante "){
return String.class;
}else if(colunas[column] == "Banca Inicial "){
return String.class;
}else if(colunas[column] == "Banca Final "){
return String.class;
}else if(colunas[column] == "Saldo "){
return String.class;
}else if(colunas[column] == "Green/Red "){
return String.class;
}
return String.class;
}
//private String[] colunas = {"Conta ", "Vencto. ", "Capital R$ ", "Juros R$ "};
@Override
public Object getValueAt(int rowIndex, int columnIndex) {
Partida e = (Partida)lista.get(rowIndex);
switch(columnIndex){
case 0: return cDatas.getDataFormatada(e.getDtLancamento());
case 1: return e.getTimeCasa() + " x " + e.getTimeVisitante();
case 2: return FormataValorMonetario.getValorFormatado(e.getValorInicialBanca());
case 3: return FormataValorMonetario.getValorFormatado(e.getValorFinalBanca());
case 4: return FormataValorMonetario.getValorFormatado(e.getSaldo());
case 5: return isGreenOrRed(e.getGreenRed());
default: return new String();
}
}
private String isGreenOrRed(int value){
if(value == 1){
return "GREEN";
}
if (value == 2){
return "RED";
}
return "";
}
/** retorna o objeto */
public Partida getObject(int row){
return lista.get(row);
}
/** remove registro da tabela */
public void removeRow(int row){
this.lista.remove(row);
fireTableDataChanged();
}
/** altera a tabela */
public void changeTabela(List<Partida> novaLista){
this.lista = novaLista;
fireTableDataChanged();
}
}
TableCellRenderer
public class PartidaCustomRenderer implements TableCellRenderer{
private JLabel label;
public PartidaCustomRenderer() {
label = new JLabel();
label.setOpaque(true);
}
@Override
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
Object obj = table.getValueAt(row, 5);//
String redGreen = (String)obj;
//pinta red/green
if(column == 5 && redGreen == "RED"){
label.setBackground(Color.red);
}else if(column == 5 && redGreen == "GREEN"){
label.setBackground(Color.green);
}
return label;
}
private int getAlinhamento(int coluna){
switch (coluna) {
case 0:
return SwingConstants.CENTER;
case 1:
return SwingConstants.LEFT;
case 2:
default:
return SwingConstants.RIGHT;
}
}
}
Использование
public class ViewPartidas extends javax.swing.JDialog {
private PartidaDAO dao = new PartidaDAO();
private List<Partida> lista = new ArrayList<Partida>();
private PartidasTableModel model;
public ViewPartidas(java.awt.Frame parent, boolean modal) {
super(parent, modal);
initComponents();
init();
}
private void init(){
//table
lista = dao.findAll(Partida.FIND_ALL, Partida.class);
model = new PartidasTableModel(lista);
tabela.setModel(model);
tabela.setDefaultRenderer(Object.class, new PartidaCustomRenderer());
tabela.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
tabela.setAutoCreateColumnsFromModel(false);
tabela.getTableHeader().setFont(new Font("Tahoma" , Font.BOLD, 11));
tabela.getTableHeader().setReorderingAllowed(false);
tabela.setFont(new Font("Tahoma", Font.BOLD, 10));
}
}