Como posso obter o comprimento do conteúdo de um JTextField como os tipos de usuário?
-
03-07-2019 - |
Pergunta
JTextField tem um evento keyTyped mas parece que no momento em que dispara o conteúdo da célula ainda não mudaram.
Por causa disso .length () é sempre errado se ler aqui.
Deve haver uma maneira simples de obter o comprimento como ele aparece para o usuário após um acidente vascular cerebral chave?
Solução
Isto não é provavelmente a melhor maneira (e ele tem sido um tempo), mas, no passado, eu adicionei um DocumentListener ao JTextField e em qualquer um dos eventos (insert, update, remove) I:
evt.getDocument().getLength()
Que retorna o comprimento total do conteúdo do campo de texto.
Outras dicas
Isso pode estar relacionado a este "bug" (ou melhor, "recurso" )
Os ouvintes são notificados dos principais eventos antes de processá-los para permitir que os ouvintes para "roubar" os eventos por consumi-los. Isto dá compatibilidade com a noção awt mais velho de consumir eventos.
O "digitado" evento não texto média foi celebrado o componente . Este não é um bug, pretende-se comportamento.
Uma solução possível é para ouvir um associado Documento
// Listen for changes in the text
myTextField.getDocument().addDocumentListener(new DocumentListener() {
public void changedUpdate(DocumentEvent e) {
// text was changed
}
public void removeUpdate(DocumentEvent e) {
// text was deleted
}
public void insertUpdate(DocumentEvent e) {
// text was inserted
}
});
Note que este funciona, não importa como o texto é alterado; através de um corte prancheta / colar "setText ()" progamatic na TextField ou a digitação do usuário no campo na interface do usuário.
KeyEvent
s são eventos de baixo nível que não são apropriados aqui [isso soa familiar].
Como o sistema JTextField
saber que um personagem tenha sido digitado? Através de um evento digitado chave (IIRC, feito através do PL & F). Será que o evento se despachado para o ouvinte sistema antes de seu ouvinte? Ele pode ou não fazer.
Neste caso, você provavelmente vai querer ir para o Document
e adicionar um ouvinte de nível superior. Com balanço é uma boa idéia ir para o modelo inicial - interfaces de classe 'J' são incoerentes. Se você está interceptando dados de entrada, então você provavelmente vai querer um modelo personalizado (ou no caso de Document
um DocumentFilter
).
Use este código:
public void jTextField6KeyReleased(java.awt.event.KeyEvent evt)
{
System.out.println(jTextField6.getText().length());
}