Ajuda Criação MyTableModel

1 resposta
Micke

Boa Tarde Pessoal!!

Estava lendo em Artigos/Tutoriais do GUJ e la mostra como que se cria um MyTableModel, entaum resolve fazer um para meu caso pelo motivo de ter chegado na parte de alteração dos campos da tabela e com Default fica muito ruim de se mecher com isso… No tutorial do GUJ mostra ele inserindo dados manualmente, no meu caso eu pego de uma tabela do BD, gostaria de saber se o jeito que eu fiz esta correto…

Segue o código:

Essa é a classe do MyTableModel que eu fiz aqui…

MyTableModel

package PacClasses

import java.util.ArrayList;
import java.util.Iterator;
import javax.swing.table.AbstractTableModel;

public class MyTableModel extends AbstractTableModel
{
    private ArrayList linhas = null;
    private String[] colunas = null;
    private boolean[] colsEdicao;

    public MyTableModel(ArrayList dados, String[] colunas)
    {
        setLinhas(dados);
        setColunas(colunas);
        //colsEdicao = edicao;
    }

    public String getColumnName(int col)
    {
        return getColunas()[col];
    }
    
    public String[] getColunas()
    {
        return colunas;
    }
    public ArrayList getLinhas()
    {
        return linhas;
    }

    public void setColunas(String[] strings)
    {
        colunas = strings;
    }
    public void setLinhas(ArrayList list)
    {
        linhas = list;
    }

    public boolean isCellEditable(int row, int col)
    {
        return colsEdicao[col];
    }

    public int getColumnCount()
    {
        return getColunas().lenght;
    }
    public int getRowCount()
    {
        return getLinhas().size();
    }

    public Object getValueAt(int rowIndex, int columnIndex)
    {
        String[] linha = (String[]) getLinhas().get(rowIndex);
        return linha[columnIndex];
    }
    public void setValueAt(Object value, int row, int col)
    {
        String[] linha = (String[]) getLinhas().get(row);
        linha[col] = (String)value;
        fireTableCellUpdated(row, col);
    }

    public void addRow(String[] dadosLinhas)
    {
        getLinhas().add(dadosLinhas);
        int linha = getLinhas().size()-1;
        fireTableRowsInserted(linha, linha);
        return;
    }

    public void removeRow(int row)
    {
        getLinhas().remove(0);
        fireTableRowsDeleted(row, row);
    }
    public boolean removeRow(String val, int col)
    {
        Iterator i = getLinhas().iterator();
        int linha = 0;

        while(i.hasNext())
        {
            String[] linhaCorrente = (String[]) i.next();
            linha++;

            if(linhaCorrente[col].equals(val))
           {
                getLinhas().remove(linha);
                fireTableRowsDeleted(linha, linha);
                return true;
           }
        }
        return false;
    }
}

Essa é a classe Cadastro de Funcionarios…

CadFuncECS

package PacPrincipal

import PacConexao.Conexao;
import PacClasses.FuncionarioECS;
import PacClasses.MyTableModel;
import java.sql.*;
import java.util.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class CadFuncECS extends javax.swing.JPanel
{
    private Conexao con;
    private Statement stm;
    private ResultSet rs;

    public CadFuncECS(Conexao con)
    {
        this.con = con;
        initComponents();

        inserirDados(getDados());
    }

    public ResultSet getDados()
    {
        try
        {
            stm = con.getStatement();
            rs = stm.executeQuery("select * from funcionariosecs"); //A tabela possui somente uma coluna
        }
        catch(SQLException e)
        {
            e.printStackTrace();
        }
        return rs;
    }

    public void inserirDados(ResultSet rs)
    {
        try
        {
            ResultSetMetaData metaData = rs1.getMetaData();
            String[] colunas = new String[metaData.getColumCount()];
            ArrayList linhas = new ArrayList();

            for(int i = 0; i < colunas.lenght; i++)
            {
                colunas[i] = metaData.getColumnName(i+1);
            }
            while(rs1.next())
            {
                ArrayList linha = new ArrayList();
                for(int i = 1; i < colunas.lenght; i++)
                {
                    linha.add(rs1.getString(i));
                }
                linhas = linha;
            }

            MyTableModel modelo = new MyTableModel(linhas, colunas);
            tbFuncECS.setModel(modelo);
        }
        catch(SQLException e)
        {
            System.out.println(e);
        }
    }
}

Fiquei meio extenso :oops:, mas achei melhor colocar as duas classes que estou usando para facilitar melhor a compeensao, gostaria de saber se o pessoal pudesse me dizer o que eu estaria fazendo de erro nessas duas classe… quando eu chamo a tela de Cadastro de Funcionários ele monta a tabela somente com a coluna e sem as linhas, o porque disso eu ainda nao entendi…

Fico no aguardo de alguma dica, e continuando a quebra a cabeça aqui!!!

Desde ja Agradeço a compreensão de Todos!!!

1 Resposta

Micke

Bom, as linhas na tabela tambem ja cansegui bem como a inserção de dados e a atualização a cada inserção…

Mudei o seguinte no MyTableModel:

Em vez de ser do tipo String[] tinha que ser somentr String…

public Object getValueAt(int rowIndex, int columnIndex)   
{
    String linha = (String) getLinhas().get(rowIndex);   
    return linha;   
}

Agora to tentando arrumar a exclusao, mas ta meio dificil… não entendi como que se usa esses dois métodos de exclusao:

public void removeRow(int row)   
{   
    getLinhas().remove(0);   
    fireTableRowsDeleted(row, row);   
}   
public boolean removeRow(String val, int col)   
{   
    Iterator i = getLinhas().iterator();   
    int linha = 0;   

    while(i.hasNext())   
    {   
        String[] linhaCorrente = (String[]) i.next();   
        linha++;   
  
        if(linhaCorrente[col].equals(val))   
       {   
            getLinhas().remove(linha);   
            fireTableRowsDeleted(linha, linha);   
            return true;   
       }   
    }   
    return false;   
}
Criado 20 de fevereiro de 2008
Ultima resposta 20 de fev. de 2008
Respostas 1
Participantes 1