Caras!
fiz uma implementação caseira e de teste e consegui bloquear oq eu queria, porém quando eu do um CTRL+C e V no campo ele cola os caracteres q bloquiei, aheahuaeuhaeuheauh
agora queria saber se tem como fazer algo pra ele nao fazer isso…
segue o código
public class LockInvalidChars extends PlainDocument{
@Override
public void insertString(int offset, String str, AttributeSet attr)
throws BadLocationException{
if (str == null) return;
if (str.equals(".") || str.equals("'")) return;
else
super.insertString(offset, str, attr);
}
}
Edit 1
Tirei o else e parou o problema, vou fazer outros testes aqui… quem puder ajudar… eh bem vindo…!
Edit 2
Troquei o equals por contains ai funcionou normal. Segue abaixo a minha implementação, simples mas funciona…
OBS: não reparem no JAVADoc… ahuaehueahueauh
package arth.utils.forms;
import javax.swing.text.AttributeSet;
import javax.swing.text.PlainDocument;
import javax.swing.text.BadLocationException;
/**
* Esta classe realiza o bloqueio de caracteres invalidos no campo JTextField
* implementando os metodos da classe PlainDocument()
*
* Ao se passar um Array de Strings o mesmo realiza uma comparacao e caso haja
* caracteres invalidos na String a ser inserida ele realiza o bloqueio.
*
* @author Arthur Gregorio
* @version 1.0.0
* @since Release 1.0.0
*/
public class LockInvalidChars extends PlainDocument{
private CharSequence chars;
/**
* <strong>Construtor</strong>
* Recebe um CharSequence que serão os caracteres a serem
* bloqueados.
*
* @param lockedChars
* @see CharSequence
*/
public LockInvalidChars(CharSequence lockedChars) {
chars = lockedChars;
}
/**
* <strong>Descricao</strong>
* Método sobrescrevido da classe PlainDocument(), nesta versão do metodo o
* mesmo realiza a checagem dos dados a serem inseridos no JComponent em
* questao e caso esteja de acordo (caso o caracter nao esteja bloqueado) ele
* permite que o mesmo seja inserido
*
* @param offset indica o deslocamento (a posição) inicial onde o objeto
* String str deverá ser inserido
* @param str a String a ser inserida no JComponent
* @param attr os atributos para o que será inserido
* @throws BadLocationException um erro caso a insercao seja feita no local
* errado.
*/
@Override
public void insertString(int offset, String str, AttributeSet attr)
throws BadLocationException{
boolean teste = false;
if (str == null) super.insertString(offset, str, attr);
int length = chars.length();
for(int i = 0; i < length; i++){
if (str.contains(""+chars.charAt(i)+"")){
return;
}
else{
teste = true;
}
}
if(teste == true) super.insertString(offset, str, attr);
}
}
ai no JComponent, vc faz assim
String locker = ".,*/-"; //aqui uma String com os caracters a serem bloqueados
private JTextField inTeste = new JTextField();
inTeste.setDocument(new LockInvalidChars(locker));
uma solucao simples para quem quer algo simples ou está aprendendo.
Flow vlw! 