Inserir dados em JTable[Resolvido]

Olá, estou no primeiro ano do curso de Sistemas de Informação. Estou com dificuldade no seguinte problema:
Os alunos devem construir um programa em Java, para gerar a Tabela de Fórmula 1 ?
temporada 2008; O programa deve ler de um arquivo texto com extensão .dat o resultado de cada
prova: PILOTO, EQUIPE e TEMPO. O programa deve calcular e imprimir a Tabela de Classificação utilizando as classes:
JTable, DefaultTableModel e Vector.

O arquivo .dat está formatado do modo que o professor especificou. O problema está em imprimir estes dados no JTable.

Aqui está o meu código, que mescla a leitura de dados de um arquivo .DAT e uma interface JTable:

[code]/**
*
*/
package F;

import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.File;
import java.io.IOException;
import java.util.Scanner;
import java.util.Vector;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.*;

/**

  • @author André Davi Fontana Rodrigues.

  • @size AGO 23, 2008.

  • @version 1.0
    */
    public class Formula1 extends JFrame {

    private JTable tabela = new JTable();

    private JScrollPane coluna = new JScrollPane();

    private DefaultTableModel modelo = new DefaultTableModel();

    public Formula1(){

     //Determinar as propriedades e o layout.
     
     super("Tabela Formula1");
     
     getContentPane();
     
     setLayout ( new BorderLayout() );
     		
     loadData();
    
     coluna.setViewportView(tabela);
     getContentPane().add(coluna, BorderLayout.CENTER);
    

    }

    /**

    • Load the test data.
      */
      private void loadData() {

      Vector tab = new Vector();

      Vector colunaNomes = new Vector();
      colunaNomes.add(“Mundial de Pilotos”);
      colunaNomes.add(“Austrália”);
      colunaNomes.add(“Malásia”);
      colunaNomes.add(“Bahrein”);
      colunaNomes.add(“Espanha”);
      colunaNomes.add(“Turquía”);
      colunaNomes.add(“Mônaco”);
      colunaNomes.add(“Canadá”);
      colunaNomes.add(“França”);
      colunaNomes.add(“Inglaterra”);
      colunaNomes.add(“Alemanha”);
      colunaNomes.add(“Hungria”);
      colunaNomes.add(“Espanha”);
      colunaNomes.add(“Bélgica”);
      colunaNomes.add(“Itália”);
      colunaNomes.add(“Cingapura”);
      colunaNomes.add(“Japão”);
      colunaNomes.add(“China”);
      colunaNomes.add(“Brasil”);
      colunaNomes.add(“Total de pontos”);

      Vector row = null;

      row = new Vector();
      row.add(“Lewis Hamilton”);
      row.add(“10”);
      row.add(“62”);
      tab.add(row);

      modelo.setDataVector(tab, colunaNomes);
      tabela.setModel(modelo);

      setSize(1200, 320);

      setLocation(50, 180);

      setDefaultCloseOperation(DISPOSE_ON_CLOSE);

      setVisible(true);

    }

    public static void main(String[] args) throws IOException {

     // Declaração de dados
     
     Formula1 janela = new Formula1();
    
     File arquivo = new File("TabelaClassificacao.dat");
    
     System.out.println(arquivo.getAbsolutePath());
    
     Scanner entrada = new Scanner(arquivo.getAbsoluteFile());
    
     String linhaEntrada;
    
     String nomeEequipe;
     
     String equipe;
    
     int dia;
    
     int mes;
    
     int ano;
    
     int a;
    
     int posicao = -1;
    
     char caractere;
    
     String aux;
    
     String[] valores;
    
     String saida;
    
     // Entrada de dados
     
     while (entrada.hasNext()) {
    
     	linhaEntrada = entrada.nextLine();
    
     	for (a = 0; a < linhaEntrada.length(); a++) {
    
     		caractere = linhaEntrada.charAt(a);
    
     		if (Character.isDigit(caractere)) {
    
     			posicao = a;
    
     			break;
     		}
     	}
    
     	nomeEequipe = linhaEntrada.substring(0, posicao - 1);
     	
     	aux = linhaEntrada.substring(posicao, linhaEntrada.length());
    
     	valores = aux.split(" ");
    
     	dia = Integer.parseInt(valores[0]);
    
     	mes = Integer.parseInt(valores[1]);
    
     	ano = Integer.parseInt(valores[2]);
     	
     	saida = nomeEequipe;
     	
     	saida += "\t " + dia + "\t " + mes + "\t " + ano;
    
     	System.out.println(saida);
    
     }
    

    }

    public void actionPerformed(ActionEvent arg0) {
    // TODO Auto-generated method stub

    }
    }

O algoritmo para a somar os pontos de cada piloto em cada corrida estou criando agora, se alguém tiver alguma sugestão para este algoritmo ou para imprimir estes dados no JTable eu agradeço desde já. Falou.

Boa madrugada Colegas !

Amigo… apenas uma dica, você esqueceu de fechar a tag [code], utilize /code no final do seu código, vai facilitar bastante…

[]s

Bem !
Começaria implementando seu proprio modelo, aqui no GUJ já tem alguns tuturiais …
Quanto ao restante, tenta criar um Vector de String, ai voce passa pra seu modelo este como sendo o array de colunas.

String[] nomeColunas = {"Belgica","Brasil"};

e pra prencher sua tabela faria dois for um pra controlar as linhas outro as colunas

int linhas = tabela.getRowCount();
int colunas = tabela.getColumnCount();
for(int linha = 0;linha<linhas;linha++)
     for(int col = 0;col<colunas;col++)
        tabela.getModel().getValueAt( linha,col); // Pra recuparar o valor de uma celula da tabela

E voce faz a mesma coisa pra armazenar quando voce criar seu model (DefaultTableModel)
só que chamando ou o insert() ou addRow();
Mas faz uma busca que encontas um material melhor pra manipular JTable, aqui no GUJ !

IMPORTANTE: Não use o DefaultTableModel. Você estará duplicando os dados, deixando seu código inseguro, pouco encapsulado e mais difícil.

Aprenda a fazer seu próprio TableModel. É ele que descreve para Table que dados exibir. Aqui tem ótimos tutoriais para isso:
http://www.informit.com/articles/article.aspx?p=332278
http://www.informit.com/articles/article.aspx?p=333472

Outra coisa. A classe Vector é antiga, e não devia ser usada desde a versão 1.2 do Java.
No lugar, use a classe ArrayList. Ela não só tem uma interface muito mais simples, como também não é sincronizada, o que a torna muito mais rápida. O uso dela é muitíssimo similar ao do Vector, e você pode conferir aqui:
http://www.guj.com.br/posts/list/74068.java#389435

Você também pode usar o TableModel inteligente, baseado num enum de colunas, que eu deixei aqui:
http://www.guj.com.br/posts/list/100793.java

Eai pessoal!

Estou na mesma turma que o André, e o professor que deixo como obrigatório o JTable, JTableModel e o Vector.

Consegui fazer esse programa, mas preciso otimizar ele, pq ta nada otimizado eheh.

Abraços!

Pelamordedeus. Avisa o seu professor que o Vector não é recomendado desde o Java 1.2.

No lugar, use as classes de lista, List e ArrayList. O uso é muito parecido, aqui tem um bom exemplo:
http://www.guj.com.br/posts/list/74068.java#389435

Quanto ao TableModel, é isso mesmo. Aprenda a fazer o seu e fuja do Default(eca)TableModel.