Ordenar data em uma jtable

Ola a todos

Como faço para ordenar datas em uma JTable. Quando abro a JTable ela me ordena as datas da seguinte maneira:
01/05/2011
02/01/2010
07/12/2011
ou seja ela só me ordena o primeiro numero, o que eu queria seria:
02/01/2010
01/05/2011
07/12/2011
Alguem pode me ajudar

tabela = new javax.swing.JTable();
tabela.getRowSorter().toggleSortOrder(0); //0 foi o índice da coluna que usei...

Ele deve estar ordenando a data dessa forma porque ele esta tratando sua data como uma String qualquer.
Pra ele ordenar, a JTable precisa saber que se trata de uma data (Date, Timestamp, etc)
Não sei se existe um método mais simples, mas eu sempre defino meu próprio TableModel e lá eu defino o tipo de cada coluna.

[quote=fernandosavio] tabela = new javax.swing.JTable(); tabela.getRowSorter().toggleSortOrder(0); //0 foi o índice da coluna que usei... [/quote]

Obrigado, mas não funcionou, como disse nosso amigo abaixo, estou usando uma String como ordenação: “datavencimento”

Para trabalhar com uma JTable, é quase que obrigatório que você defina sua própria TableModel (TableModel é o que define os dados da sua JTable)…
Eu levei um tempão pra aprender, mas vale a pena, não é muito difícil.
Eu montei um exemplo aqui, é só copiar e alterar os valores:

[code]import java.util.ArrayList;
import java.util.Iterator;
import java.util.LinkedHashSet;

import javax.swing.table.AbstractTableModel;

import model.Peca;
import util.SISMA;

public class MyTableModelPeca extends AbstractTableModel {

// Essa é a classe que vai definir o como são manipulados os dados na JTable
// Aqui definimos os métodos de inserir linha, remover linha, definir se um campo é ou não editável, etc
// O "banco de dados" que minha JTable usa aqui é o meu ArrayList<Peca> linhas (Peca é uma classe que criei para dados de peças de carro)
// Para alterar o valor de um campo, precisamos saber em qual linha e coluna ele está
// Uma vez que sabemos qual a linha e coluna, para achar o valor no "banco de dados" da JTable é só fazer:
// Peca minhaPeca = linhas.get(linhaDaTabelaInteger)  - cada linha do ArrayList corresponde a uma linha da milha tabela
// Cada coluna é um atributo da minha classe Peca, para obter o dado é só testar qual coluna foi selecionada:
// if(colunaDaTabelaInteger = 1) 
//     valor = minhaPeca.getNome();
// else if(colunaDaTabelaInteger = 2)
//     valor = minhaPeca.getPreco();

/**
 * 
 */
private static final long serialVersionUID = 6644666173929755642L;
private ArrayList<Peca> linhas = null;

// Construtor para o caso da JTable for iniciada vazia
public MyTableModelPeca()	{
	linhas = new ArrayList<Peca>();
}

// Construtor para o caso da JTable for iniciada com alguns dados
public MyTableModelPeca(LinkedHashSet<Peca> linhas)	{
	this.linhas = new ArrayList<Peca>();
	populaTabela(linhas);
}

// Popula a tabela pelo contrutor declarado acima
public void populaTabela(LinkedHashSet<Peca> linhas)	{
	Iterator<Peca> it = linhas.iterator();
	while(it.hasNext())	{
		addRow((Peca)it.next());
	}
}

// O "banco de dados" da JTable, cada linha, um registro
private ArrayList<Peca> getLinhas()	{
	return linhas;
}

// Quantidade de colunas da JTable
@Override
public int getColumnCount() {
	return 6;
}

// Quantidade de registros da JTable
@Override
public int getRowCount() {
	return linhas.size();
}

// Obtém o valor de uma célula
@Override
public Object getValueAt(int linha, int coluna) {
	Peca peca = getLinhas().get(linha); // Obtenho a linha (objeto, registro)
	if(coluna == SISMA.Peca.ID) return peca; // SISMA.Peca.CONSTANTE é um interface que criei com valores constantes para facilitar a leitura
											 // Ex: Na interface SISMA existe uma classe interna Peca, e lá é declarado:
											 // public final static int ID = 0;
											 //	public final static int NOME = 1;
											 //	public final static int MARCA = 2;
											 // ou seja, a coluna 0 é o ID, a coluna 1 é o NOME, etc
	  										 // mas se quiser pode colocar o número literal mesmo: 0, 1, 2, 3...
											 // Ex.: if(coluna == 0) return peca;
	else if(coluna == SISMA.Peca.NOME) return peca.getNome();
	else if(coluna == SISMA.Peca.MARCA) return peca.getMarca(); 
	else if(coluna == SISMA.Peca.MODELO) return peca.getModelo();
	else if(coluna == SISMA.Peca.QUANTIDADE) return peca.getQuantidade();
	else if(coluna == SISMA.Peca.MEDIDA) return peca.getMedida();
	else return null;
}

// Seta o valor de uma célula
// No exemplo somente a coluna QUANTIDADE "seta" um valor
// Esse método deve "combinar" com o método isEditable() mais a frente
// Quem não é editável não precisa entrar aqui...
@Override
public void setValueAt(Object valor, int linha, int coluna) {
	if(coluna == SISMA.Peca.QUANTIDADE)  getLinhas().get(linha).setQuantidade((Double)valor);
	this.fireTableCellUpdated(linha, coluna);
}

// Define o tipo da coluna
// É bom que seja o mesmo tipo do que é definido em getValueAt(x, x)
// A JTable utiliza o tipo da célula com base nesse método
// Ex: se definir o retorno como Boolean.class a célula terá um Checkbox, se for um número alinha à direita, se for string, alinha à esquerda, etc
@SuppressWarnings({ "unchecked", "rawtypes" })
@Override
public Class getColumnClass(int coluna)	{
	if(coluna == SISMA.Peca.ID) return Peca.class;
	else if(coluna == SISMA.Peca.QUANTIDADE) return Double.class;
	else return String.class;
}

// Define o nome que aparecerá no Header da JTable
@Override
public String getColumnName(int coluna)	{
	if(coluna == SISMA.Peca.ID) return "Id";
	else if(coluna == SISMA.Peca.NOME) return "Nome";
	else if(coluna == SISMA.Peca.MARCA) return "Marca";
	else if(coluna == SISMA.Peca.MODELO) return "Modelo";
	else if(coluna == SISMA.Peca.QUANTIDADE) return "Qntd";
	else if(coluna == SISMA.Peca.MEDIDA) return "Un.";
	else return "";
}

// Define se a célula é editável pelo usuário
@Override
public boolean isCellEditable(int linha, int coluna)	{
	if(coluna == SISMA.Peca.QUANTIDADE) return true;
	else return false;
}

// Adiciona uma linha no meu "banco de dados" e informa à JTable sobre a inclusão (para que ela se atualize)
public void addRow(Peca peca)		{
	getLinhas().add(peca);
	int linha = getLinhas().size()-1;
	this.fireTableRowsInserted(linha, linha);
}

// Remove uma linha no meu "banco de dados" e informa à JTable sobre a exclusão (para que ela se atualize)
public void removeRow(int linha)	{
	getLinhas().remove(linha);
	this.fireTableRowsDeleted(linha, linha);
}

// Limpa o meu "banco de dados" e informa à JTable sobre a exclusão (para que ela se atualize)
public void removeAll()	{
	getLinhas().clear();
	this.fireTableDataChanged();
}

}[/code]

Por exemplo, se você definir a sua data como do tipo Date, Timestamp, etc, ele vai ordenar da forma correta…

Depois que você criar seu TableModel é só definir ela a sua JTable (eu gosto de usar a JXTable do SwingX):

jTable = new JTable(); TableModelPeca tableModelPeca = new TableModelPeca(); jTable.setModel(tableModelPeca);

Pra usar os métodos da sua TableModel é só fazer:

code.addRow(i.getPeca());
((TableModelPeca)tela.getJTableCompra().getModel()).removeAll();[/code]

Boa sorte. :smiley:

[quote=Eric SantAnna]Para trabalhar com uma JTable, é quase que obrigatório que você defina sua própria TableModel (TableModel é o que define os dados da sua JTable)…
Eu levei um tempão pra aprender, mas vale a pena, não é muito difícil.
Eu montei um exemplo aqui, é só copiar e alterar os valores:

[code]import java.util.ArrayList;
import java.util.Iterator;
import java.util.LinkedHashSet;

import javax.swing.table.AbstractTableModel;

import model.Peca;
import util.SISMA;

public class MyTableModelPeca extends AbstractTableModel {

// Essa é a classe que vai definir o como são manipulados os dados na JTable
// Aqui definimos os métodos de inserir linha, remover linha, definir se um campo é ou não editável, etc
// O "banco de dados" que minha JTable usa aqui é o meu ArrayList<Peca> linhas (Peca é uma classe que criei para dados de peças de carro)
// Para alterar o valor de um campo, precisamos saber em qual linha e coluna ele está
// Uma vez que sabemos qual a linha e coluna, para achar o valor no "banco de dados" da JTable é só fazer:
// Peca minhaPeca = linhas.get(linhaDaTabelaInteger)  - cada linha do ArrayList corresponde a uma linha da milha tabela
// Cada coluna é um atributo da minha classe Peca, para obter o dado é só testar qual coluna foi selecionada:
// if(colunaDaTabelaInteger = 1) 
//     valor = minhaPeca.getNome();
// else if(colunaDaTabelaInteger = 2)
//     valor = minhaPeca.getPreco();

/**
 * 
 */
private static final long serialVersionUID = 6644666173929755642L;
private ArrayList<Peca> linhas = null;

// Construtor para o caso da JTable for iniciada vazia
public MyTableModelPeca()	{
	linhas = new ArrayList<Peca>();
}

// Construtor para o caso da JTable for iniciada com alguns dados
public MyTableModelPeca(LinkedHashSet<Peca> linhas)	{
	this.linhas = new ArrayList<Peca>();
	populaTabela(linhas);
}

// Popula a tabela pelo contrutor declarado acima
public void populaTabela(LinkedHashSet<Peca> linhas)	{
	Iterator<Peca> it = linhas.iterator();
	while(it.hasNext())	{
		addRow((Peca)it.next());
	}
}

// O "banco de dados" da JTable, cada linha, um registro
private ArrayList<Peca> getLinhas()	{
	return linhas;
}

// Quantidade de colunas da JTable
@Override
public int getColumnCount() {
	return 6;
}

// Quantidade de registros da JTable
@Override
public int getRowCount() {
	return linhas.size();
}

// Obtém o valor de uma célula
@Override
public Object getValueAt(int linha, int coluna) {
	Peca peca = getLinhas().get(linha); // Obtenho a linha (objeto, registro)
	if(coluna == SISMA.Peca.ID) return peca; // SISMA.Peca.CONSTANTE é um interface que criei com valores constantes para facilitar a leitura
											 // Ex: Na interface SISMA existe uma classe interna Peca, e lá é declarado:
											 // public final static int ID = 0;
											 //	public final static int NOME = 1;
											 //	public final static int MARCA = 2;
											 // ou seja, a coluna 0 é o ID, a coluna 1 é o NOME, etc
	  										 // mas se quiser pode colocar o número literal mesmo: 0, 1, 2, 3...
											 // Ex.: if(coluna == 0) return peca;
	else if(coluna == SISMA.Peca.NOME) return peca.getNome();
	else if(coluna == SISMA.Peca.MARCA) return peca.getMarca(); 
	else if(coluna == SISMA.Peca.MODELO) return peca.getModelo();
	else if(coluna == SISMA.Peca.QUANTIDADE) return peca.getQuantidade();
	else if(coluna == SISMA.Peca.MEDIDA) return peca.getMedida();
	else return null;
}

// Seta o valor de uma célula
// No exemplo somente a coluna QUANTIDADE "seta" um valor
// Esse método deve "combinar" com o método isEditable() mais a frente
// Quem não é editável não precisa entrar aqui...
@Override
public void setValueAt(Object valor, int linha, int coluna) {
	if(coluna == SISMA.Peca.QUANTIDADE)  getLinhas().get(linha).setQuantidade((Double)valor);
	this.fireTableCellUpdated(linha, coluna);
}

// Define o tipo da coluna
// É bom que seja o mesmo tipo do que é definido em getValueAt(x, x)
// A JTable utiliza o tipo da célula com base nesse método
// Ex: se definir o retorno como Boolean.class a célula terá um Checkbox, se for um número alinha à direita, se for string, alinha à esquerda, etc
@SuppressWarnings({ "unchecked", "rawtypes" })
@Override
public Class getColumnClass(int coluna)	{
	if(coluna == SISMA.Peca.ID) return Peca.class;
	else if(coluna == SISMA.Peca.QUANTIDADE) return Double.class;
	else return String.class;
}

// Define o nome que aparecerá no Header da JTable
@Override
public String getColumnName(int coluna)	{
	if(coluna == SISMA.Peca.ID) return "Id";
	else if(coluna == SISMA.Peca.NOME) return "Nome";
	else if(coluna == SISMA.Peca.MARCA) return "Marca";
	else if(coluna == SISMA.Peca.MODELO) return "Modelo";
	else if(coluna == SISMA.Peca.QUANTIDADE) return "Qntd";
	else if(coluna == SISMA.Peca.MEDIDA) return "Un.";
	else return "";
}

// Define se a célula é editável pelo usuário
@Override
public boolean isCellEditable(int linha, int coluna)	{
	if(coluna == SISMA.Peca.QUANTIDADE) return true;
	else return false;
}

// Adiciona uma linha no meu "banco de dados" e informa à JTable sobre a inclusão (para que ela se atualize)
public void addRow(Peca peca)		{
	getLinhas().add(peca);
	int linha = getLinhas().size()-1;
	this.fireTableRowsInserted(linha, linha);
}

// Remove uma linha no meu "banco de dados" e informa à JTable sobre a exclusão (para que ela se atualize)
public void removeRow(int linha)	{
	getLinhas().remove(linha);
	this.fireTableRowsDeleted(linha, linha);
}

// Limpa o meu "banco de dados" e informa à JTable sobre a exclusão (para que ela se atualize)
public void removeAll()	{
	getLinhas().clear();
	this.fireTableDataChanged();
}

}[/code]

Por exemplo, se você definir a sua data como do tipo Date, Timestamp, etc, ele vai ordenar da forma correta…
[/quote]

[quote]Eric, obrigado
a minha jTable é bem diferente da sua, mas ai segue a minha para entender melhor

[code]package Relatorios;

import java.awt.event.ActionListener;
import java.sql.SQLException;
import java.util.Date;
import javax.swing.* ;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.DefaultTableModel;
import utilitarios.conexao;
import javax.swing.text.MaskFormatter;

public class RelaContasCompleto extends javax.swing.JFrame
{

MaskFormatter formatodatacada;
private MaskFormatter formatodata;
private MaskFormatter formatocep;
private MaskFormatter formatocnpj;
private MaskFormatter formatoie;
private MaskFormatter formatoccm;
private MaskFormatter formatoddi;
private MaskFormatter formatotelefone;
int navega = 0 ;
String ordenacao ="codigo";
//String ordenacao1 ="datavencimento";
String novo = "n";

conexao contas;
private ActionListener ActionListener;

/** Creates new form RelaContasCompleto */
public RelaContasCompleto()

{
initComponents();
contas = new conexao();
contas.conecta();
contas.executeSQL("select * from fornecedor order by "+ordenacao);
try
{
contas.executeSQL("select * from Contas order by posicaoconta");
preencher_jtable();
contas.executeSQL("select * from Contas order by codigo");
contas.resultset.last();
mostrardados();

}
catch(SQLException erro)
{
JOptionPane.showMessageDialog(null,"BANCO DE DADOS NÃO ENCONTRADO, VERIFIQUE O ERRO");
}
}
public void mostrardados()
{
//try
{
//MOSTRA DATA NO FORMULÁRIO
Date data = new Date();
String dia = "" + data.getDate();
String mes = "" + String.valueOf(data.getMonth()+1);
String ano = "" + (1900 + data.getYear());
if (Integer.parseInt(dia)<=9)
dia = "0" + dia;
if (Integer.parseInt(mes)<=9)
mes = "0" + mes;
datacada.setText(dia+"/"+mes+"/"+ano);
datacada.setEditable(false);

//MOSTRA HORA NO FORMULÁRIO
Date hora = new Date();
String thora ="" + data.getHours();
String tminuto=""+ data.getMinutes();
String tsegundo=""+ data.getSeconds();
if (Integer.parseInt(tminuto)<=9)
tminuto = "0" + tminuto;
if (Integer.parseInt(tsegundo)<=9)
tsegundo = "0" + tsegundo;
horacada.setText(thora+":"+tminuto+":"+tsegundo);
horacada.setEditable(false);

//DESABILITA O X NO FORMULÁRIO
setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
}
}

public void preencher_jtable()
{
DefaultTableCellRenderer esquerda = new DefaultTableCellRenderer();
DefaultTableCellRenderer centro = new DefaultTableCellRenderer();
DefaultTableCellRenderer direita = new DefaultTableCellRenderer();

esquerda.setHorizontalAlignment(SwingConstants.LEFT);
centro.setHorizontalAlignment(SwingConstants.CENTER);
direita.setHorizontalAlignment(SwingConstants.RIGHT);

//CODIGO
jTable.getColumnModel().getColumn(0).setCellRenderer(centro);
//DATAVENCIMENTO
jTable.getColumnModel().getColumn(1).setCellRenderer(centro);
//FORNECEDOR
jTable.getColumnModel().getColumn(2).setCellRenderer(esquerda);
//VALOR
jTable.getColumnModel().getColumn(3).setCellRenderer(direita);
//PISIÇÃO CONTA
jTable.getColumnModel().getColumn(4).setCellRenderer(centro);
//CODIGO DE BARRAS
jTable.getColumnModel().getColumn(5).setCellRenderer(esquerda);

//CODIGO
jTable.getColumnModel().getColumn(0).setPreferredWidth(10);
//DATA VENCIMENTO
jTable.getColumnModel().getColumn(1).setPreferredWidth(20);
//FORNECEDOR
jTable.getColumnModel().getColumn(2).setPreferredWidth(200);
//VALOR
jTable.getColumnModel().getColumn(3).setPreferredWidth(30);
//POSIÇÃO CONTA
jTable.getColumnModel().getColumn(4).setPreferredWidth(30);
//CODIGO DE BARRAS
jTable.getColumnModel().getColumn(5).setPreferredWidth(200);

DefaultTableModel modelo = (DefaultTableModel)jTable.getModel();
modelo.setNumRows(0);
try
{
while(contas.resultset.next()
)
modelo.addRow(new Object[]
{
contas.resultset.getString("codigo"),
contas.resultset.getString("datavencimento"),
contas.resultset.getString("fornecedor"),
contas.resultset.getString("valor"),
contas.resultset.getString("posicaoconta"),
contas.resultset.getString("codigobarras"),
}
)
;
}
catch(SQLException erro)
{
}
}

/** This method is called from within the constructor to
 * initialize the form.
 * WARNING: Do NOT modify this code. The content of this method is
 * always regenerated by the Form Editor.
 */
@SuppressWarnings(&quot;unchecked&quot;)
// &lt;editor-fold defaultstate="collapsed" desc="Generated Code"&gt;                          
private void initComponents() {

    jPanel3 = new javax.swing.JPanel();
    jLabel14 = new javax.swing.JLabel();
    datacada = new javax.swing.JTextField();
    horacada = new javax.swing.JTextField();
    jPanel1 = new javax.swing.JPanel();
    btsair = new javax.swing.JButton();
    jScrollPane2 = new javax.swing.JScrollPane();
    jTable = new javax.swing.JTable();

    setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
    setTitle("CRCJ - Assessoria Em Informática");
    setResizable(false);

    jPanel3.setBackground(java.awt.SystemColor.desktop);
    jPanel3.setBorder(javax.swing.BorderFactory.createBevelBorder(javax.swing.border.BevelBorder.RAISED));
    jPanel3.setForeground(new java.awt.Color(255, 255, 255));

    jLabel14.setBackground(new java.awt.Color(0, 255, 0));
    jLabel14.setFont(new java.awt.Font("Haettenschweiler", 0, 24));
    jLabel14.setForeground(new java.awt.Color(255, 255, 255));
    jLabel14.setText("Relatório Das Contas Pagar e Receber");

    datacada.setBackground(java.awt.SystemColor.desktop);
    datacada.setFont(new java.awt.Font("Arial", 0, 16));
    datacada.setForeground(new java.awt.Color(255, 255, 255));
    datacada.setHorizontalAlignment(javax.swing.JTextField.CENTER);

    horacada.setBackground(java.awt.SystemColor.desktop);
    horacada.setFont(new java.awt.Font("Arial", 0, 16));
    horacada.setForeground(new java.awt.Color(255, 255, 255));
    horacada.setHorizontalAlignment(javax.swing.JTextField.CENTER);

    javax.swing.GroupLayout jPanel3Layout = new javax.swing.GroupLayout(jPanel3);
    jPanel3.setLayout(jPanel3Layout);
    jPanel3Layout.setHorizontalGroup(
        jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel3Layout.createSequentialGroup()
            .addContainerGap()
            .addComponent(jLabel14)
            .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 433, Short.MAX_VALUE)
            .addComponent(datacada, javax.swing.GroupLayout.PREFERRED_SIZE, 107, javax.swing.GroupLayout.PREFERRED_SIZE)
            .addGap(18, 18, 18)
            .addComponent(horacada, javax.swing.GroupLayout.PREFERRED_SIZE, 107, javax.swing.GroupLayout.PREFERRED_SIZE)
            .addGap(21, 21, 21))
    );
    jPanel3Layout.setVerticalGroup(
        jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addGroup(jPanel3Layout.createSequentialGroup()
            .addContainerGap(13, Short.MAX_VALUE)
            .addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                .addComponent(horacada, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addComponent(datacada, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
            .addContainerGap())
        .addGroup(jPanel3Layout.createSequentialGroup()
            .addContainerGap()
            .addComponent(jLabel14)
            .addContainerGap(12, Short.MAX_VALUE))
    );

    jPanel1.setBackground(new java.awt.Color(102, 255, 204));
    jPanel1.setBorder(javax.swing.BorderFactory.createBevelBorder(javax.swing.border.BevelBorder.RAISED));
    jPanel1.setForeground(new java.awt.Color(255, 255, 255));

    btsair.setFont(new java.awt.Font("Tahoma", 1, 10));
    btsair.setText("Sair");
    btsair.addActionListener(new java.awt.event.ActionListener() {
        public void actionPerformed(java.awt.event.ActionEvent evt) {
            btsairActionPerformed(evt);
        }
    });

    javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
    jPanel1.setLayout(jPanel1Layout);
    jPanel1Layout.setHorizontalGroup(
        jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel1Layout.createSequentialGroup()
            .addContainerGap(868, Short.MAX_VALUE)
            .addComponent(btsair, javax.swing.GroupLayout.PREFERRED_SIZE, 85, javax.swing.GroupLayout.PREFERRED_SIZE)
            .addGap(28, 28, 28))
    );
    jPanel1Layout.setVerticalGroup(
        jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addGroup(jPanel1Layout.createSequentialGroup()
            .addContainerGap()
            .addComponent(btsair)
            .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
    );

    jTable.setFont(new java.awt.Font("Tahoma", 0, 10));
    jTable.setModel(new javax.swing.table.DefaultTableModel(
        new Object [][] {
            {null, null, null, null, null, null},
            {null, null, null, null, null, null},
            {null, null, null, null, null, null},
            {null, null, null, null, null, null},
            {null, null, null, null, null, null}
        },
        new String [] {
            "Código", "Data Vencimento", "Fornecedor", "Valor", "Posição da Conta", "Código de Barras"
        }
    ) {
        boolean[] canEdit = new boolean [] {
            false, false, false, false, false, false
        };

        public boolean isCellEditable(int rowIndex, int columnIndex) {
            return canEdit [columnIndex];
        }
    });
    jTable.getTableHeader().setReorderingAllowed(false);
    jScrollPane2.setViewportView(jTable);
    jTable.getColumnModel().getColumn(0).setResizable(false);
    jTable.getColumnModel().getColumn(1).setResizable(false);
    jTable.getColumnModel().getColumn(2).setResizable(false);
    jTable.getColumnModel().getColumn(3).setResizable(false);
    jTable.getColumnModel().getColumn(4).setResizable(false);
    jTable.getColumnModel().getColumn(5).setResizable(false);

    javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
    getContentPane().setLayout(layout);
    layout.setHorizontalGroup(
        layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addComponent(jPanel3, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
        .addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
        .addGroup(layout.createSequentialGroup()
            .addContainerGap()
            .addComponent(jScrollPane2, javax.swing.GroupLayout.DEFAULT_SIZE, 965, Short.MAX_VALUE)
            .addContainerGap())
    );
    layout.setVerticalGroup(
        layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addGroup(layout.createSequentialGroup()
            .addComponent(jPanel3, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
            .addGap(1, 1, 1)
            .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
            .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
            .addComponent(jScrollPane2, javax.swing.GroupLayout.DEFAULT_SIZE, 533, Short.MAX_VALUE)
            .addContainerGap())
    );

    java.awt.Dimension screenSize = java.awt.Toolkit.getDefaultToolkit().getScreenSize();
    setBounds((screenSize.width-993)/2, (screenSize.height-685)/2, 993, 685);
}// &lt;/editor-fold&gt;                        

private void btsairActionPerformed(java.awt.event.ActionEvent evt) {                                       
    // TODO add your handling code here:

//if(javax.swing.JOptionPane.showConfirmDialog(null,“DESEJA FECHAR ESTE FORMULÁRIO ?”,“SAIR”,javax.swing.JOptionPane.YES_NO_OPTION )==0)
//this.dispose();
//new Principal.TelaPrincipal().show();
Object[] options =
{
“Sim”, “Não”
};
int i = JOptionPane.showOptionDialog(null,
“DESEJA FECHAR ESTE FORMULÁRIO ?”,“SAIR”,
JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE, null,
options, options[0]);
if (i == JOptionPane.YES_OPTION)
{
//System.exit(0);
this.dispose();
new Principal.TelaPrincipal().show();
}
}

/**
* @param args the command line arguments
*/
public static void main(String args[]) {
    java.awt.EventQueue.invokeLater(new Runnable() {
        public void run() {
            new RelaContasCompleto().setVisible(true);
        }
    });
}

// Variables declaration - do not modify                     
private javax.swing.JButton btsair;
private javax.swing.JTextField datacada;
private javax.swing.JTextField horacada;
private javax.swing.JLabel jLabel14;
private javax.swing.JPanel jPanel1;
private javax.swing.JPanel jPanel3;
private javax.swing.JScrollPane jScrollPane2;
private javax.swing.JTable jTable;
// End of variables declaration                   

}
[/code]

Não, você não entendeu direito…
O que eu te mostrei não é uma JTable…

é uma TableModel…

você precisa setar um Model na sua JTable, você está usando a DefaultTableModel, que é a TableModel padrão…mas ela é muito ruim…rs
Quase que obrigatóriamente você vai precisar criar sua própria TableModel…e foi isso que eu mostrei…

Tenta usar a minha TableModel, apenas substituindo o que precisar, setando sua data como java.util.Date…
e substitui o seu código

DefaultTableModel modelo = (DefaultTableModel) jTable.getModel()

por

SuaTableModel suaTableModel = new SuaTableModel(); jTable.setModel(suaTableModel);

Use a orientação a objetos e cria uma classe modelo ex:

[code]public class Conta {
private String codigo = null;
private Date dataDeVencimento = null;
private String fornecedor= null;
private Double valor = null;
private String posicaoDaConta = null;
private String codigoDeBarras = null;

//(seus gets e sets…)

}[/code]

e a partir dai sempre que for usar os método da JTable(da TableModel) ao invéz de:

while (contas.resultset.next()) modelo.addRow(new Object[] { contas.resultset.getString("codigo"), contas.resultset.getString("datavencimento"), contas.resultset.getString("fornecedor"), contas.resultset.getString("valor"), contas.resultset.getString("posicaoconta"), contas.resultset.getString("codigobarras"), });

e faça:

    [code]Conta conta;
while (contas.resultset.next())	{
	conta = new Conta();
	conta.setCodigo(contas.resultset.getString("codigo"));
	conta.setDataDeVencimento(new SimpleDateFormat().parse(contas.resultset.getString("datavencimento"))); // Converto para Date
	conta.setFornecedor(contas.resultset.getString("fornecedor"));
	conta.setPosicaoDaConta(contas.resultset.getString("posicaoconta"));
	conta.setCodigoDeBarras(contas.resultset.getString("codigobarras"));
	
	((SeuTableModel)jTable.getModel()).addRow(conta);
}[/code]

Ou seja…vai ter trabalho, mas se você aprender isso, pode se considerar um cara pleno em Swing…uahuahau

Boa sorte.

1 curtida

[quote=Eric SantAnna]Não, você não entendeu direito…
O que eu te mostrei não é uma JTable…

é uma TableModel…

você precisa setar um Model na sua JTable, você está usando a DefaultTableModel, que é a TableModel padrão…mas ela é muito ruim…rs
Quase que obrigatóriamente você vai precisar criar sua própria TableModel…e foi isso que eu mostrei…

Tenta usar a minha TableModel, apenas substituindo o que precisar, setando sua data como java.util.Date…
e substitui o seu código

DefaultTableModel modelo = (DefaultTableModel) jTable.getModel()

por

SuaTableModel suaTableModel = new SuaTableModel(); jTable.setModel(suaTableModel);

Use a orientação a objetos e cria uma classe modelo ex:

[code]public class Conta {
private String codigo = null;
private Date dataDeVencimento = null;
private String fornecedor= null;
private Double valor = null;
private String posicaoDaConta = null;
private String codigoDeBarras = null;

//(seus gets e sets…)

}[/code]

e a partir dai sempre que for usar os método da JTable(da TableModel) ao invéz de:

while (contas.resultset.next()) modelo.addRow(new Object[] { contas.resultset.getString("codigo"), contas.resultset.getString("datavencimento"), contas.resultset.getString("fornecedor"), contas.resultset.getString("valor"), contas.resultset.getString("posicaoconta"), contas.resultset.getString("codigobarras"), });

e faça:

    [code]Conta conta;
while (contas.resultset.next())	{
	conta = new Conta();
	conta.setCodigo(contas.resultset.getString("codigo"));
	conta.setDataDeVencimento(new SimpleDateFormat().parse(contas.resultset.getString("datavencimento"))); // Converto para Date
	conta.setFornecedor(contas.resultset.getString("fornecedor"));
	conta.setPosicaoDaConta(contas.resultset.getString("posicaoconta"));
	conta.setCodigoDeBarras(contas.resultset.getString("codigobarras"));
	
	((SeuTableModel)jTable.getModel()).addRow(conta);
}[/code]

Ou seja…vai ter trabalho, mas se você aprender isso, pode se considerar um cara pleno em Swing…uahuahau

Boa sorte.
[/quote]

[quote=Eric SantAnna]Não, você não entendeu direito…
O que eu te mostrei não é uma JTable…

é uma TableModel…

você precisa setar um Model na sua JTable, você está usando a DefaultTableModel, que é a TableModel padrão…mas ela é muito ruim…rs
Quase que obrigatóriamente você vai precisar criar sua própria TableModel…e foi isso que eu mostrei…

Tenta usar a minha TableModel, apenas substituindo o que precisar, setando sua data como java.util.Date…
e substitui o seu código

DefaultTableModel modelo = (DefaultTableModel) jTable.getModel()

por

SuaTableModel suaTableModel = new SuaTableModel(); jTable.setModel(suaTableModel);

Use a orientação a objetos e cria uma classe modelo ex:

[code]public class Conta {
private String codigo = null;
private Date dataDeVencimento = null;
private String fornecedor= null;
private Double valor = null;
private String posicaoDaConta = null;
private String codigoDeBarras = null;

//(seus gets e sets…)

}[/code]

e a partir dai sempre que for usar os método da JTable(da TableModel) ao invéz de:

while (contas.resultset.next()) modelo.addRow(new Object[] { contas.resultset.getString("codigo"), contas.resultset.getString("datavencimento"), contas.resultset.getString("fornecedor"), contas.resultset.getString("valor"), contas.resultset.getString("posicaoconta"), contas.resultset.getString("codigobarras"), });

e faça:

    [code]Conta conta;
while (contas.resultset.next())	{
	conta = new Conta();
	conta.setCodigo(contas.resultset.getString("codigo"));
	conta.setDataDeVencimento(new SimpleDateFormat().parse(contas.resultset.getString("datavencimento"))); // Converto para Date
	conta.setFornecedor(contas.resultset.getString("fornecedor"));
	conta.setPosicaoDaConta(contas.resultset.getString("posicaoconta"));
	conta.setCodigoDeBarras(contas.resultset.getString("codigobarras"));
	
	((SeuTableModel)jTable.getModel()).addRow(conta);
}[/code]

Ou seja…vai ter trabalho, mas se você aprender isso, pode se considerar um cara pleno em Swing…uahuahau

Boa sorte.
[/quote]

Obrigado
Mas não funcionou, ele roda mas não me mostra a Tabela, acho que eu fazendo tudo errado