Formatar valor Double em JTable

5 respostas
B

Boa, amigos.

Gostaria de saber se alguém pode me ajudar, pois minha JTABLE não está mostrando as casas decimais zeradas.

Exemplo:

Gostaria que mostrasse assim:

Desde já agradeço.

5 Respostas

ViniGodoy

Você está retornando Double.class no método getColumnClass() do seu TableModel para essa coluna?

B
private void Filtra_Higienizacao() {
        tbHigienizacao.getColumnModel().getColumn(0).setPreferredWidth(100);
        tbHigienizacao.getColumnModel().getColumn(1).setPreferredWidth(480);
        tbHigienizacao.getColumnModel().getColumn(2).setPreferredWidth(100);

        DefaultTableModel higienizacao = (DefaultTableModel) tbHigienizacao.getModel();
        higienizacao.setNumRows(0);
        try {
            while (THig.rs.next()) {
                higienizacao.addRow(new Object[]{
                            THig.rs.getString("hig_cod"),
                            THig.rs.getString("hig_descricao"),
                            THig.rs.getDouble("hig_preco"),});
            }

        } catch (SQLException erro) {
            JOptionPane.showMessageDialog(null, "ERRO AO PREENCHER TABELA! " + erro);

        }

    }
Resplandes
Bom dia, primeiramente deixe de utilizar DefaultTableModel e comece a utilizar o TableModel veja na assinatura do ViniGodoy tem um link para esclarecimento e pesquise tambem sobre o projeto Towel ele vai te ajudar muito, em segundo caso eu tenho meu Renderer e utilizo no meu TableModel o seguinte código para valores Double
table.setDefaultRenderer(Double.class, renderer);
com essa Classe formato valores caso fosse moeda
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();  
    }  
}
e seto a classe no meu TableModel
table.getColumnModel().getColumn(2).setCellEditor(new MoedaCellEditor());
B

Não sei fazer tabelas, nem sei mexer com creator.
Preciso de uma solução para a tabela que estou usando, pois me parece bem menos código do que o que você postou.
Agradeço da mesma forma.

ViniGodoy

brunokchimbo:
Não sei fazer tabelas, nem sei mexer com creator.
Preciso de uma solução para a tabela que estou usando, pois me parece bem menos código do que o que você postou.
Agradeço da mesma forma.

Não se engane pelas aparências. Eu e ele não estamos recomendando que você deixe de usar o DefaultTableModel à toa. Na prática, você rapidamente terá mais código, mais complexo e mais espalhado do que se aprender a fazer do jeito certo.

Deixe a preguiça de lado. Uma tabela está entre os componentes mais complexos do Swing, perdendo só para a árvore.

Criado 23 de maio de 2014
Ultima resposta 26 de mai. de 2014
Respostas 5
Participantes 3