JPasswordField e Masks[SOLUCIONADO]

4 respostas
Lukas0145

Olá,

Estou com um problema em que não consigo por uma mask num JPasswordField. Alguém sabe como posso fazer para aceitar apenas no máximo 4 caracteres e apenas números?

Sobre masks: Como eu faço uma mask sem que ela apague se não atingir o limite?

Exemplo:

MaskFormatter numeroMask = new MaskFormatter("####");

Eu quero que essa mask aceite apenas números com no máximo 4 digitos, embora eu não queira que se o usuário digitar 3 números a mask apague os 3 números, como se aquilo estivesse errado.

Grato.

4 Respostas

Danilo_Carvalho

Bom dia!

Pelo que me lembro de Swing o JPasswordFiled já tem uma mascará para os caracteres de entrada!

Então uma solução simples é criar um método validartor() testando a quantidade de caracteres, dessa forma você até testar outras coisas, como só números, só letras, ou a senha tem que ter pelo menos uma letra e também pode retornar uma mensagem para o usuário de o porque não foi aceita a senha informada.

Até mais.

Lukas0145

Danilo Carvalho:
Bom dia!

Pelo que me lembro de Swing o JPasswordFiled já tem uma mascará para os caracteres de entrada!

Então uma solução simples é criar um método validartor() testando a quantidade de caracteres, dessa forma você até testar outras coisas, como só números, só letras, ou a senha tem que ter pelo menos uma letra e também pode retornar uma mensagem para o usuário de o porque não foi aceita a senha informada.

Até mais.

Bom dia,

Olhe como eu resolvi:

numeroTextField = new JTextField();
			
			numeroTextField.addKeyListener(new KeyAdapter() {
				public void keyReleased(KeyEvent e) {
					JTextField textField = (JTextField) e.getSource();
					String texto = textField.getText();
					
					for (int i = 0; i < texto.length(); i++) {
						if (Character.isDigit(texto.charAt(i))) {
							textField.setText(texto);
								
						}else{
							textField.setText(texto.substring(0,i));
						}

					}
					//textField.setText(texto.toUpperCase());
				}

				public void keyTyped(KeyEvent e) {
				}

				public void keyPressed(KeyEvent e) {
				}
			});

Entretanto, há um bug: se vc pressionar a tecla B, por exemplo, isso será mais rápido que o for e portanto irá aceitar os vários B pressionados. Ou também quando você digita uma letra e logo em seguida da um tab, ele aceita a letra por ainda nao ter tido tempo de verificar no for.

Danilo_Carvalho

Então você esta fazendo a verificação a cada tecla pressionada, certo?

Eu faria o seguinte:

Realizaria o teste se fosse pressionada a tecla ENTER, ou clicado no botão login caso exista, pois assim ao submeter a senha ela será testada, não vejo a necessidade de testar a senha a cada tecla pressionada!

Qualquer coisa posta ai!

Até mais.

Lukas0145

Danilo Carvalho:
Então você esta fazendo a verificação a cada tecla pressionada, certo?

Eu faria o seguinte:

Realizaria o teste se fosse pressionada a tecla ENTER, ou clicado no botão login caso exista, pois assim ao submeter a senha ela será testada, não vejo a necessidade de testar a senha a cada tecla pressionada!

Qualquer coisa posta ai!

Até mais.

Vlw pela dica!

Problema solucionado, tópico pode já ser fechado!

Obrigado Danilo Carvalho.

Criado 17 de junho de 2013
Ultima resposta 17 de jun. de 2013
Respostas 4
Participantes 2