Método que recebe Evento e identifique o componente que lhe enviou o evento

13 respostas
fsfnit

Bom Pessoal, estou usando o netbeans para me ajudar a desenvolver umas APP´s bobas em Swing.
Notei que o netbeans gera varios métodos diferentes para cada componente.

Enfim, eu tenho um método ActionPerformed na classe classe, onde coloco tudo qto é evento para ser caputrado lá.
Só que gostaria de criar um método, onde eu receberia um Evento, e descobriria qum foi que ocasionou o o evento.
Pq tenho 10 jFormattedTextfield, então queria colocar um Listener em cada um, qdo alguem desse um click em um deles, eu iria pegar qual é o jformatted, e setar o caretposition para 0, e Mascarar o componente(//____) enquanto o cara digita,ou seja, ir adicionando / a cada digitos válidos.
Alguem sabe coo posso pegar um Evento e descobrir quem é o chamador desse evento?

13 Respostas

T

evento.getSource(); ???

fsfnit
Sim,mas como seria ?

Pois teria que comparar de um por um ?

tipo (evt.getSource() == jFormattedtextField1){}

tipo (evt.getSource() == jFormattedtextField2){}

tipo (evt.getSource() == jFormattedtextField…){}

tipo (evt.getSource() == jFormattedtextField10){}

???

Estou querendo fugir disto.
danieldestro

Para isso existem classes que são formatadores e você pode associar com os objetos dos campos. Não precisa ficar fazendo isso na mão.
Mais: http://java.sun.com/docs/books/tutorial/uiswing/components/formattedtextfield.html

fsfnit

danieldestro:
Para isso existem classes que são formatadores e você pode associar com os objetos dos campos. Não precisa ficar fazendo isso na mão.
Mais: http://java.sun.com/docs/books/tutorial/uiswing/components/formattedtextfield.html

Ja usei o Maskformater, mas independente, ´precisava desse metodo como eu falei, pois irá realizar outras tarefas.

sergiotaborda

fsfnit:
danieldestro:
Para isso existem classes que são formatadores e você pode associar com os objetos dos campos. Não precisa ficar fazendo isso na mão.
Mais: http://java.sun.com/docs/books/tutorial/uiswing/components/formattedtextfield.html

Ja usei o Maskformater, mas independente, ´precisava desse metodo como eu falei, pois irá realizar outras tarefas.

Swing é OO e MVC. Não se esqueça disso. Procure por javax.swing.text.Document. Os JTextField e JFormattedTExtField fazem uso dele. Ele é o modelo para inputs de texto e permite controlar o input em si. Por exemplo para evitar que o usuário digite letras em campos numéricos, simbolos estranhos , etc… forçar um tamanho máximo para o campo etc… Tudo isto pode ser feito criando um Document.

fsfnit

sergiotaborda:
fsfnit:
danieldestro:
Para isso existem classes que são formatadores e você pode associar com os objetos dos campos. Não precisa ficar fazendo isso na mão.
Mais: http://java.sun.com/docs/books/tutorial/uiswing/components/formattedtextfield.html

Ja usei o Maskformater, mas independente, ´precisava desse metodo como eu falei, pois irá realizar outras tarefas.

Swing é OO e MVC. Não se esqueça disso. Procure por javax.swing.text.Document. Os JTextField e JFormattedTExtField fazem uso dele. Ele é o modelo para inputs de texto e permite controlar o input em si. Por exemplo para evitar que o usuário digite letras em campos numéricos, simbolos estranhos , etc… forçar um tamanho máximo para o campo etc… Tudo isto pode ser feito criando um Document.


Blza, eu ja sabia que poderia trabalhar com metodos dos componentes.
Mas precisava saber como que eu faria este método que falei acima.
mas obrigado pela ajuda.

danieldestro

Ao que parece você está querendo fazer do modo mais difícil (trabalhoso/repetitivo).

fsfnit

Extamento o oposto Daniel.
Todas as ideias que vieram, eram p/ trabalhar com metodos de cada componente, coisa que eu ja estou fazendo, mas não estou gostando.
Quero exatamente o contrario: Um método único, onde eu pergunto que é o sender do evento, se for TextField, faz uma rotina, se for um formattedtextfield, faça outra rotina, se for um groupbox de radio, faça outra.
É o oposto de tudo que fui falado.

Imagino uma assinatura do tipo :

if ( Evento.sender_do_evento == jtextfield){

}

if (Evento.sender == jFormattedTextField){

…

}

Algo assim.
danieldestro

Você quer saber por uma instância de um campo em específico (objeto) ou pelo tipo do campo (classe)?

Se for pela classe:

if( e.getSource().getClass().equals(JTextField.class) )

Se for pelo objeto:

if( e.getSource().equals(algumJTextField) )

fsfnit

danieldestro:
Você quer saber por uma instância de um campo em específico (objeto) ou pelo tipo do campo (classe)?

Se for pela classe:

if( e.getSource().getClass().equals(JTextField.class) )

Se for pelo objeto:

if( e.getSource().equals(algumJTextField) )


Tentei aqui mas não funcionou não.
Vou testar outras formas de fazer isso qdo conseguir posto aqui.
Vlw pela ajuda meu camarada.

pimenta

Usando classes internas isso não ficaria mais fácil?

fsfnit

O q vc chama de classes internas ?

pimenta

Classes dentro da classe principal…

Por exemplo:

//Classe Principal
public class Principal{
	JButton btn1 = new JButton();
	JTextField txt1 = new JTextField();
	public static void main(String[] args){
		//...
		btn1.addActionListener(new BtnListener());
		txt1.addActionListener(new TxtListener());
		//...
	}

	//Classes internas
	public class BtnListener implements ActionListener{
		void actionPerformed(ActionEvent e){
			//Código...
		}
	}
	
	public class TxtListener implements ActionListener{
		void actionPerformed(ActionEvent e){
			//Código...
		}
	}
}

Se entendi bem o que vocÊ quer, provavelmente o uso de classes internas pra declarar os eventos pra cada “tipo” de componente resolveria seu problema.
Não sei se esse código aí funcionaria, mas é só uma idéia… só um “modelo”.

Abraços,

Criado 12 de maio de 2008
Ultima resposta 13 de mai. de 2008
Respostas 13
Participantes 5