Table = new MyTable(); Não consigo usar meus metodos

5 respostas
squall926

Boa noite!
Criei ua Tabela que salva em um arquivo seu proprio Model, mas quando tento usar os metodos public não são reconhecidos pela IDE (NB6,5).

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package pessoal.table;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.ObjectInput;
import java.io.ObjectInputStream;
import java.io.ObjectOutput;
import java.io.ObjectOutputStream;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
import pessoal.constantes.Constantes;

/**
 *
 * @author Alirio Oliveira
 */
public class MyTable extends JTable implements Constantes{

    public void carregar(){
        try{
            File f = new File("c:\TablePagar.ser");
            if(!f.exists()){
                DefaultTableModel model = new DefaultTableModel();
                model.setColumnIdentifiers(COLUNAS);
                model.addRow(new String[]{"","","","","","",""});
                setModel(model);
                return;
            }
                
            FileInputStream fStream = new FileInputStream(f);
            ObjectInput stream = new ObjectInputStream(fStream);
            Object obj = stream.readObject();
            if(obj instanceof DefaultTableModel)
                setModel((DefaultTableModel) obj);
            stream.close();
            fStream.close();  
            
        }catch(Exception e){
            System.err.println("Serialization error #1: "+ e.toString());
        }        
    }
    public void salvar(){
        try{
            FileOutputStream fStream = new FileOutputStream("c:\TablePagar.ser");
            ObjectOutput stream = new ObjectOutputStream(fStream);
            stream.writeObject(getModel());
            stream.flush();
            stream.close();
        }catch(Exception e){
            System.err.println("Serialization error #2: "+ e.toString());
        }        
    }


}

uso o codigo acima assim:

JTable myTable = new MyJTable();

Não consigo usar os metodos :

myTable.salvar(); myTable.carregar();

Esses metodos não são reconhecidos pela IDE.
Alguem tem ideia o porque?

Grato!!!
nem

5 Respostas

davidtiagoconceicao
JTable myTable = new MyJTable();

Você está criando uma variável de referência para o tipo JTable, portanto pode usar apenas os métodos deste tipo.
Experimente substituir a linha acima por:

MyJTable myTable = new MyJTable();
Marky.Vasconcelos

Ou então fazer um Cast na hora de usar

JTable myTable = new MyJTable();
(MyJTable (myTable)).salvar();

Apesar que acho voce nao extender JTable e sim implementar TableModel ou extender a AbstractTableModel e trabalhar com carregar e salvar só com o modelo

davidtiagoconceicao

Boa dica, nem havia pensado nisso.
Se bem que se for seguir o MVC bem certinho, acho que nem é papel do TableModel fazer isso. Ou é??
Mas tudo bem squall926, veja como fica melhor para você.

Marky.Vasconcelos

Não… quem salva e carrega tem que ser uma classe estilo DAO mesmo…
o TableModel tem que ser encarregado apenas de mostrar os dados e com alguma programação extra atualizalos com as modificações da JTable mas o DAO que os salva depois.

Apesar que ali… ele está salvando por ObjectOutputStream um objeto Serializavel.
Mas acho melhor pegar apenas a List do Model e salvar do mesmo modo já que ele quer fazer dessa forma.

davidtiagoconceicao

Beleza, era bem o que eu imaginava. :slight_smile:

Criado 5 de janeiro de 2009
Ultima resposta 5 de jan. de 2009
Respostas 5
Participantes 3