mouseClicked - ajuda

3 respostas
carlosalbertosales

Boa noite pessoal,
Na primeira vez que rodo meu sistema eu consigo pegar um evento de mouse (Clicando 2x) na minha tabela. Mas basta eu pesquisar e redefinir minha tabela que (Clicando 2x )ele me retorna :
Exception in thread “AWT-EventQueue-0” java.lang.ArrayIndexOutOfBoundsException: -1
segue parte do sistema :

public void PainelApresentacao() {
        //aqui instancia o painel de dados do cliente
        jpApresenta = new JPanel();
        jpApresenta.setBorder(BorderFactory.createTitledBorder("Dados de Clientes"));
        jpApresenta.setSize(675, 230);
        jpApresenta.setLocation(5, 340);
        this.jpApresenta.setLayout(new GridLayout(1, 1, 0, 0));
        this.add(jpApresenta);

        String[] col = {"Codigo ", "Nome Cliente ", "Telefone", "Celular"};
        modelo = new DefaultTableModel(col, 0);
        tabela = new JTable(modelo) {

            @Override
            public boolean isCellEditable(int row, int column) {
                return false;
            }
        };
        criaJtable();

        tabela.addMouseListener(new MouseListener() {

            public void mouseClicked(MouseEvent e) {
                if (e.getClickCount() == 2) {
//                    int linha = tabela.getSelectedRow();
//                    int coluna = tabela.getSelectedColumn();
                    int cod = 0;
                    cod = (Integer) modelo.getValueAt(tabela.getSelectedRow(), 0);
//                    JTable tabela = (JTable) e.getSource();
                    ClienteDao cd = new ClienteDao();
                    cd.getCliente(cod);
                    System.out.println("agora to pegando ele : " + cod);
                    txtNome.setText(cd.getCliente(cod).getNome());
                    txtCpfCnpj.setText(cd.getCliente(cod).getCpfcnpj());
                    txtRgIe.setText(cd.getCliente(cod).getRgie());
                    txtEndereco.setText(cd.getCliente(cod).getEndereco());
                    txtNumero.setText(cd.getCliente(cod).getNumero());
                    txtBairro.setText(cd.getCliente(cod).getBairro());
                    txtComplemento.setText(cd.getCliente(cod).getComplemento());
                    txtCep.setText(cd.getCliente(cod).getCep());
                    txtCidade.setText(cd.getCliente(cod).getCidade());
                    txtEstado.setText(cd.getCliente(cod).getEstado());
                    txtEmail.setText(cd.getCliente(cod).getEmail());
                    txtTelefone.setText(cd.getCliente(cod).getTelefone());
                    txtCelular.setText(cd.getCliente(cod).getCelular());
                    txtSexo.setText(cd.getCliente(cod).getSexo());
                    txtContato.setText(cd.getCliente(cod).getContato());
                    txtObs.setText(cd.getCliente(cod).getObs());



                }
            }

            public void mousePressed(MouseEvent e) {
            }

            public void mouseReleased(MouseEvent e) {
            }

            public void mouseEntered(MouseEvent e) {
            }

            public void mouseExited(MouseEvent e) {
            }
        });

    }

abaixo segue o criaJtable();

private void criaJtable() {
        ClienteDao cli = new ClienteDao();
        List clientes = cli.buscarTodos();
        for (Object c : clientes) {
            Cliente cl = (Cliente) c;
            modelo.addRow(new Object[]{cl.getId(), cl.getNome(), cl.getTelefone(), cl.getCelular()});
        }
        JScrollPane pane = new JScrollPane(tabela, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
        tabela.setVisible(true);
        //manipulando o cabeçalho da planilha
        JTableHeader header = tabela.getTableHeader();
        header.setBackground(Color.ORANGE);
        jpApresenta.add(pane);
        this.add(jpApresenta);
    }

aqui onde chamo o botão pesquisar

else if (e.getSource() == btnPesquisa) {
            if (txtPesquisa.getText().trim().equals("")) {
                JOptionPane.showMessageDialog(null, "Criando a tabela denovo.....");
                PainelApresentacao();
            } else {
                JOptionPane.showMessageDialog(null, "digitei algo............");
            }
        }

to nesse problema já um tempão.
acho que o problema é obvio, mas não consigo ve-lo. desdejá agradeço.

3 Respostas

mauricioadl

duas dicas:
Quando for usar somente um metodo do evento de mouse, troque isso:

por isso:

Assim vc escreve somente o metodo que precisa, fica mais limpo o codigo.

Outra dica, NUNCA use DefaultTableModel, alem de ficar dificil de manipular, perde-se muito tempo tentando resover esses probleminhas chatos.

carlosalbertosales

mauricioadl:
duas dicas:
Quando for usar somente um metodo do evento de mouse, troque isso:

por isso:

Assim vc escreve somente o metodo que precisa, fica mais limpo o codigo.

Outra dica, NUNCA use DefaultTableModel, alem de ficar dificil de manipular, perde-se muito tempo tentando resover esses probleminhas chatos.

caro amigo, a diferença entre os dois código

e

é somente que somente implementa o metodo que precisa?.

mauricioadl

isso mesmo, a unica diferenca e que um deles eh uma classe abstrata onde vc pode implementar somente o metodo necessario, deixando seu codigo mais limpo.

Criado 22 de fevereiro de 2012
Ultima resposta 23 de fev. de 2012
Respostas 3
Participantes 2