Não consigo selecionar o campo da tabela

8 respostas
J

Galera me ajudem por favor.
Estou tentando selecionar um campo da tabela e aparecer os dados no jTextField1,
e o SelectedRow() traz -1
Segue em baixo o método

private void jBSelecionarActionPerformed(java.awt.event.ActionEvent evt) {                                             


      String nome = (String) jTable.getValueAt(jTable.getSelectedRow(), 0);
        String id = (String) jTable.getValueAt(jTable.getSelectedRow(), 1);
        String Cpf = (String) jTable.getValueAt(jTable.getSelectedRow(), 2);
        String Email = (String) jTable.getValueAt(jTable.getSelectedRow(), 3);

        jTFuncionario.setText(nome);
        jTCodigo.setText(id);
        jFCpf.setText(Cpf);
        jTEmail.setText(Email);
Erro

Exception in thread “AWT-EventQueue-0” java.lang.IndexOutOfBoundsException: Invalid index

at javax.swing.DefaultRowSorter.convertRowIndexToModel(DefaultRowSorter.java:497)

at javax.swing.JTable.convertRowIndexToModel(JTable.java:2611)

at javax.swing.JTable.getValueAt(JTable.java:2686)

at PesqFuncionario.jBSelecionarActionPerformed(PesqFuncionario.java:529)

at PesqFuncionario.access$900(PesqFuncionario.java:31)

at PesqFuncionario$10.actionPerformed(PesqFuncionario.java:310)

at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)

at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)

at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)

at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)

at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)

at java.awt.Component.processMouseEvent(Component.java:6289)

at javax.swing.JComponent.processMouseEvent(JComponent.java:3267)

at java.awt.Component.processEvent(Component.java:6054)

at java.awt.Container.processEvent(Container.java:2041)

at java.awt.Component.dispatchEventImpl(Component.java:4652)

at java.awt.Container.dispatchEventImpl(Container.java:2099)

at java.awt.Component.dispatchEvent(Component.java:4482)

at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4577)

at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4238)

at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4168)

at java.awt.Container.dispatchEventImpl(Container.java:2085)

at java.awt.Window.dispatchEventImpl(Window.java:2478)

at java.awt.Component.dispatchEvent(Component.java:4482)

at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:644)

at java.awt.EventQueue.access$000(EventQueue.java:85)

at java.awt.EventQueue$1.run(EventQueue.java:603)

at java.awt.EventQueue$1.run(EventQueue.java:601)

at java.security.AccessController.doPrivileged(Native Method)

at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87)

at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:98)

at java.awt.EventQueue$2.run(EventQueue.java:617)

at java.awt.EventQueue$2.run(EventQueue.java:615)

at java.security.AccessController.doPrivileged(Native Method)

at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87)

at java.awt.EventQueue.dispatchEvent(EventQueue.java:614)

at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)

at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)

at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)

at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)

at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)

at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)

8 Respostas

K

Amigo quantas colunas sua tabela tem ?

J

tem 4 colunas, e no caso se eu definir conforme abaixo sem o getSelectedRow, da certo, mas eu só vou poder clicar na primeira linha.

String nome = (String) jTable.getValueAt(0, 0);
Dani_Gomes

juan_net.
Tenta fazer assim:

String nome = jTable.getValueAt(jTable.getSelectedRow(), 0).toString();

Pra ver se muda alguma coisa.
Só uma pergunta, você esta usando defaultTableModel ou está usando seu próprio tableModel?

J

eu criei minha própria TableModel

E eu coloquei do jeito que você postou e deu o erro
Exception in thread “AWT-EventQueue-0” java.lang.IndexOutOfBoundsException: Invalid index

Dani_Gomes

Posta o método getValueAt do seu tableModel.

J
@Override
    public void setValueAt(Object valor, int linha, int coluna) {
        data[linha][coluna] = valor.toString();
        fireTableCellUpdated(linha, coluna);
    }

    @Override
    public Object getValueAt(int linha, int coluna) {
        return data[linha][coluna];
    }
}
Dani_Gomes

Seguinte, você não vai conseguir enviar os parametros separados, porque o seu método não está definido assim.
Veja como eu faço normalmente nos meus tableModel:

public Object getValueAt(int linha, int coluna) {
        if(coluna==0){
            return clientes.get(linha).getItemProduto();
        }else
            if(coluna==1){
                return clientes.get(linha).getQuantidade();
            }else
                if(coluna==2){
                    return clientes.get(linha).getValorUnitario();
                }else
                    if(coluna==3){
                        return clientes.get(linha).getValorTotal();
                    }
                return "";
    }

Se você tiver em dúvida sobre o restante do seu tableModel, dá uma olhada neste link:
http://www.guj.com.br/java/149034-duvidas-ao-fazer-uma-consulta#808003

J

Vlw vou da uma olhada aqui…
Obrigado pela ajuda

Criado 25 de junho de 2012
Ultima resposta 25 de jun. de 2012
Respostas 8
Participantes 3