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.
Em um JPasswordField, como não permitir que o usuário copie e cole?
5 Respostas
Uma solução que percebo de imediato, seria substituir o que foi copiado do JPasswordField por uma string vazia, ou algo nesse sentido.
ótima idéia…
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 
EDIT - Pensei em fazer isso mas não funcionou 
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
;
}
}
É 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!!!