JTextField ChangeListener?

4 respostas
E

Ola,

Estou pesquisando como fazer um Change Listener decente para um JTextField. Eu ja uso uma classe derivada de PlainDocument para tratar o insertString e o removeUpdate. Portanto, se o usuario insere ou remove um caracter, eu capturo o “Change” do campo. Mas tem outras situacoes onde eu preciso dar um “setText” no campo, e neste caso o insertString (nem o insertUpdate) sao disparados, e portanto eu nao consigo fazer uma captura decente do “Change”. Eu precisaria de um lugar que cercasse todas as possibilidades de mudanca do conteudo do campo.

4 Respostas

TedLoprao

Vc poderia colocar um listener no Document para controlar as alterações, o listener percebe inclusive alterações via setText …

Fallow

E

OK, eu fiz isso, baseando-me no link:
http://java.sun.com/docs/books/tutorial/uiswing/events/documentlistener.html
Ele funciona exatamente como antes, ou seja, eu transferi o codigo que estava dentro do meu Document para o DocumentListener (insert/remove) e continua funcionando apenas quando eu edito o campo, e nao quando eu faco o setText.

TedLoprao

Hmmm, estranho!!!
Dá uma olhada nesse exemplo q fiz agora!!!

public class ChangeText extends JFrame {
  public ChangeText() {
    super("Teste");
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setSize(300, 300);
    Container c = getContentPane();
    c.setLayout(new FlowLayout());
    final JTextField field = new JTextField();
    PlainDocument doc = (PlainDocument) field.getDocument();
    doc.addDocumentListener(new DocumentListener() {
      public void changedUpdate(DocumentEvent e) {
        System.out.println("Updated");
      }
      public void insertUpdate(DocumentEvent e) {
        System.out.println("Inserted");
      }
      public void removeUpdate(DocumentEvent e) {
        System.out.println("Deleted");
      }
    }); 
    field.setColumns(10);
    JButton action = new JButton("Executa");
    action.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent e) {
        field.setText("Novo Teste");
      }
    }); 
    c.add(field);
    c.add(action);
  }
  
  public static void main(String[] args) {
    new ChangeText().show();
  }
}

Ve se funfa aí!!!

Fallow

E

Corrigindo… como eu estava limpando o setText em um outro lugar depois do setText certo entao deu problema. Agora esta realmente funcionando 100% Document+DocumentListener.

Criado 26 de outubro de 2004
Ultima resposta 26 de out. de 2004
Respostas 4
Participantes 2