1. java
  2. android
  3. c#
  4. .net
  5. javascript
  6. php
  7. jquery
  8. html
  9. sql

Formatar células em um JTable

Boa noite galera,

Eu tenho um JTable que, além de outros dados, ele recebe um dado tipo Double e outro Calendar. Eu queria que na exibição dos dados no JTable; JTable esse que não é editável, eu trabalho os dados em outro panel, o JTable em si é só para visualização dos dados que contém a tabela; na coluna dos dados Double todos apareçam com a máscara 9.999,00, e na coluna dos dados Calendar eles apareçam como datas normais dd/MM/yyyy.

Tentei vários tipos de conversões, mas toda vez da erro. Até pesquisei aqui no guj mas o único tópico que eu achei que poderia me ajudar o link que me manda criar um classe que implementa TableCellEditor ta expirado.

Aguardo a ajuda de vocês pessoas!

Aqui vai o código que eu coloquei como DateCEllEditor graças a ajuda do Denilson

import java.awt.Component;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.FocusAdapter;
import java.awt.event.FocusEvent;
import java.awt.event.KeyEvent;
import java.text.ParseException;
import java.util.EventObject;


import javax.swing.DefaultCellEditor;
import javax.swing.JFormattedTextField;
import javax.swing.JTable;
import javax.swing.SwingUtilities;

import org.jxSwing.component.spinner.DateSpinner;

public class DateCellEditor extends DefaultCellEditor {

    private static final long serialVersionUID = -567297433573600250L;

    private DateSpinner spinner = new DateSpinner();

    private boolean valueSet;

    public DateCellEditor()  {

        super( new JFormattedTextField("##/##/####") ) ;

        // 
        spinner.getTextField().addFocusListener(new FocusAdapter() {

            public void focusGained(FocusEvent focusEvent) {

                // 
                SwingUtilities.invokeLater(new Runnable() {

                    public void run() {

                        // 
                        if(valueSet) {

                            spinner.getTextField().setCaretPosition(1);
                        }
                    }
                });
            }
        });

        // 
        spinner.getTextField().addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent actionEvent) {

                stopCellEditing();
            }
        });
    }

    /*
     * (non-Javadoc)
     * @see javax.swing.DefaultCellEditor#getCellEditorValue()
     */
    public Object getCellEditorValue() {

        return spinner.getValue();
    }

    /*
     * (non-Javadoc)
     * @see javax.swing.DefaultCellEditor#getTableCellEditorComponent(javax.swing.JTable, java.lang.Object, boolean, int, int)
     */
    public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) {

        // 
        if( !valueSet) {

            spinner.setValue(value);
        }

        // 
        SwingUtilities.invokeLater(new Runnable() {

            public void run() {

                spinner.getTextField().requestFocus();
            }
        });

        return spinner;
    }

    /*
     * (non-Javadoc)
     * @see javax.swing.DefaultCellEditor#isCellEditable(java.util.EventObject)
     */
    public boolean isCellEditable(EventObject eventObject) {

        // 
        if(eventObject instanceof KeyEvent) {

            KeyEvent keyEvent = (KeyEvent)eventObject;

            spinner.getTextField().setText(String.valueOf(keyEvent.getKeyChar()));

            valueSet = true;

        }else {

            valueSet = false;
        }

        return true;
    }

    /*
     * * (non-Javadoc)
     * @see javax.swing.DefaultCellEditor#stopCellEditing()
     */
    public boolean stopCellEditing() {

        try {
            spinner.getEditor().commitEdit();
            spinner.commitEdit();

        }catch(ParseException parseException) {

            parseException.printStackTrace();
        }

        return super.stopCellEditing();
    }

na minha tabela eu coloquei assim

tblancamentos.setDefaultEditor( java.util.Date.Class, new DateCellEditor() );

mas a data na Jtable agora só aparece como 15/Mar/2014 e eu quero deixá-la 15/03/2014. Tem algo errado ou que eu esteja me esquecendo ai?

  1. Você vai ver essas setas em qualquer página de pergunta. Com elas, você pode dizer se uma pergunta ou uma resposta foram relevantes ou não.
  2. Edite sua pergunta ou resposta caso queira alterar ou adicionar detalhes.
  3. Caso haja alguma dúvida sobre a pergunta, adicione um comentário. O espaço de respostas deve ser utilizado apenas para responder a pergunta.
  4. Se o autor da pergunta marcar uma resposta como solucionada, esta marca aparecerá.
  5. Clique aqui para mais detalhes sobre o funcionamento do GUJ!

2 respostas

Não é a resposta que estava procurando? Procure outras perguntas com as tags java ou faça a sua própria pergunta.