JTextField em tempo real - Avaliando entrada em tempo real

2 respostas
jhonk1

Gostaria de saber como posso tratar uma entrada em tempo real pelo JTextField, eu estava pensando em usar o KeyPressed, mas estou procurando outro jeito.
O que eu quero é tipo assim:
O usuário ao digitar um valor no campo (JTextField), um comando(o que estou procurando) iria avaliar essa entrada em tempo real, e retornaria a mensagem que eu queria em tempo real.

Ex: o usuário esta digitando uma sequencia de números, ao lado do JTextField iria aparecer a mensagem que eu gostaria, ex: Digitando sequencia. E se ele apagasse essa sequencia exibiria uma mensagem “Sequencia apagada”;

Eu gostaria que esse comando avaliasse isso em tempo real, sem que o usuário precisasse pressionar nenhum JButton. Meu professor disse que existem comandos para isso e mandou a gente se virar XD Já procurei pra caramba, mas só achei outros tipos de comandos como o KeyPressed.

Desde já muito obrigado

2 Respostas

B
package guj;

import java.awt.BorderLayout;

public class TesteJTextFieldDinamico extends JFrame {

    private JPanel contentPane;
    private JTextField textField;
    private JLabel label;

    /**
     * Launch the application.
     */
    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    TesteJTextFieldDinamico frame = new TesteJTextFieldDinamico();
                    frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    /**
     * Create the frame.
     */
    public TesteJTextFieldDinamico() {
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setBounds(100, 100, 450, 300);
        contentPane = new JPanel();
        contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
        contentPane.setLayout(new BorderLayout(0, 0));
        setContentPane(contentPane);
        contentPane.add(getTextField(), BorderLayout.NORTH);
        contentPane.add(getLabel(), BorderLayout.SOUTH);
    }

    private JTextField getTextField() {
        if (textField == null) {
            textField = new JTextField();
            textField.setColumns(10);
            textField.getDocument().addDocumentListener(new DocumentListener() {
                @Override
                public void changedUpdate(DocumentEvent e) {
                    Document d = e.getDocument();
                    try {
                        String texto = d.getText(0, d.getLength());
                        label.setText(texto.toUpperCase()); // um exemplo do que fazer com o texto
                    } catch (BadLocationException ex) {
                    }
                }

                @Override
                public void insertUpdate(DocumentEvent e) {
                    Document d = e.getDocument();
                    try {
                        String texto = d.getText(0, d.getLength());
                        label.setText(texto.toUpperCase()); // um exemplo do que fazer com o texto
                    } catch (BadLocationException ex) {
                    }
                }

                @Override
                public void removeUpdate(DocumentEvent e) {
                    Document d = e.getDocument();
                    try {
                        String texto = d.getText(0, d.getLength());
                        label.setText(texto.toUpperCase()); // um exemplo do que fazer com o texto
                    } catch (BadLocationException ex) {
                    }
                }
            });
        }
        return textField;
    }

    private JLabel getLabel() {
        if (label == null) {
            label = new JLabel("-");
        }
        return label;
    }
}
onjacktallcuca

Que beleza, código prontinho …

Criado 25 de outubro de 2012
Ultima resposta 25 de out. de 2012
Respostas 2
Participantes 3