[Resolvido]JTable não coloriu celula com formatação

6 respostas
Resplandes

Boa noite amigos tenho uma JTable img abaixo

qual classe deve chavar aqui amigos para poder colorir as celulas formatadas ? obrigado amigos

table.setDefaultRenderer(Integer.class, renderer);
        table.setDefaultRenderer(Double.class, renderer);
        table.setDefaultRenderer(Object.class, renderer);
        table.setDefaultRenderer(Date.class, renderer);

6 Respostas

ViniGodoy

Depende, o que você retorna no getColumnClass do seu TableModel?

Resplandes

Retorna java.lang.Double ViniGodoy

ViniGodoy

Tem certeza? Posta seu model.

Resplandes
Model Patrimonio
import java.io.Serializable;


public class Patrimonio implements Serializable{

	
	private static final long serialVersionUID = 1L;
	
	private int id;
	private String descricao;
	private double valor;
	private double vlr_despesas;
	private double vlr_lucro;
	private String tipo_despesas;
	private String tipo_lucro;
	private String situacao;
	private String dt_cadastro;
	
	public Patrimonio(){
		super();
	}

	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public String getDescricao() {
		return descricao;
	}

	public void setDescricao(String descricao) {
		this.descricao = descricao;
	}

	public double getValor() {
		return valor;
	}

	public void setValor(double valor) {
		this.valor = valor;
	}

	

	public double getVlr_despesas() {
		return vlr_despesas;
	}

	public void setVlr_despesas(double vlr_despesas) {
		this.vlr_despesas = vlr_despesas;
	}

	public double getVlr_lucro() {
		return vlr_lucro;
	}

	public void setVlr_lucro(double vlr_lucro) {
		this.vlr_lucro = vlr_lucro;
	}

	public String getTipo_despesas() {
		return tipo_despesas;
	}

	public void setTipo_despesas(String tipo_despesas) {
		this.tipo_despesas = tipo_despesas;
	}

	public String getTipo_lucro() {
		return tipo_lucro;
	}

	public void setTipo_lucro(String tipo_lucro) {
		this.tipo_lucro = tipo_lucro;
	}

	public String getSituacao() {
		return situacao;
	}

	public void setSituacao(String situacao) {
		this.situacao = situacao;
	}

	public String getDt_cadastro() {
		return dt_cadastro;
	}

	public void setDt_cadastro(String dt_cadastro) {
		this.dt_cadastro = dt_cadastro;
	}
	
	

}

uso essas classes para formatar as celulas

import java.awt.Component;
import java.text.NumberFormat;
import java.util.Locale;

import javax.swing.AbstractCellEditor;
import javax.swing.JFormattedTextField;
import javax.swing.JTable;
import javax.swing.table.TableCellEditor;

public class MoedaCellEditor extends AbstractCellEditor implements TableCellEditor {  
    
    /** 
     * classe para editar a celula com formato de moeda 
     */  
    private static final long serialVersionUID = 1L;  
    private JFormattedTextField moeda = null;  
    private NumberFormat formatter = NumberFormat.getCurrencyInstance(new Locale("pt","BR"));  
      
    private JFormattedTextField getCell() {  
        if (moeda == null)  
            moeda = new JFormattedTextField(formatter);  
        return moeda;  
    }  
  
    public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) {  
        getCell().setValue(value);  
        return getCell();  
    }  
  
    public Object getCellEditorValue() {  
        return getCell().getValue();  
    }  
  
}
import java.awt.Component;
import java.text.NumberFormat;
import java.util.Locale;

import javax.swing.JLabel;
import javax.swing.JTable;
import javax.swing.SwingConstants;
import javax.swing.table.TableCellRenderer;

public class MoedaCellRender extends JLabel implements TableCellRenderer {  
	  
    /** 
     * classe para mostrar a celula com formato de moeda 
     */  
    private static final long serialVersionUID = 1L;  
    private JLabel cell = null;  
    private NumberFormat formatter = NumberFormat.getCurrencyInstance( new Locale("pt","BR") ); // Locale.getDefault()  
      
    private JLabel getCell() {  
        if (cell == null)  
            cell = new JLabel();  
        return cell;  
    }  
  
    public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {  
        if (value != null) {  
            getCell().setText( formatter.format(value) );  
            getCell().setHorizontalAlignment(SwingConstants.RIGHT);  
        } else getCell().setText("");  
        return getCell();  
    }  
}

aqui formato a célula

table.setModel(tableModel);
		table.getColumnModel().getColumn(2).setCellEditor(new MoedaCellEditor());  
		table.getColumnModel().getColumn(2).setCellRenderer(new MoedaCellRender());
ViniGodoy

E onde você muda as cores das linhas no moedaCellRender?

Se você quer sempre deixar a JTable zebrada, dá uma olhada no padrão Decorator.

Resplandes

Segue a resposta, amigo ViniGodoy segui suas orientações em um poste meu anterior, vlw...

import java.awt.Color;
import java.awt.Component;
import java.text.NumberFormat;
import java.util.Locale;

import javax.swing.JLabel;
import javax.swing.JTable;
import javax.swing.SwingConstants;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.TableCellRenderer;

public class MoedaCellRender extends JLabel implements TableCellRenderer {
	private Color whiteColor = new Color(254, 254, 254);
	private Color alternateColor = new Color(237, 243, 253);
	private Color selectedColor = new Color(61, 128, 223);

	/**
	 * classe para mostrar a celula com formato de moeda
	 */
	private static final long serialVersionUID = 1L;
	private JLabel cell = null;
	private NumberFormat formatter = NumberFormat
			.getCurrencyInstance(new Locale("pt", "BR")); // Locale.getDefault()

	private JLabel getCell() {
		if (cell == null)
			cell = new JLabel();

		return cell;
	}

	public Component getTableCellRendererComponent(JTable table, Object value,
			boolean selected, boolean hasFocus, int row, int column) {
		Color bg;
		if (value != null) {
			bg = selectedColor;
			getCell().setText(formatter.format(value));
			getCell().setHorizontalAlignment(SwingConstants.RIGHT);
			getCell().setOpaque(true);
			getCell().setBackground(bg);
			getCell().setForeground(selected ? Color.white : Color.black);
			getCell().setVisible(true);

			if (hasFocus) {
				bg = selectedColor;
				setBackground(bg);
				setForeground(selected ? Color.white : Color.black);
			} else if (!selected)
				bg = (row % 2 == 0 ? alternateColor : whiteColor);
			else
				bg = selectedColor;

			getCell().setBackground(bg);
			getCell().setForeground(selected ? Color.white : Color.black);
		} else
			getCell().setText("");
		return getCell();
	}
}
Criado 11 de junho de 2013
Ultima resposta 11 de jun. de 2013
Respostas 6
Participantes 2