Button x textField

15 respostas
J

Oi pra todos(as),

nao sou totalmente novo na linguagem, mas to com problemas, preciso pegar o rotulo de um botao e imprimir num textField,
exemplo: um usuario clica num botao cujo rotulo é “01”, entao o evento é aparecer o numero “01” no textfield, parece simples mas nao consigo de jeito nenhum , se alguem puder me enviar um exemplo simples deste tipo de evento agradeço, ou se puder corrigir o erro no meu codigo,
agradeço,
No aguardo.

//frame1.java
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class frame1 extends Frame implements ActionListener{
	//construtor

	private TextField t1, t2;
	private Button b1;
	int t;

	public frame1(){
	   setTitle("JOGO");//barra de titulos
                setLocation(50,20);               //posicao
                setSize(500,530);                 //tamanho; largura,altura
		setBackground(new Color(128, 255,255));//cores
		setLayout(null);

	   addWindowListener(new sombra());// evento q fecha a janela

		//inicio das caixas de texto
		//primeira caixa de texto
		TextField t1 = new TextField();
		t1.setLocation(30,40);
		t1.setSize(330,60);
		t1.addActionListener(this);

		add(t1);

		//segunda caixa de texto
		TextField t2 = new TextField("",20);
		t2.setLocation(30,110);
		t2.setSize(330,60);
		add(t2);

		//inicio as fileiras de botoes
		int k = 180;
		int m = 30;//m,n,o,p,q
		for (int x=0; x<25; x++){
			
			Button b1 = new Button(""+(x+1));
			 b1.setSize(50,50);
			b1.setLocation(m,k);
			b1.addActionListener(this);

			//cordenada dos botoes
			add(b1);
			m = (m + 70);

			if (m == 380){
				k = (k + 70);
				m = 30;
				    }//fecha o if
					}//fecha o for

			
				       }//fecha o construtor

	//eventos,, AQUI MORA O PROBLEMA!!
	public void actionPerformed(ActionEvent e){
		try{

		    //deveria imprimir o numero do botao que o 
		   //usuario apertou!!!!
		   //só esta executando a excessao

			t1.setText(e.getActionCommand());
		   }
		catch (Exception f){

		JOptionPane.showMessageDialog(null,
		"Esta ocorrendo uma falha!!");
			}
			   		
			}//fecha actionPerformed

					
			
									

	//main
	public static void main(String args[]) {
	frame1 h = new frame1(); //instalacao
	h.show(); //exibicao
			         	        }//fecha o main
				 }//fecha a classe

15 Respostas

R

Tem que pegar o nome do botão que foi clicado (não sei como), aí é só usar:

t1.setText( nomebotao.getText() );
M

Puxa cara…não sei se nomedobotao.getText() funciona =/…então tipo…é só botar a variavel com o nome do botão:

private JButton botao01;
.
.
.
botao01 = new JButton("Botão 01");
.
.
.
public void actionPerformed(ActionEvent e)
{
 if (e.getSource() == botao01) teuJTextField.setText("Botão 01");
}

=)

R

Só, mas aí o cara sabe o nome do botão. Eu não sei como fazer para não precisar se preocupar com o nome.

Mas do jeito que falei funciona, pq eu testei. Suponha que tem um JButton chamado btnValor com label “Clique” e um JTextField chamado txtValor. O código abaixo funciona e deixa txtValor com o texto Clique:

txtValor.setText( btnValor.getText() )

Eu não descobri como faz para pegar o nome. Tentei event.getSource() mas não dá certo. Se alguém souber aí…

J

aíí, eu de novo, eu tinha testado com

t1.setText(b1.getText());

mas nem compila,isso foi qdo eu comecei, aí resolvi botar o bloco try/catch, pra pelo menos compilar,
agradecido, ainda no aguardo,
feliz 2005,

R

Olha esse código. Aqui funcionou do jeito que te falei.

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class frame1 extends JFrame
{

	private JButton botao, botao2;
	private JTextField field;
	
	public frame1()
	{
	
		super( "Testando" );
		
		Container container = getContentPane();
		container.setLayout( new FlowLayout() );
			
		botao = new JButton ( "Teste" );
		container.add( botao );
		botao.addActionListener(
		
			// classe interna anônima que tratará os eventos do botão
			new ActionListener()
			{
			
				public void actionPerformed( ActionEvent event )
				{
				
					field.setText( botao.getText() );
				
				}
			
			}
		
		); // fim da chamada para addActionListener do botao
		
		botao2 = new JButton( "Teste 2" );
		container.add( botao2 );
		botao2.addActionListener(
		
			new ActionListener()
			{
			
				public void actionPerformed( ActionEvent event )
				{

					field.setText( botao2.getText() );
				
				}
			
			}
		
		); // fim da chamada para addActionListener do botao2
		
		field = new JTextField( 10 );
		container.add( field );
		
		setSize( 300, 80 );
		setVisible( true );
			
	} // fim do construtor

	public static void main( String args[] )
	{
	
		frame1 application = new frame1();
		application.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
	
	}
	
} // fim da classe frame1
R

Pôxa cara, eu tava viajando aí. Agora me liguei:

field.setText( event.getActionCommand() );

Só isso! Olha o código completo:

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class frame1 extends JFrame
{

	private JButton botao, botao2;
	private JTextField field;
	
	public frame1()
	{
	
		super( "Testando" );
		
		Container container = getContentPane();
		container.setLayout( new FlowLayout() );
			
		botao = new JButton ( "Teste" );
		container.add( botao );
		
		HandlerButton handler = new HandlerButton();
		botao.addActionListener( handler );
		
		botao2 = new JButton( "OK" );
		container.add( botao2 );
		botao2.addActionListener( handler );
				
		field = new JTextField( 10 );
		container.add( field );
		
		setSize( 300, 80 );
		setVisible( true );
			
	} // fim do construtor

	public static void main( String args[] )
	{
	
		frame1 application = new frame1();
		application.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
	
	}

	// essa classe interna que trata os eventos dos botões
	private class HandlerButton implements ActionListener
	{

		public void actionPerformed( ActionEvent event )
		{
			String nome = event.getActionCommand();
			field.setText( nome );
		}
	
	} // fim da classe interna HandlerButton
	
} // fim da classe frame1
K

olha só

<a href="//frame1.java" class="onebox" target="_blank">//frame1.java</a>

import java.awt.<em>;

import java.awt.event.</em>;

import javax.swing.*;

public class Frame1 extends Frame implements ActionListener{
//construtor

private TextField t1, t2;

private Button b1;

int t;
public Frame1(){

setTitle(JOGO);//barra de titulos

setLocation(50,20);               //posicao

setSize(500,530);                 //tamanho; largura,altura

setBackground(new Color(128, 255,255));//cores

setLayout(null);
//addWindowListener(new sombra());// evento q fecha a janela 

  //inicio das caixas de texto 
  //primeira caixa de texto 
  TextField t1 = new TextField(); 
  t1.setLocation(30,40); 
  t1.setSize(330,60); 
  t1.addActionListener(this); 

  add(t1); 

  //segunda caixa de texto 
  TextField t2 = new TextField("",20); 
  t2.setLocation(30,110); 
  t2.setSize(330,60); 
  add(t2); 

  //inicio as fileiras de botoes 
  int k = 180; 
  int m = 30;//m,n,o,p,q 
  for (int x=0; x&lt;25; x++){ 
      
     Button b1 = new Button(""+(x+1)); 
      b1.setSize(50,50); 
     b1.setLocation(m,k); 
     b1.addActionListener(this); 

     //cordenada dos botoes 
     add(b1); 
     m = (m + 70); 

     if (m == 380){ 
        k = (k + 70); 
        m = 30; 
            }//fecha o if 
           }//fecha o for 

      
               }//fecha o construtor

public void actionPerformed(ActionEvent e){

System.exit(0);

     t1.setText(e.getActionCommand()); 
    

  JOptionPane.showMessageDialog(null, 
  "Esta ocorrendo uma falha!!");
   
     } //fecha actionPerformed
//main

public static void main(String args[])

{

Frame1 h = new Frame1(); //instalacao

h.show(); //exibicao

}//fecha o main

}//fecha a classe

compilei tirei try catch tinha chaves demais e o nome da classe Frame1 escrita frame1
o problema está agora no fechar do lado esquerdo não fecha mesmo da uma olhada ok ? desculpe por desajeitar seu projeto vc se isto mesmo ,sou uma humilde iniciante posso até errar

um abraço
karlota

K

se guia pelo de R2_d2 que ta mais certo sem erros ok ?? meu ta dando erro que só

J

td bem, só q da um look, qdo vc usa:

public void actionPerformed( ActionEvent event )

{

String nome = event.getActionCommand();

field.setText( nome );

}

para o meu caso especifico seria

public voi actionPerformed(ActionEvent event)
{

Strint nome = event.getActionCommand();

t1.setText(nome);

}

ok??? acho q nao errei nada né?? mesmo assim só executa a exessao.
valeu,nao sei pq nao funga comigo.

K

so coisa besta nome de classe errada só isso

J

olha só r2

//frame2.java
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class frame2 extends Frame implements ActionListener{
	//construtor

	private TextField t1, t2;
	private Button b1;
	int t;

	public frame2(){
	   setTitle("JOGO");//barra de titulos
                setLocation(50,20);               //posicao
                setSize(500,530);                 //tamanho; largura,altura
		setBackground(new Color(128, 255,255));//cores
		setLayout(null);

	   addWindowListener(new sombra());// evento q fecha a janela

		//inicio das caixas de texto
		//primeira caixa de texto
		TextField t1 = new TextField();
		t1.setLocation(30,40);
		t1.setSize(330,60);
		t1.addActionListener(this);

		add(t1);

		//segunda caixa de texto
		TextField t2 = new TextField("",20);
		t2.setLocation(30,110);
		t2.setSize(330,60);
		add(t2);

		//inicio as fileiras de botoes
		int k = 180;
		int m = 30;//m,n,o,p,q
		for (int x=0; x<25; x++){
			
			Button b1 = new Button(""+(x+1));
			 b1.setSize(50,50);
			b1.setLocation(m,k);
			b1.addActionListener(this);

			//cordenada dos botoes
			add(b1);
			m = (m + 70);

			if (m == 380){
				k = (k + 70);
				m = 30;
				    }//fecha o if
					}//fecha o for

			
				       }//fecha o construtor

	//eventos,, AQUI MORA O PROBLEMA!!
	public void actionPerformed(ActionEvent event){
		try{

		    //deveria imprimir o numero do botao que o 
		   //usuario apertou!!!!
		   //AQUI ONDE VC FALOU PRA EU MUDAR,,OK??

			String nome = event.getActionCommand();
			t1.setText(nome);
		   }
		catch (Exception f){

		JOptionPane.showMessageDialog(null,
		"Esta ocorrendo uma falha!!");
			}
			   		
			}//fecha actionPerformed

					
			
									

	//main
	public static void main(String args[]) {
	frame2 h = new frame2(); //instalacao
	h.show(); //exibicao
			         	        }//fecha o main
				 }//fecha a classe

fiz a mudança bem onde vc falou, da uma olhada, compila e roda,pra vc ver, só executa a exessao,

R

Cara, não sei qual o problema do teu código. Acho que funciona com JTextField (Swing) e não com o TextField (awt). Eu fiz outro código do zero, agora usando array para criar os botões, e funcionou. Veja aí se vc consegue achar a diferença ou então temos que esperar alguém que saiba encontrar o erro.

Valeu.

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class Jogo extends JFrame
{

	private JTextField t1, t2;
	private int arrayBotoes[ ];
	private JButton btn[];
	
	public Jogo()
	{
	
		super( "Jogo" );
		
		Container container = getContentPane();
		container.setLayout( new FlowLayout() );
		
		arrayBotoes = new int[ 25 ];
		for ( int cont = 0; cont < 25; cont++ )
			arrayBotoes[ cont ] = cont + 1;
				
		t1 = new JTextField( 23 );
		t2 = new JTextField( 23 );
		container.add( t1 );
		container.add( t2 );
		
		JogoHandler handler = new JogoHandler();
		btn = new JButton[ arrayBotoes.length ];
		
		for ( int cont = 0; cont < arrayBotoes.length; cont++ )
		{
			if ( cont < 9 )
				btn[ cont ] = new JButton( "0" + arrayBotoes[ cont ] );
			else
				btn[ cont ] = new JButton( "" + arrayBotoes[ cont ] );
			btn[ cont ].addActionListener( handler );
			container.add( btn[ cont ] );
		}
				
		setSize( 280, 260 );
		setResizable( false );
		setVisible( true );
	
	} // fim do construtor
	
	public static void main( String args[] )
	{
	
		Jogo application = new Jogo();
		application.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
	
	} // fim do método main

	private class JogoHandler implements ActionListener
	{
	
		public void actionPerformed( ActionEvent event )
		{
		
			t1.setText( event.getActionCommand() );
		
		}
	
	}
	
} // fim da classe Jogo
P

Po cara…eu acho que esse código do r2_d2 é exatamente o que você quer … não??? Eu testei aqui e tá funcionando certinho…

J

Belê,R2_d2, vou seguindo apartir desse seu codigo,
valeu.

E

Amigos,eu estou com um problema nos meus programas feitos em Java.Descobri que a versão que tenho é mais nova que a versão ulitizada em alguns livros que já li…resultado,qdo tento compilar esse programas,até funcionam,mas o javac me pede -Xlint…até já li a documentação da versão e fiquei ainda mais perdido…hehe…lá não tem nenhum exemplo claro que me ajude a resolver…como eu resolvo esse problema?

Agradeço a todos…

Criado 1 de janeiro de 2005
Ultima resposta 31 de jan. de 2005
Respostas 15
Participantes 6