Criar vários JTextField

9 respostas
J

Boa tarde Galera!!

Ainda sou novo na area e gostaria de tirar algumas dúvidas com vocês.
Talvez alguem ja tenha respondido isso antes mas não encontrei.

Preciso criar um array que crie para mim um determinado numero de JTextField e que ele posicione na tela do maior para o menor usando um switch.
Exemplo:

Classe TELA:
package Form;

import java.awt.Container;
import java.awt.Image;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JTextField;

/**
 *
 * @author Jefferson
 */
public class Tela extends JFrame {

    private JButton bt_calcular;
    private JButton bt_limpar;
    private JButton bt_novoCalc;
    private JButton bt_sair;
    private JTextField txt_mes01;

    /**
     *
     */
    public Tela() {
        super("Calculo de MÉDIA ");
        this.setSize(800, 700);

        Container t = this.getContentPane();
        t.setLayout(null);

        bt_calcular = new JButton("CALCULAR");
        bt_limpar = new JButton("LIMPAR");
        bt_novoCalc = new JButton("NOVO CALCULO");
        bt_sair = new JButton("SAIR");
        txt_mes01 = new JTextField();

        bt_calcular.setBounds(50, 600, 150, 25);
        bt_limpar.setBounds(200, 600, 150, 25);
        bt_novoCalc.setBounds(350, 600, 150, 25);
        bt_sair.setBounds(500, 600, 150, 25);

        txt_mes01.setBounds(50, 50, 80, 25);

        t.add(bt_calcular);
        t.add(bt_limpar);
        t.add(bt_novoCalc);
        t.add(bt_sair);
        t.add(txt_mes01);

        Image Icone = Toolkit.getDefaultToolkit().getImage("Logo.gif");
        setIconImage(Icone);
        this.setExtendedState(JFrame.MAXIMIZED_BOTH);
        this.setVisible(true);

        bt_calcular.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                JOptionPane.showMessageDialog(null, "Será Feito Calculo");
            }
        });
        bt_limpar.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                JOptionPane.showMessageDialog(null, "Será Limpado a tela");
            }
        });
        bt_novoCalc.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                JOptionPane.showMessageDialog(null, "Será Feito Calculo");
            }
        });
        bt_sair.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                int escolha = JOptionPane.showConfirmDialog(null, "Deseja realmente sair?");
                if (escolha == JOptionPane.YES_OPTION) {
                    System.exit(EXIT_ON_CLOSE);
                }
            }
        });
        this.addWindowListener(new WindowAdapter() {
            public void windowClosing(WindowEvent e) {
                System.exit(0);
            }
        });
        int qtd = Integer.valueOf(JOptionPane.showInputDialog("Quantos"));
        switch (qtd) {
            case 1:
                /*
                 *Criar 1 JTextField na posição 50
                 */
                break;
            case 2:
            /*
             *Criar 2 JTextField na posição 50 e 100
             */
            case 3:
            /*
             *Criar 3 JTextField na posição 50, 100 e 150
             */
        }
    }
}
Classe Principal
package Curva;

import Form.Tela;

/**
 *
 * @author Jefferson
 */
public class Principal {

    public static void main(String[] args) {
        new Tela().setVisible(true);
    }
}

Um abraço a todos e Obrigado por toda ajuda.

9 Respostas

E

Normalmente, quando você tem um número limitado e fixo de componentes (por exemplo, JTextFields), você cria todos e depois os desabilita - ou seja, setEnable(false) - caso necessário. (Pode até esconder, se for o caso; normalmente você desabilita mesmo).

J

Obrigado pela resposta amigo.
Mas consegui usando o seguinte código:

int qtd = Integer.valueOf(JOptionPane.showInputDialog("Quantos")); //Criando JTextField para gravar os DIAS JTextField[] jTextDias = new JTextField[qtd]; int ix = 100; for (JTextField d : jTextDias) { d = new JTextField(); d.setBounds(100, ix, 100, 25); d.setVisible(true); this.add(d); ix += 30; } }

A dúvida agora é como fazer com que eu some os valores deste array.
Se puder me ajudar agradeço desde já.

E

O método getText() do JTextField lhe fornece a string que foi digitada no JTextField.

Você pode converter a string em um número e depois fazer a soma desses números.

Não sei se o que você quer somar são inteiros ou números de ponto flutuante (por exemplo, 2.31). Se for números de ponto flutuante, use Double.parseDouble para converter cada String em um double.

Tem uma mancadinha no seu código - você só adicionou os JTextField no seu componente (this.add (d)) mas não os incluiu no array de JTextField. O correto é fazer o seguinte:

JTextField[] jTextDias = new JTextField[qtd];  
        int ix = 100;  
        for (int i = 0; i < qtd; ++i) {
            JTextField d = new JTextField();  
            jTextDias [i] = d;
            d.setBounds(100, ix, 100, 25);  
            d.setVisible(true);  
            this.add(d);  
            ix += 30;  
        }

Depos de feito isso, você pode acessar os elementos de jTextDias sem problemas. O que você tinha feito não vai funcionar de jeito nenhum, infelizmente.

E

É que isto aqui:

for (JTextField d : jTextDias) {  
            d = new JTextField();

não atribui de volta os elementos dentro do array jTextDias. É que d não é um sinônimo para jTextDias[i]; ele é uma variável separada. Quando você fez isso, só sobrepôs o valor que d recebeu no cabeçalho do for (que é “null”) com o valor não-nulo retornado pelo new JtextField, mas não atualizou o array jTextDias.

J

Legal cara, mudei meu código pra criar os JTextDias no for que você me mandou, porem mesmo assim eu não consigo aplicar o metodo set no JTextField que foi criado.

Como eu teria que fazer?
Por exemplo: Criei 3 JTextField:

int x = 3; JTextField[] jTextDias = new JTextField[x]; int ix = 100; for (int i = 0; i < x; ++i) { JTextField d = new JTextField(); jTextDias[i] = d; d.setBounds(100, ix, 100, 25); d.setVisible(true); this.add(d); ix += 30; }

Tenho um botão para aplicar o valor “DIAS” no JTextField 2.

Tentei assim:

bt_botao.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { JOptionPane.showMessageDialog(null, "Adiciona Dias"); this.d[1].setText("Dias"); } });

Só lembrando você que ainda sou novo em JAVA, por isso, agradeço a paciencia em me ajudar…rs
Abraços

E

Me diz onde eu escrevi “set” no meu post. Eu escrevi “getText” :slight_smile:

J

Amigos, eu conheço pouco JAVA mas eu sei que é possivel passar parametros através do método setText.
O Médoto get eu consigo apenas acessar a informação, para passar parametros eu preciso usar o método setText.
Você ainda não entendeu o que eu estou querendo.

E

Está dando um erro de compilação aqui, não?

this.d[1].setText("Dias");

Qual é a declaração do array d? Onde a declaração está?

J

Resolvido!

Consegui usando o seguinte código:

jTextDias[0].setText("alguma coisa");

Obrigado pela atenção!

Criado 3 de dezembro de 2012
Ultima resposta 6 de dez. de 2012
Respostas 9
Participantes 2