Nome componente

23 respostas
M

Como eu faço para pegar o nome do componente e jogar numa variável String, por exemplo :

private JTextField jTextField2 = null;
	private JTextField getJTextField2() {
		if (jTextField2 == null) {
			jTextField2 = new JTextField();
			jTextField2.setVisible(true);
			jTextField2.setBounds(10,40,100,30);
		}
		return jTextField2;
	}

Ae dentro de um jbutton, quando eu clicar nele, quero que imprima o seguinte :

“clicado em jTextField2”

Para isso vou dar o seguinte comando :

System.out.println("clicando em " variavel_string_que_pega_o_nome_do_componente );

Tem que ser uma variável String, pois vou ter vários jtextfield´s, como num cadastro de cliente …

23 Respostas

A

adiciona um actionListener no seu componente…

M

Voce pode passar um exemplo de como eu faco isso ???

M
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class NomeComponent implements ActionListener {

	public void actionPerformed(ActionEvent arg0) {
		
		// aqui dentro voce coloca o procedimento
		
		// depois insira esta linha em seu metodo
		// seu_component.addActionListener(this);
		 
		
	}

}

Valeu…

M

ok, mas e que comando eu uso para pegar o nome do componente ???

M
// pega o nome do component que chama o metodo
String nome = arg0.getActionCommand();
M

ai vai o meu fonte :

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

public class Increment extends JFrame implements ActionListener {
	
	private JButton botao = null;
	private JTextField caixa_texto = null;
	
	private int conta = 0 , total = 0 ;
	private final int INCREMENT = 5 ;
	
	public Increment() {
		super("teste");
		Container container = getContentPane() ;
		botao = new JButton ( "digite" ) ;
		container.add ( botao , BorderLayout.SOUTH ) ;
		botao.addActionListener ( this ) ;

		caixa_texto = new JTextField () ;
		container.add ( caixa_texto , BorderLayout.NORTH ) ;

		setSize(200,200);
		setVisible(true);
		
	}
	
	public void actionPerformed ( ActionEvent actionEvent ) {
		String campo = actionEvent.getActionCommand();
		JOptionPane.showMessageDialog(null, campo ,"campo", JOptionPane.ERROR_MESSAGE); 
	}

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

mas quando eu clico no botao, ele mostra “digite” , e eu preciso que ele mostre “botao”

M

desculpe pessoal, mas é pra ele mostrar “caixa_texto” e não “botao” …

tem que pegar o nome do componente do textfield que o usuarui clicou por ultimo …
Por exemplo :

Tenho 2 textfield, caixa_texto_1 e caixa_texto_2

O usuario digitou algo no caixa_texto_1, quando clicar no jbutton tem que mostrar “caixa_texto_1”, se for no caixa_texto_2, mostrar “caixa_texto_2”

Então tenho que jogar isso numa variável string, pois não sei em qual textfield o usuario vai digitar alguma coisa …

F

vc pode pegar nome do componente assim:

-> no action performed do botao

Component c = (Component)e.getSource();
String nome = c.getName();

obs: mas pra isso vc tem q setar o nome do componente explicitamente com objeto.setName(“textField1”); no codigo… nao sei a maneira de pegar o nome da variavel de referencia…

S

É. Não tem como fazer isso. Ou melhor: não tem um jeito viável de pegar o nome de um variável. Só parseando o arquivo .class (caso as informações de debug foram incluídos) ou parseando o arquivo código-fonte.

R

setApelationMode(true);

import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.FocusEvent;
import java.awt.event.FocusListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JTextField;


@SuppressWarnings("serial")
public class AjudaGUJ extends JFrame {

	private JTextField textFieldSelected = null;

	private FocusListener textFieldFocusListener = new FocusListener() {

		public void focusGained(FocusEvent e) {
			//marca o jtextfield selecionado
			textFieldSelected = (JTextField) e.getSource();
			/* uso pra debug
			System.out.println( e.getSource().toString() );
			System.out.println( e.getComponent().toString() ); */
		}

		public void focusLost(FocusEvent e) {
			// não faz nada aqui ...
		}
	
	};
	
	public AjudaGUJ() {
		super("Ajuda GUJ");
		
		Dimension d = new Dimension(100, 100);
		this.setPreferredSize(d);
		this.setSize(d);
		
		JTextField t1 = new JTextField("teste1");
		t1.setName("t1");
		JTextField t2 = new JTextField("teste2");
		t2.setName("t2");
		JButton btn = new JButton("teste");
		
		this.getContentPane().setLayout(new FlowLayout());
		getContentPane().add(t1);
		getContentPane().add(t2);
		getContentPane().add(btn);
		
		//"marca" o t1 como default selecionado
		textFieldSelected = t1;
		t1.addFocusListener(textFieldFocusListener);
		t2.addFocusListener(textFieldFocusListener);
		
		btn.addActionListener(new ActionListener(){

			public void actionPerformed(ActionEvent arg0) {
				JOptionPane.showMessageDialog(null, "JTextFieldSelecionado: " + textFieldSelected.getName());
			}
			
		});
		
		setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
	}

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		JFrame f = new AjudaGUJ();
		f.setVisible(true);
	}

}

Caso você tenha somente dois textfields mesmo, acredito que somente um if será necessário, caso contrário você pode usar o esquema de focus e pegar o campo selecionado.

Caso tiverem idéia melhor, ajudem e postem aí !

flw,
Roger Leite

K

Inicializacao do JButton

JButton btnSave = new JButton();
btnSave.setName("btnSave");

ActionPerformed do botao

public void actionPerformed(ActionEvent evt){
 Component comp = (Component) evt.getSource();
 String compName = comp.getName();
 JOptionPane( null, compName , compName );
}

A quanto tempo nao vejo codigos em Swing…
as vezes da ate saudade… :cry:

Boa sorte! :thumbup:

M

da pra fazer a mesma coisa, so que ao inves de colocar no actionEvent do jbutton colocar no mouseListener, quando o usuario clicar sobre o textfield … alguem pode ajudar ???

B

Tá. ActionEvent é a ação principal do objeto: botão foi feito para ser clicado… Já o MouseListener escuta eventos do mouse sobre o objeto, podendo ser um click, pressionar, soltar, etc…

Mas vc pode ter varios objetos (nao necessariamente um botão) apontando para uma Acao… Por exemplo, ter um botao abrir arquivo e um item de menu que resulta da mesma ação… Os dois apontam para um mesmo ActionEvent.

Bem, com relação ao problema acima, pelo que etendi, vc quer saber o nome da variável que refere ao objeto JButton? Se for isso, não sei se é possivel e nem se é interessante, uma vez que vc pode ter váaaaaaaaarias variaveis apontando para o mesmo objeto… Logo vc poderia ter um array de nomes de variaveis.

O correto é utilizar o setName() e getName() para dar o nome ao objeto que vc acabou de criar. Variáveis são somente referencias.

Já imaginou:

JButton a = new JButton("MyButton");
JButton b = a;
JButton c = b;

??? a.getClass().getVariavelPointers(); ???

Abraços…

M

ok isso ja consegui fazer …

mas surgiu uma duvida …

coloquei o campo selecionado numa variavel string …

dae agora eu preciso dar um select() e um copy() …

mas com o valor dessa variavel, por exemplo, se na variavel tiver “text_field_1” ele vai selecionar o que foi digitado no textfield1, e copiar …

tentei colocar variavel.select() e deu erro …

B

Pro favor!!! Olha na API!!! http://java.sun.com/j2se/1.5.0/docs/api/

getText() - obtem o texto de dentro do textfield
selectAll() - seleciona o conteudo do campo

M

acho que esse link ta errado, apareceu “page not found”

I

Marcos, ele acabou digitando com uma !, o correto é:
http://java.sun.com/j2se/1.5.0/docs/api/

M

tentei colocar :

minha_varialve_que_contem_o_textfield.selectAll() ;

mas deu o seguinte erro :

--------------------Configuration: j2sdk1.4.2_12 <Default>--------------------
C:\Arquivos de programas\Xinox Software\JCreator LE\MyProjects\MostraPopup.java:53: cannot resolve symbol
symbol  : method selectAll ()
location: class java.lang.String
         campo.selectAll(); 
              ^
1 error

Process completed.

Como corrigir issso ??

B

tem certeza que “campo” é um JTextField?

JTextField t = new JTextField();
t.selectAll();
String conteudo = t.getText();
M

campo eh uma variavel string …

o conteudo dessa variavel que eh “textfield”

B

e…? o que vai fazer com essa string? coloca-lá no textfield?

String conteudo = "teste";
t.setText(conteudo);
M

ai vai meu fonte …
a classe mousetracker chama a classe mostrapopup …

mousetracker.java

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

public class MouseTracker extends JFrame implements MouseListener, MouseMotionListener {

	private static final long serialVersionUID = 1L;
	
	private JLabel statusBar;
	
	//private JTextField caixa_texto_1 , caixa_texto_2;
	
	private JTextField textFieldSelected = null;
	
	int esse = 0;
	String campo = null;


 	//private FocusListener textFieldFocusListener = new FocusListener() {
		//public void focusGained(FocusEvent e) {
 		//	textFieldSelected = (JTextField) e.getSource();
 		//}
 		//public void focusLost(FocusEvent e) {
 		//}
	 //	};
 	
		
	public MouseTracker () {
		super("Eventos do Mouse");
		
		statusBar = new JLabel();
		statusBar.setText("teste");
		getContentPane().add ( statusBar, BorderLayout.SOUTH );
		
		JTextField caixa_texto_1 = new JTextField();
		caixa_texto_1.setName("caixa_texto_1");
		getContentPane().add ( caixa_texto_1, BorderLayout.NORTH );
		caixa_texto_1.addMouseListener(this);
		
		JTextField caixa_texto_2 = new JTextField();
		caixa_texto_2.setName("caixa_texto_2");
		getContentPane().add ( caixa_texto_2, BorderLayout.CENTER );
		caixa_texto_2.addMouseListener(this);
		
		//textFieldSelected = caixa_texto_1;
 		//caixa_texto_1.addMouseListener(textFieldFocusListener);
 		//caixa_texto_2.addMouseListener(textFieldFocusListener);
 		
		addMouseMotionListener(this);
		
		setSize(200,200);
		setVisible(true);
	}
	
	
	public void mouseClicked(MouseEvent event) {
		//JOptionPane.showMessageDialog(null, "campo" );
	}

	public void mousePressed(MouseEvent event) {
		
		textFieldSelected = (JTextField) event.getSource();
		
		int esse = 0; 
		esse = event.getButton();
		campo = textFieldSelected.getName() ;
		//JOptionPane.showMessageDialog(null, campo );
		
		if ( esse == 3 ) new MostraPopup( campo , event.getX(), event.getY() );
		else esse = 0; 
	}

	public void mouseReleased(MouseEvent event) {
	//	caixa_texto.setText("Mouse liberado em [" + event.getX() + " , " + event.getY() + "]" );
	}
	
	public void mouseExited(MouseEvent event) {
		//caixa_texto.setText("Mouse saiu da tela");
	}

	public void mouseDragged(MouseEvent event) {
		//caixa_texto.setText("Arrastado em [" + event.getX() + " , " + event.getY() + "]" );
	}

	public void mouseMoved(MouseEvent event) {
		//caixa_texto.setText("Mouse movimentado em [" + event.getX() + " , " + event.getY() + "]" );
	}

	public void mouseEntered(MouseEvent e) {
	}

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

}

mostrapopup.java

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

public class MostraPopup extends MouseAdapter implements ActionListener{ 

   JPopupMenu mpopup; 
   JMenuItem miSelecionar, miRecortar, miCopiar, miColar; 
   String campo = null;
   

   public MostraPopup ( String tests, int aki2 , int aki3 ) { 
   
   	  //JOptionPane.showMessageDialog(null, tests ,"esses", JOptionPane.ERROR_MESSAGE); 
   	  campo = tests;
   	  //JOptionPane.showMessageDialog(null, campo ,"esses", JOptionPane.ERROR_MESSAGE); 
   
      mpopup = new JPopupMenu(); 

      miSelecionar = new JMenuItem ("Selecionar",new ImageIcon("selecionar.gif")); 
      miSelecionar.setMnemonic(KeyEvent.VK_S); 
      miSelecionar.addActionListener(this); 

      miRecortar = new JMenuItem ("Recortar",new ImageIcon("recortar.gif")); 
      miRecortar.setMnemonic(KeyEvent.VK_T); 
      miRecortar.addActionListener(this); 

      miCopiar = new JMenuItem ("Copiar",new ImageIcon("copiar.gif")); 
      miCopiar.setMnemonic(KeyEvent.VK_C); 
      miCopiar.addActionListener(this); 
       
      miColar = new JMenuItem ("Colar",new ImageIcon("colar.gif")); 
      miColar.setMnemonic(KeyEvent.VK_P); 
      miColar.addActionListener(this); 

      mpopup.add(miSelecionar); 
      mpopup.add(miRecortar); 
      mpopup.add(miCopiar); 
      mpopup.add(miColar);
      
      mpopup.setLocation(aki2,aki3);
      mpopup.setVisible(true);
      
   } 
    
   public void actionPerformed(ActionEvent e){ 
   
   		//JOptionPane.showMessageDialog(null, campo ,"esses", JOptionPane.ERROR_MESSAGE); 
   
      if (e.getSource()==miSelecionar) { 
         JOptionPane.showMessageDialog(null, "seleciona" ,"Operador", JOptionPane.ERROR_MESSAGE); 
         //.selectAll(); 
         mpopup.setVisible(false);
      } 

      if (e.getSource()==miRecortar) { 
         JOptionPane.showMessageDialog(null, "recorta" ,"Operador",JOptionPane.ERROR_MESSAGE); 
         //.cut(); 
         mpopup.setVisible(false);
      } 
       
      if (e.getSource()==miCopiar) { 
         JOptionPane.showMessageDialog(null, "copia" ,"Operador",JOptionPane.ERROR_MESSAGE); 
         //.copy(); 
         mpopup.setVisible(false);
      } 

      if (e.getSource()==miColar) { 
         JOptionPane.showMessageDialog(null, "cola" ,"Operador",JOptionPane.ERROR_MESSAGE); 
         //.paste(); 
         mpopup.setVisible(false);
      } 
   } 
}

por isso que eu coloquei o nome do campo numa variavel string, nao sei quantos textfield vou ter num formulario, mas num cadastro de clientes sao varios, entao criei uma classe exclusiva do popup …

M

nada ainda …

Criado 23 de janeiro de 2007
Ultima resposta 19 de mar. de 2007
Respostas 23
Participantes 9