Pegar posição de um JTextField em tempo de execução

3 respostas
R

Alô pessoal do fórum! Tenho um JPanel que tem 2 JTextField para cadastrar o nome de uma entidade e seu telefone de contato. Aí fiz um array JTextField[] pra adicionar um novo telefone a cada vez que o usuário clica em um botão. Então os JTextField vão sendo criados um embaixo do outro em tempo de execução. Do jeito que estou fazendo ele cria o primeiro JTextField na posicao correta, mas depois vai criando os outros em cima desse primeiro que ele criou. Mas como é que eu faço pra pegar a posição do elemento dentro do panel em tempo de execução para posiciona-los da maneira que eu quero? O código pra inserir os novos componentes tah assim:

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
        // variavel imcrementada a cada vez que o usuario clica no botao 
        cont++;
        
        int numTel = cont + 1;
        int tamanho = 3;
        
        JTextField[] listaTelefones = new JTextField[tamanho];
        JTextField txtNovoTel = new JTextField();
        JLabel[] listaLabels = new JLabel[tamanho];
        JLabel labelNovoTel = new JLabel("Tel " + numTel + ":");
        
        // Posicao que não to conseguindo atualizar a cada incremento do laço
        int novaPosicaoLabel = labelTelefone.getY() * 2 - 12;
        int novaPosicaoTxt = txtTelefone.getY() * 2 - 12;
        
        for (int i = 0; i < listaTelefones.length; i++) {
            listaTelefones[i] = txtNovoTel;
            listaLabels[i] = labelNovoTel;
            
            /* Seta a posicao e o tamanho dos componentes com base nos que jah foram criados na primeira vez que o panel aparece
                labelTelefone --> label que aparece antes do usuário comecar a clicar no botao
                txtTelefone --> textfield que aparece antes do usuário comecar a clicar no botao
            */
            listaLabels[i].setBounds(labelTelefone.getX(), novaPosicaoLabel, labelTelefone.getWidth(), labelTelefone.getHeight());
            listaTelefones[i].setBounds(txtTelefone.getX(), novaPosicaoTxt, txtTelefone.getWidth(), txtTelefone.getHeight());
            
            panelTelefone.add(listaTelefones[i]);
            panelTelefone.add(listaLabels[i]);
            panelTelefone.revalidate();
            panelTelefone.repaint(); 
        }
    }

Qualquer idéia eh muito bem vinda! :slight_smile:

As telas com os estados a cada click vao em anexo:

3 Respostas

pintofree

bem nao tem como vc pegar a posicao do text field, por isso a minha ideia e jogar eles dentro de uma panel, ai lancar o panel na tela, passando as cordenadar atualizadas pra ele.

outra cosia no seu construtor crie os botoes ai depois crie um metodo so para adicionar os novos panels, pra ficar mais organizado seu codigo

fabim

Nao seria melhor se vc fizesse com JTable?

R

valeu pela ajuda pintofree, vou testar a ideia de colocar nos panels. Vou dar uma pesquisada tambem no JTable, fabiosci.
aih qualquer duvida volto aki d novo!

[]'s

Criado 26 de março de 2008
Ultima resposta 27 de mar. de 2008
Respostas 3
Participantes 3