Problemas com JTable

2 respostas
GraGarcia

Boa noite galera,

Estou tentando passar alguns dados a minha tabela, mas, esta acusando o seguinte erro:

Exception occurred during event dispatching:
java.lang.ArrayIndexOutOfBoundsException: 0 >= 0

Se alguem puder ajudar....

O evento ocorre ao clicar em um botão em minha tela, que chama este método. O código é o seguinte:

public void atualizaTabProduto(){
        dtm.addRow(new Object[][]{}); //adiciona linha
        int numLinha = dtm.getRowCount(); //recebe o numero de linhas do dataModel

        int codMed       = Integer.parseInt(jtfCodMedicamento.getText());
        String desMed  = jlNomMedicamento.getText();
        int qtdMed       = Integer.parseInt(jtfQtdMedicamento.getText());
        double vlrUnit  = (Double.parseDouble(jtfVlrUnitario.getText().replace(",", ".")));

        dtm.setValueAt(codMed,  (numLinha - 1), 0);
        dtm.setValueAt(desMed,  (numLinha - 1), 1);
        dtm.setValueAt(qtdMed,  (numLinha - 1), 2);
        dtm.setValueAt(vlrUnit, (numLinha - 1), 3);
        dtm.setValueAt((qtdMed * vlrUnit), (numLinha - 1), 4);
    }

Grato

2 Respostas

Vinny

Qdo eu vou inserir novas Linhas na Tabela eu faço da seguinte maneira
declaro um array do tipo string com os nomes das colunas e tabem um modelo padrão da tabela
que eu vou usar para inserir as novas linhas e tb é a claro declaro a JTable passando como parametro o Modelo Padrão da Tabela!

private String Colunas[]={"Código","Nome","Data do Cadastro"};
    private DefaultTableModel modelo=new DefaultTableModel(null,Colunas);
    private JTable tabela = new JTable(modelo);

para inserir uma nova linha eu declaro um array do tipo string com a qtde de colunas
que a minha tabela ira ter no meu caso aki tres colunas, os valores que eu quero adicionar a tabela
eu vou atrubuir a variavel do tipo String nas posições correspondente as colunas da tabela
apos atribuir os valores a string eu xamo o metodo addRow
so que usando o Modelo Padrão com a string como parametro para inserir na tabela.

Bom eu aprendi a inserir as linhas da tabela desse modo não sei te explicar examente o pq de usar um DefaultTableModel,
se alguem souber eu gostaria de aprender tambem sobre isso.

mas acredite funciona. segue o exemplo abaixo.

linha[0]=Codigo;
   linha[1]=Nome;
   linha[2]=Data;
   
   modelo.addRow(linha);

Espero que isso te ajude, qualquer coisa é so postar ai!

rodrigo_rosalin

Isso me cheira mal, normalmente eu crio um modelo pra manipular dados em um Jtable.

Dá uma olhada neste exemplo de como criar seu modelo:

/**
 *
 * @author rodrigo.rosalin
 */
public class ModeloFuncionario extends AbstractTableModel
{
    private ArrayList dadosLista = new ArrayList(); 
    private String[] colunas = {"Id", "Nome", "Sobrenome", "Departamento", "Função"};
    
       
    public void addFuncionario(Funcionario entidade)
    {
        dadosLista.add(entidade);
        fireTableDataChanged();
    }
    
    public void addListFuncionario(List list)
    {
        dadosLista.addAll(dadosLista);
        fireTableDataChanged();
    }
    
    public void limparDados()
    {
        dadosLista = new ArrayList();
        fireTableDataChanged();
    }
    
    
    public int getRowCount() {
        return dadosLista.size();
    }

    public int getColumnCount() {
        return colunas.length;
    }

    public Object getValueAt(int rowIndex, int columnIndex) {
        Funcionario e = (Funcionario)dadosLista.get(rowIndex);
    
        switch(columnIndex)
        {
            case 0:
                return e.getId();
            case 1:
                return e.getNome();
            case 2:
                return e.getSobrenome();    
            case 3:    
                return e.getDepartamento().getNome(); 
            case 4: 
                return e.getFuncao();
            default:
                return null;
        }
    
    }
    
  public String getColumnName(int index) 
  {
     return colunas[index];
  }

Como utilizar o modelo:

...
private ModeloFuncionario modelo = new ModeloFuncionario();

initComponentes()
{
    suaJTable.setModel(modelo);
} 

//ai desta forma você consegue manipular a tabela através do seu modelo
modelo.addFuncionario(new Funcionario(...));

Abraço

Criado 26 de junho de 2009
Ultima resposta 26 de jun. de 2009
Respostas 2
Participantes 3