Enviar evento de teclado para JTextArea

Estou tentando fazer um JTextArea em q apenas pode ser digitado um digito por vez…o problema é que quando eu passo a String do evento de teclado para exibir no JTextArea, este mostra o mesmo valor duas vezes , por exemplo:

dd
22
AA

outro tipo de implementação, com o mesmo resultado:

eu tentei adicionar para uma string e depois passar para o JTextArea…mas tb naum deu certo…
se alguem puder ajudar eu agradeço…

vlw

Se você registrou no evento keyTyped então não deveria acontecer do jeito que você está falando.

Para transformar em String, você não precisa criar um novo Character toda vez. Pode usar o toString estático dele:

area.setText ( Character.toString( event.getKeyChar() )  );

Não sei se isso vai fazer diferença, se não fizer, então vamos precisar de mais código para te ajudar.

Valeu pela ajuda visola, mas infelizmente nao surtiu efeito. O problema continua…este eh o codigo completo:


import javax.swing.*;

import java.awt.event.*;

public class Test2 extends JFrame 
{
	private JTextArea area;
	private StringBuilder str;
	
	Test2 ()
	{
		this.setSize ( 300, 300 );
		
		area = new JTextArea ( );
		Handler h = new Handler ();
		area.addKeyListener ( h );
		
		str = new StringBuilder ();
		
		this.add ( area );
		
		this.setDefaultCloseOperation ( JFrame.EXIT_ON_CLOSE );
		this.setVisible ( true );
	}
	
	private class Handler implements KeyListener 
	{
		public void	keyPressed( KeyEvent event ) 
		{
			area.setText ( Character.toString( event.getKeyChar() )  );
		}
		public void	keyReleased(KeyEvent e) {}
		public void	keyTyped(KeyEvent e) {}
	}
	
	public static void main ( String args [] )
	{
		new Test2 ();
	}
}

o estranho eh q se eu passo para uma String e mando mostrar no prompt aparece de forma correta…mas passando esta mesma String pro JTextArea o erro continua…

oq pode ser???

Achei o seu problema.
Esquecemos de um detalhe.
Quando você pressiona uma tecla no JTextArea, ele já tem o listener dele que vai adicionar o caracter referente a tecla que você apertou.
O seu listener está duplicando o trabalho.
Para evitar isso, use o método consume do evento para que nenhum outro listener seja notificado do mesmo evento.

area.setText(Character.toString( e.getKeyChar() ));
e.consume();

visola, tentei o e.consume(), porem nao deu certo, entretanto, vc me atentou a um fato importanto q tinha passado despercebido: q o proprio JTextArea jah tem o seu proprio KeyListener…
então q eu precisava atualizar mas sem passar nenhum texto…eu fiz simplesmente assim:

e deu certo!!!

mas isso sobre parar o evento com o e.consume(), me interessou, vou ver se consigo…
Obrigado visola
flw

Não use eventos para controlar um JTextArea ou um JTextField.
Se quer acabar com a sua alegria, use o copy&paste do mouse e vc vai ver que seu código quebra. Aliás, com o CTRL+C e CTRL+V comum ele também deve quebrar.

No lugar, use a classe Document. Esse artigo do Java deve te ajudar Controlando um JTextField. Ele vale para o JTextArea também.

vlw viniGodoy…
pow bem bacana o controle da quantidade maxima de caracters…

obrigado