Formatar data mostrar no jtable

4 respostas
E

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!

public List<EntradaBean> consultaEntradasaidaProdutos(String nome){
            List<EntradaBean> 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();
protected void mostrarprod(List<EntradaBean> 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);
                    ......

4 Respostas

O

Pesquise por “SimpleDateFormat”

Marky.Vasconcelos

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

E

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

O

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:
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;
		}

	}
	
}
Espero ter ajudado.
Criado 7 de fevereiro de 2010
Ultima resposta 8 de fev. de 2010
Respostas 4
Participantes 4