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…
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…
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.
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.