Formatar data mostrar no jtable

tenho esses dois metodos para mostrar dados do banco no jtable.
no banco de dados ela tá como Date(mysql=yyyy-MM-dd).
já tentei formatar data para exibí-la na tabela, mas não obtive sucesso.
quero exibila no formato dd/mm/yyyy.
qual dos métodos devo formatar a data??
já ! agradeço ajuda!

[code]public List consultaEntradasaidaProdutos(String nome){
List produtos = new ArrayList();
try{
AcessoMysql mysql = new AcessoMysql();
pstm = mysql.conectar().prepareStatement(entradasaida);
pstm.setString(1,nome);
rs= pstm.executeQuery();

    while (rs.next()){
                    
       prod = new EntradaBean();
	  
	  ...
      prod.setDataVencimento(rs.getDate("entradasaida_datavencimento"));
      prod.setNomeProduto(rs.getString("produtos_nome"));
      ...
	
	
       produtos.add(prod);
    }
    mysql.desconectar();[/code]

[code]protected void mostrarprod(List p){

    while (tmPro.getRowCount() > 0){
        tmPro.removeRow(0);
    }
    if (p.size()==0){
        
    }else{
                      String[] campos = new String[]{null, null, null, null};
            for (int i = 0; i < p.size(); i++) {
                tmPro.addRow(campos);
				....
                tmPro.setValueAt(p.get(i).getNomeProduto(), i, 0);
                tmPro.setValueAt(p.get(i).getDataVencimento(), i, 2);
                ......
	[/code]

Pesquise por “SimpleDateFormat”

Pesquise por AbstractTableModel e crie seu TableModel para trabalhar diretamente com a data e objetos.

posso postar aqui cetenas de exemplos sobre SimpleDateFormat que pesquisei.
ja uso ele em outros componetes, mas não consigo para o jtable.

Opa, se for somente para exibicao de dados formatados em uma JTable, voce poderia, por exemplo, criar e associar um DefaultTableCellRenderer com sua respectiva coluna.

Para isso, é necessário criar uma outra classe tabela que extende JTable e sobreescrever o metodo getCellRenderer() retornando os respectivos CellRenders para cada coluna.

Lembrando que primeiro o programa tenta buscar o CellRender em JTable.getCellRenderer() mas se neste não tiver nenhum que retorne explicitamente, o programa faz uma consulta do tipo do objeto chamando o metodo TableModel.getColumnClass() para então retornar um CellRender padrão.

Um exemplo de codigo de implementação seria:

[code]import java.awt.BorderLayout;
import java.math.BigDecimal;
import java.sql.Timestamp;
import java.text.NumberFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Locale;

import javax.swing.JFrame;
import javax.swing.JTable;
import javax.swing.table.AbstractTableModel;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.TableCellRenderer;
import javax.swing.table.TableModel;
import javax.swing.text.NumberFormatter;

public class TesteTabela {

public static void main(String[] args) {
	JFrame f = new JFrame("Teste menu");
	f.setSize(400, 300);
	f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	f.setLocationRelativeTo(null);

	Tabela tabela = new Tabela(new TabelaModelo());
	f.getContentPane().add(tabela, BorderLayout.CENTER);
	f.setVisible(true);
}

private static class Tabela extends JTable {
	private static final long serialVersionUID = 1L;
	private FormatadorData formatadorData = new FormatadorData();
	private FormatadorMoeda formatadorMoeda = new FormatadorMoeda();
	
	public Tabela(TableModel modeloDaTabela) {
		super(modeloDaTabela);
	}
	
	@Override
	public TableCellRenderer getCellRenderer(int row, int column) {
		if (column==1) return formatadorData;
		if (column==2) return formatadorMoeda;
		return super.getCellRenderer(row, column);
	}
}

private static class FormatadorMoeda extends DefaultTableCellRenderer {
	private static final long serialVersionUID = 1L;
	public FormatadorMoeda() {
		super();
	}
	@Override
	protected void setValue(Object o) {
		String dataFormatada = "";
		NumberFormat nf = NumberFormat.getCurrencyInstance(new Locale("PT", "BR"));
		NumberFormatter nff = new NumberFormatter(nf);
		try {
			dataFormatada = nff.valueToString(o);
		} catch (ParseException e) {
			e.printStackTrace();
		}
		super.setValue(dataFormatada);
	}
}

private static class FormatadorData extends DefaultTableCellRenderer {
	private static final long serialVersionUID = 1L;
	public FormatadorData() {
		super();
	}
	@Override
	protected void setValue(Object o) {
		String dataFormatada = "";
		SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
		dataFormatada = sdf.format(o);
		super.setValue(dataFormatada);
	}
}

private static class TabelaModelo extends AbstractTableModel {
	private static final long serialVersionUID = 1L;
	
	@Override
	public int getColumnCount() {
		return 3;
	}

	@Override
	public int getRowCount() {
		return 2;
	}

	@Override
	public Object getValueAt(int row, int col) {
		if (row==0 && col==0) return "linha1";
		if (row==0 && col==1) return new Timestamp(934534435344L);
		if (row==0 && col==2) return new BigDecimal("123.45");

		if (row==1 && col==0) return "linha2";
		if (row==1 && col==1) return new Timestamp(954345345355L);
		if (row==1 && col==2) return new BigDecimal("67.89");
		return null;
	}

	@Override
	public Class<?> getColumnClass(int columnIndex) {
		if (columnIndex==0) return String.class;

// if (columnIndex==1) return null;
// if (columnIndex==2) return null;
return null;
}

}

}
[/code]
Espero ter ajudado.