Pegar o valor de um textfield

25 respostas
R

Bom, estou com problemas para pegar o valor dos meus textfields.

Classe componentes
public class Componentes extends JFrame implements ActionListener, KeyListener{

	private JFrame frame;
	private JPanel panel;
	private JLabel label;
	private JTextField textfield;
	private JButton button;
	private ActionListener list;
	private KeyListener keylist;
		
	public JFrame getFrame(){
		frame.setVisible(true);
		return frame;
	}
	public void Janela(String nome, int x, int y, int w, int h){
		panel = new JPanel();
		frame = new JFrame();
		frame.setTitle(nome);
		frame.setSize(x, y);
		frame.setLocation(w, h);
		frame.setResizable(false);
		frame.setDefaultCloseOperation(EXIT_ON_CLOSE);
		frame.getContentPane().add(panel);
		panel.setBackground(Color.white);
		panel.setLayout(null);
	}
	
	public void Label(String nome, int x, int y, int w, int h){
		label = new JLabel(nome);
		label.setBounds(x, y, w, h);
		panel.add(label);
	}
        public void TextField(int x, int y, int w, int h){
		textfield = new JTextField(); 
		textfield.setBounds(x, y, w, h);
		panel.add(textfield);
	}
	public void Botão(String nome, int x, int y, int w, int h, String legenda, char m){
		list = new Componentes();
		button = new JButton(nome);
		button.setBounds(x, y, w, h);
		button.addActionListener(list);
		button.setToolTipText(legenda);
		button.setMnemonic(m);
		panel.add(button);
	}
        @Override
	public void actionPerformed(ActionEvent e) {
		Object obj = e.getSource();
		button = (JButton)obj;
		if(obj instanceof JButton){
			button = (JButton)obj;
		}
		if(button.getText().equals("Entrar")){
			System.out.println("Botão ENTRAR");
                        //NAO SEI COMO PEGAR OS VALORES DOS DOIS TEXTFIELDS PARA CHAMAR O METODO LOGIN
		}
		if(button.getText().equals("Sair")){
			System.out.println("Botão SAIR");
			System.exit(0);
		}
	}
        @Override
	public void keyPressed(KeyEvent e) {
		if(e.isAltDown() && e.getKeyCode() == e.VK_S);
		if(e.isAltDown() && e.getKeyCode() == e.VK_E);
		if(e.getKeyCode() == e.VK_ENTER);		
	}
}
E a classe que cria as telas:
public class Telas{
	
	Componentes c, c2;
	static String teste;
	
	public Telas(){
		Login();
	}
	
	public void Login(){
		
		c = new Componentes();
		c.Janela("Locadora de veiculos SPEEDY", 550, 550, 300, 150);
		c.Label("Usuario:", 10, 380, 150, 25);
		c.alteraFont("Monotype Corsiva", 30);
		c.Label("Senha:", 10, 430, 150, 25);
		c.alteraFont("Monotype Corsiva", 30);
		c.Imagem("img/java03.jpg", 400, 10, 100, 100, "java");
		c.Imagem("img/java04.png", 340, 320, 200, 200, "java");
		c.Imagem("img/java01.png", 10, 10, 300, 300, "java");
		c.Imagem("img/mysql01.png", 400, 270, 100, 100, "mysql");
		c.Imagem("img/oracle.jpg", 270, 390, 100, 100, "oracle");
		c.TextField(115, 380, 100, 25);
		c.Botão("Entrar", 115, 480, 100, 25, "Entrar!", 'e');
		c.Botão("Sair", 10, 480, 100, 25, "SAIR!", 's');
		
		c.getFrame();
	}
}

Alguem pode dar uma força?

25 Respostas

Lindberg

String retorno = textfield.getText();

R

ja tentei. nao da certo!

alguem pode sugerir algo?

M

o codigo que o Lindberg passou está correto

o que aconteceu ou deixou de acontecer quando você colocou esta instrução?

e aonde você quer recuperar o texto do seu JTextField na sua classe?

R

if(button.getText().equals("Entrar")){ System.out.println("Botão ENTRAR"); //NAO SEI COMO PEGAR OS VALORES DOS DOIS TEXTFIELDS PARA CHAMAR O METODO LOGIN }

tem dois textfields quero pegar o valor dos dois

M

bom…

em primeiro lugar o seu actionPerformed está sujeito a erros de execuçao devido aos cast feito sem o teste do instanceof e if’s não aninhados corretamente

seria melhor se você fizesse isso:

public  void actionPerformed(ActionEvent e) {  
         Object obj = e.getSource();  

         if(obj instanceof JButton){  
             button = (JButton)obj; 

              if(button.getText().equals("Entrar")){  
                   System.out.println("Botão ENTRAR");  
                   
                    //Pegando valores do textfield
                    System.out.println(textfield.getText());

                    //Aqui você deve chamar algum metodo da Login para validar os dados do textfield


             }  
             if(button.getText().equals("Sair")){  
                 System.out.println("Botão SAIR");  
                 System.exit(0);  
             }   
         }  
        
     }
R

agora ai q esta o problema.

esse textfield é instancia de qual dos dois textfield? do user ou do password?

M

Bom ai que ta…

Você pode adicionar na sua função TextField o paramentro Name

public  void TextField(int x, int  y, int w, int h, String name){  
         textfield = new JTextField();   
         textfield.setBounds(x, y, w, h);  
         textfield.setName(name);
         panel.add(textfield);  
     }

Mas mesmo assim vai dar um trabalhinho porque você vai precisar procurar todos os componentes para achar o seu

for(int i = 0; i<seuContainer.getComponents().length; i++){
	if(seuContainer.getComponent(i) instanceof JTextField){
              if( ((JTextField)seuContainer.getComponent(i)).getName.equals("Login"))
                     //faz o que precisa para o login
              if( ((JTextField)seuContainer.getComponent(i)).getName.equals("Senha"))
                     //faz o que precisa para o senha
        }
}
R

Olá Renan,

Aparentemente seu problema está ao associar o ActionListener ao botão, porém o código possui algumas inconsistências.
Tomei a liberdade de fazer pequenas alterações. No final da classe segue o método main pra você testar :slight_smile:

public class Componentes extends JFrame implements ActionListener, KeyListener{  

	private JLabel label;  
	private JTextField textfield;  
	private JButton button;  

	public Componentes(String title, int x, int y, int w, int h){ 
		super(title); 
		this.setLayout(null);  
		this.setBounds(x,y,w,h);    
		this.setResizable(false);  
		this.setDefaultCloseOperation(EXIT_ON_CLOSE); 
	}  

	public void jLabel(String text, int x, int y, int w, int h){  
		label = new JLabel(text);  
		label.setBounds(x,y,w,h);  
		this.add(label);  
	}  
	public void jTextField(int x, int y, int w, int h){  
		textfield = new JTextField();   
		textfield.setBounds(x, y, w, h);  
		this.add(textfield);  
	}  
	public void jButton(String text, int x, int y, int w, int h, String legenda, char m){  
		button = new JButton(text);  
		button.setBounds(x, y, w, h);  
		button.addActionListener(this);  
		button.setToolTipText(legenda);  
		button.setMnemonic(m);  
		this.add(button);  
	}  
	@Override  
	public void actionPerformed(ActionEvent e) { 
		Object obj = e.getSource();
		if(obj instanceof JButton){  
			button = (JButton)obj;  
			if(button.getText().equals("Entrar")){  
				System.out.println("Botão ENTRAR");    
			} else if(button.getText().equals("Sair")){  
				System.out.println("Botão SAIR");  
			}  
		}
	}  
	@Override  
	public void keyPressed(KeyEvent e) {  
		/*if(e.isAltDown() && e.getKeyCode() == e.VK_S);  
		if(e.isAltDown() && e.getKeyCode() == e.VK_E);  
		if(e.getKeyCode() == e.VK_ENTER);  */       
	}
	@Override
	public void keyReleased(KeyEvent e) {
		// TODO Auto-generated method stub
	}
	@Override
	public void keyTyped(KeyEvent e) {
		// TODO Auto-generated method stub
	}
	
	public static void main(String[] args) {
        Componentes c = new Componentes("Locadora de veiculos SPEEDY", 300, 150, 550, 550);  
        c.jLabel("Usuario:", 10, 380, 150, 25);  
        c.jLabel("Senha:", 10, 430, 150, 25);  
        c.jTextField(115, 380, 100, 25);
        c.jButton("Entrar", 115, 480, 100, 25, "Entrar", 'e');  
        c.jButton("Sair", 10, 480, 100, 25, "Sair", 's');          
        c.setVisible(true);  
	}

}
R

nao entendi oq vc fez?

vc criou só um textfield, o meu problema é quando cria mais de um. E tem que pegar o valor de ambos

M

concerteza deve ter jeito mais facil de resolver se voce mudar algo no modo que voce gerencia a sua classe de componentes

mas da pra resolver deste jeito:

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JLayeredPane;
import javax.swing.JPanel;
import javax.swing.JRootPane;
import javax.swing.JTextField;
import javax.swing.JRootPane;

   public class  Componentes extends JFrame implements ActionListener, KeyListener{    
     
       private JLabel label;    
       private JTextField textfield;    
       private JButton button;    
    
       public Componentes(String title, int x, int y, int w, int h){   
           super(title);   
           this.setLayout(null);    
           this.setBounds(x,y,w,h);      
           this.setResizable(false);    
           this.setDefaultCloseOperation(EXIT_ON_CLOSE);   
       }    
     
       public void jLabel(String text, int x, int y, int w, int h){    
           label = new JLabel(text);    
           label.setBounds(x,y,w,h);    
           this.add(label);    
       }    
       public void jTextField(int x, int y, int w, int h, String name){    
           textfield = new JTextField();     
           textfield.setBounds(x, y, w, h);   
           textfield.setName(name);
           this.add(textfield);    
       }    
       public void jButton(String text, int x, int y, int w, int h, String legenda, char m){    
           button = new JButton(text);    
           button.setBounds(x, y, w, h);    
           button.addActionListener(this);    
           button.setToolTipText(legenda);    
           button.setMnemonic(m);    
           this.add(button);    
       }    
       @Override    
       public void actionPerformed(ActionEvent e) {   
           Object obj = e.getSource();  
           if(obj instanceof JButton){    
               button = (JButton)obj;    
               if(button.getText().equals("Entrar")){    
            	   System.out.println("Botão ENTRAR");

            	   //JRootPane esta dentro do JFrame
            	   JRootPane root = ((JRootPane)getComponent(0));
            	   //JLayeredPane esta dentro do JRootPane
            	   JLayeredPane layerdPane = ((JLayeredPane)root.getComponent(1));
            	   //JPanel esta dentro do JLayeredPane
            	   JPanel panel = ((JPanel)layerdPane.getComponent(0));
            	   for(int  i = 0; i<panel.getComponents().length; i++){
            		               		   
            		   if(panel.getComponent(i) instanceof JTextField){ 
            			   JTextField text = ((JTextField)panel.getComponent(i));
            			   if( text.getName().equals("user")) {
            				   System.out.println("Usuario: " + text.getText());
            			   }
            			   else if( text.getName().equals("senha")) {
            				   System.out.println("Senha: " + text.getText());
            			   }
            		   }  
            	   }
            		   
               } else if(button.getText().equals("Sair")){    
            	   System.out.println("Botão SAIR");    
           }    
       }  
   }    
   @Override    
   public void keyPressed(KeyEvent e) {    
       /*if(e.isAltDown() && e.getKeyCode() == e.VK_S);   
       if(e.isAltDown() && e.getKeyCode() == e.VK_E);   
       if(e.getKeyCode() == e.VK_ENTER);  */         
   }  
   @Override  
   public void keyReleased(KeyEvent e) {  
       // TODO Auto-generated method stub  
   }  
   @Override  
   public void keyTyped(KeyEvent e) {  
       // TODO Auto-generated method stub  
   }  
     
   public static void main(String[] args) {  
       Componentes c = new Componentes("Locadora de veiculos SPEEDY", 300, 150, 550, 550);    
       c.jLabel("Usuario:", 10, 380, 150, 25);    
       c.jLabel("Senha:", 10, 430, 150, 25);    
       c.jTextField(115, 380, 100, 25, "user");   
       c.jTextField(115, 430, 100, 25, "senha");  
       c.jButton("Entrar", 115, 480, 100, 25, "Entrar", 'e');    
       c.jButton("Sair", 10, 480, 100, 25, "Sair", 's');            
       c.setVisible(true);    
   }  
}

Seria mais facil fazer esta busca se vc guardasse todas as instacias de componentes criadas em um ArrayList por exemplo

M

DESCONSIDERE ESTE POST IA EDITA O DE CIMA E CLIQUEI EM CITAR

R

Mustang89, vou tentar desse seu jeito!

mais tarde posto resultado!

R

agora nao da mais erro, MAS nao esta carregando o valor do textfield =( :frowning: :frowning:

M

O que você quiz dizer com:

não está vindo o textfield.getText();

R

Na minha primeira resposta, disse que o problema estava nos listeners. Você implementou na classe um ActionListener e declarou outro com nome de list.
Ao acionar o botão, o código deveria chamar o actionPerformed implementado na classe, mas estava chamando o que você tinha atribuido ao botão (o list), que não fazia nada.

Sem arrumar isso, nada funcionaria dentro daquele actionPerformed, agora o problema é pegar o valor dos textfields, certo?
Acredito que a solução do Mustang deve funcionar! Mas cada textfield do seu sistema vai ter que ter um “if” lá dentro

Poste o código atual pra gente dar uma olhada e tentar ajudar :wink:

R

nao vem nada, nem null nem nada =/ :frowning: :frowning:

R

apenas botao enter, q é oq tem no system.out.println();

R

Coloca exatamente esse código que vai funcionar.
Implementei a sugestão do Mustang de criar uma lista com os textfields :slight_smile:

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.util.Iterator;
import java.util.Vector;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;

public class Componentes extends JFrame implements ActionListener, KeyListener{

    private JLabel label;
    private JTextField textfield;
    private JButton button;
    private Vector<JTextField> tfLista = new Vector<JTextField>();

    public Componentes(String title, int x, int y, int w, int h){
        super(title);
        this.setLayout(null);
        this.setBounds(x,y,w,h);
        this.setResizable(false);
        this.setDefaultCloseOperation(EXIT_ON_CLOSE);
    }

    public void jLabel(String text, int x, int y, int w, int h){
        label = new JLabel(text);
        label.setBounds(x,y,w,h);
        this.add(label);
    }
    public void jTextField(String nome,int x, int y, int w, int h){
        textfield = new JTextField();
        textfield.setBounds(x, y, w, h);
        textfield.setName(nome);
        this.add(textfield);
        tfLista.add(textfield);
    }
    public void jButton(String text, int x, int y, int w, int h, String legenda, char m){
        button = new JButton(text);
        button.setBounds(x, y, w, h);
        button.addActionListener(this);
        button.setToolTipText(legenda);
        button.setMnemonic(m);
        this.add(button);
    }
    @Override
    public void actionPerformed(ActionEvent e) {
        Object obj = e.getSource();
        if(obj instanceof JButton){
            button = (JButton)obj;
            if(button.getText().equals("Entrar")){
                try{
                    String usuario  = buscarJTextField("Usuário").getText();
                    String senha    = buscarJTextField("Senha").getText();
                    System.out.println("Usuário: "+usuario+", Senha: "+senha);
                } catch(Exception ex){
                    System.out.println("Não encontrou algum dos textfields");
                    ex.printStackTrace();
                }
            } else if(button.getText().equals("Sair")){
                System.out.println("Botão SAIR");
            }
        }
    }
    private JTextField buscarJTextField(String nome){
        for (Iterator<JTextField> i = tfLista.iterator(); i.hasNext();) {
            JTextField jTextField = i.next();
            if(jTextField.getName().equals(nome)) return jTextField;
        }
        return null;
        //Se não encontrar o textfield retorna null
    }

    @Override
    public void keyPressed(KeyEvent e) {
        /*if(e.isAltDown() && e.getKeyCode() == e.VK_S);
        if(e.isAltDown() && e.getKeyCode() == e.VK_E);
        if(e.getKeyCode() == e.VK_ENTER);  */
    }
    @Override
    public void keyReleased(KeyEvent e) {
        // TODO Auto-generated method stub
    }
    @Override
    public void keyTyped(KeyEvent e) {
        // TODO Auto-generated method stub
    }

    public static void main(String[] args) {
        Componentes c = new Componentes("Locadora de veiculos SPEEDY", 300, 150, 550, 550);
        c.jLabel("Usuario:", 10, 380, 150, 25);
        c.jLabel("Senha:", 10, 430, 150, 25);
        c.jTextField("Usuário",115, 380, 100, 25);
        c.jTextField("Senha",115, 430, 100, 25);
        c.jButton("Entrar", 115, 480, 100, 25, "Entrar", 'e');
        c.jButton("Sair", 10, 480, 100, 25, "Sair", 's');
        c.setVisible(true);
    }

}
M

o Romulo implementou exatamente o que eu estava pensando…

Eu só trocaria duas coisas:

1- mudaria a a declaração da lista de jTextField para:

List<JTextField> jtfList = ArrayList<JTextField>();

pois o ArrayList é mais rápido que o Vector por motivos sincronismos, e eu acredito que este codigo não presice sincronismo que o Vector oferece

2- trocaria a busca dos textfields de iterator para um simples foreach

Apenas por deixar o codigo mais limpo

for(JTextField jtf : jtfList){
   if(jtf.getName().equals(nome)) return jtf;
}
R

Com certeza Mustang89. Com java tem sempre que pensar no desempenho!

E nem pensei no foreach, só usei o atalho do IDE pra criar loop de Iterator hehehe
mas sem sombra de dúvidas suas sugestões deveriam ser utilizadas! :smiley:

R

finalmente o problema foi resolvido

obrigado a vcs dois

mais agora nao consigo mais trocar a cor do background

uso isso e nao ta alterando

this.setBackground(Color.White);

e nada… =/

R

Deve funcionar:

this.getContentPane().setBackground(Color.white);

R

vou testar aqui :wink:

R

opa, deu certo, obrigado novamente!

L

Estou com a mesma dúvida…só que eu utilizo o eclipse 3.2…
Quero obter o valor do getComponent…
Se não me engano, era através do Debug…
Estou tentando obter o valor do getComponent da tela para comunicar com o banco de dados…

Criado 2 de junho de 2010
Ultima resposta 27 de ago. de 2010
Respostas 25
Participantes 5