Em um JPasswordField, como não permitir que o usuário copie e cole?

5 respostas
D

Desenvolvi um sistema, agora que já está pronto estou melhorando-o. Gostaria de saber como não permitir que o usuário copie e cole no JPasswordField.

5 Respostas

slompo

Uma solução que percebo de imediato, seria substituir o que foi copiado do JPasswordField por uma string vazia, ou algo nesse sentido.

D

ótima idéia…

E

Uma forma de fazer isso é desabilitar as teclas Ctrl+C, Ctrl+V, Shift-Ins e Ctrl-Ins. Esse é um dos poucos casos em que é válido você criar um KeyListener :slight_smile:

EDIT - Pensei em fazer isso mas não funcionou :frowning:

E

Agora sim. Em um JPasswordField já está desabilitado o Ctrl+C ou Ctrl+Ins (Copy) e o Ctrl+X (Cut) mas não o Ctrl+V ou Shift+Ins (Paste). Eu, em particular, acho horrível desabiltar o Ctrl+V porque às vezes você precisa copiar uma senha muito complicada que alguém mandou via email, mas se você quer isso, o segredo é reimplementar o método “paste” de forma que ele não faça nada. Use a classe abaixo no lugar de um JPasswordField normal.

/**
 * 
 */
package guj;

import javax.swing.JPasswordField;
import javax.swing.text.Document;

/**
 * @author entanglement
 *
 */
public class JPasswordField2 extends JPasswordField {

    public JPasswordField2() {
        super();
        init();
    }
    public JPasswordField2(Document doc, String txt, int columns) {
        super(doc, txt, columns);
        init();
    }
    public JPasswordField2(int columns) {
        super(columns);
        init();
    }
    public JPasswordField2(String text, int columns) {
        super(text, columns);
        init();
    }
    public JPasswordField2(String text) {
        super(text);
        init();
    }
    
    private void init() {
        // Disables Copy (Ctrl+C) and Cut (Ctrl+X)
        putClientProperty("JPasswordField.cutCopyAllowed", Boolean.FALSE);
    }
    @Override
    public void paste() {
        // Disables pasting - Ctrl+V, or Shift+Ins
        ;
    }
}
D

É bem verdade isso de copiar uma senha complicada, retirar a função COLAR não seria inteligente. Eu havia substituido o string por vazio mas esta idéia enviada é bem interessante. Obrigada!!!

Criado 23 de outubro de 2011
Ultima resposta 30 de out. de 2011
Respostas 5
Participantes 3