Listener em JTextField

Oi pessoal.
Estou desenvolvendo uma janela onde preciso que se o valor escrito em um JTextField for de 1 a 5, ele habilite uma CheckBox, caso contrário a checkbox fica desabilitada. Tentei usar um focus listener, que funcionou parcialmente, já que o status da checkbox só é atualizado quando o campo de texto ganha ou perde o foco. Eu preciso que assim que o usuário modificar o valor, ele atualize o status da checkbox, habilitando ou desabilitando-a. Tentei um InputMethodListener mas ele nunca disparou um evento. O que estou fazendo de errado!? :shock:

Abraço!

public class NewSeqWindow extends JFrame implements WindowListener, ItemListener, InputMethodListener {

	private JCheckBox chkEnableSchedule;	
	private JTextField seqNumber;
	private JPanel pnlSchedule;

[...]

seqNumber.addInputMethodListener(this);

[...]

	@Override
	public void inputMethodTextChanged(InputMethodEvent event) {
		
		System.out.println("DEBUG: listener");
	
		if (event.getSource() == seqNumber) {

			System.out.println("DEBUG: SEQNUMBER");
			int value = Integer.parseInt(seqNumber.getText());
			System.out.println(value);

			if ( (value>0) && (value<=5) ) {

				chkEnableSchedule.setEnabled(true);

			}			
			else {
				chkEnableSchedule.setEnabled(false);
			}
		}

	}
}

Usa JSpinner, ai tu coloca so pra Integer e coloca minimo e maximo, pronto de 1 a 5

Hmmm… pois é, mas o problema é que o campo (TextField) deve permitir qualquer valor (de 0 a 9999), mas somente para valores entre 1 e 5 que um outro componente (CheckBox) é habilitado.
Em outras palavras: O usuário está criando uma nova seqüência animada (para painéis eletrônicos) e deve dar um número para ela. Se o número da seqüência for entre 1 e 5 é permitido o agendamento dela, se for qualquer outro número (maior que 6) o agendamento não é permitido, e suas opções desabilitadas.
Por isso preciso do listener para verificar o valor, entendeu?
De qualquer maneira, valeu pela dica!

Ok… resolvido. Como não consegui um listener que funcionasse com a mudança de valor do campo, coloquei um focusGained, focusLost e CaretPosition. Ou seja, ele dispara um evento sempre que ganhar ou perder foco ou mudar a posição do cursor no TextField. Acaba funcionando do jeito que eu precisava!

Opa, tenta meuTextField.addPropertyChangeListener(“text”, this);

E implementa no seu frame ou panel um propertychangelistener

O ideal eh

class MinhaCaixaTexto extends JTextField implements PropertyChangeListener {
}

Isso da certo

Ou tente usar um KeyListener, para fazer a verificação tecla a tecla. Algo como:

seqNumber.addKeyListener(new KeyAdapter() {
    public void keyTyped(KeyEvent e) {
        String texto = seqNumber.getText();
        try {
            int valor = Integer.parseInt(texto);
            if (valor < 1 || valor > 5) {
                throw new IllegalArgumentException();
            }
            chkEnableSchedule.setEnabled(true);
        } catch (RuntimeException e) {
            chkEnableSchedule.setEnabled(false);
        }
    }
}):