Java JTextField vinculativo -> problema java.lang.Integer
Pergunta
Eu tenho um campo de texto que está ligada com Integer variável, de modo que quando o usuário entra número neste campo, o mecanismo de ligação automaticamente converte texto em Integer e define esse valor em var. O problema é que, uma vez que usuário digita o texto no campo de texto, que o mecanismo de ligação é converter apenas valores, e se os tipos de usuários algumas cartas para ele, a ligação não ativar porque não há nenhum valor jurídico dentro do campo de texto. O que seria necessário em tal situação, a ligação tem de mudar gatilho com valor nulo, então eu tenho nulo no meu Integer var.
Assim, se o usuário teria deixado este campo vazio ou algo que não é número, a ligação terá de gatilho propagação valor nulo; não ignorar evento ... Como eu poderia fazer isso sem propgramming eventos no campo de texto?
é o Java de ligação capaz de mudar seu comportamento padrão?
Solução
Além de alterar o comportamento do mecanismo de ligação, você pode colocar um formatador para o TextField que só aceita números. Você precisa estender javax.swing.text.DefaultFormatter para isso. E você, então, usar um JFormattedTextField em vez de um JTextField normal.
O resultado seria que você só tem uma entrada válida no seu campo de texto e você não tem que fazer qualquer coisa fora do valores incorretos.
Outras dicas
O que você precisa é JFormattedTextField e NumberFormat .
Suporte balanço para entrada de texto restrita é terrível. JFormattedTextField
lhe dará uma experiência de usuário totalmente miserável. Tal como acontece com a maioria dos trabalhos Balanço interessante, ignorar o JComponent
e ir para o modelo. Neste caso Document
, em particular DocumentFilter
.
Quando isso acontece eu tenho uma simples aplicação Swing que os campos usa texto limitados a inteiros que eu preparado anteriormente. Descrição. Fonte (em particular createNumberDocument
ver).