Ordenar data em uma jtable

10 respostas
C

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

10 Respostas

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

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.

C

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

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

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:

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();
	}

}

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

Eric_SantAnna

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:

C
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:
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();
	}

}

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

[quote]Eric, obrigado a minha jTable é bem diferente da sua, mas ai segue a minha para entender melhor
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("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">                          
    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);
    }// </editor-fold>                        

    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                   

}
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:
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...)

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

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

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

Boa sorte.

C
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:
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...)

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

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

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

Boa sorte.

C
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:
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...)

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

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

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

Boa sorte.

C

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

Criado 7 de outubro de 2011
Ultima resposta 10 de out. de 2011
Respostas 10
Participantes 3