Bom dia galera!
Criei uma classe que limita o tanto de digitos de um JTextField e quais podem ser inseridos, porém quando insiro uma-a-um (ex.: 4, depois 5) o mesmo insere normal, aparecendo no Field “45” mas quando faço um CTRL+C e dpois um CTRL+V no mesmo “45” a inserção ocorre ao contrário! ficando “54”…
Preciso de uma ajuda com esse probleminha, já fiz várias mudanças dentre elas mudar a ordem do loop de checagem, porém nada aconteceu!!!
Abaixo segue a minha classe que extende o PlainDocument:
package arth.utils.control;
import javax.swing.text.AttributeSet;
import javax.swing.text.PlainDocument;
import javax.swing.text.BadLocationException;
/**
* Classe que Fixa o tamanho de um JComponent e permite apenas determinados
* Caracteres para insercao
*
* @author Arthur Gregorio
* @version 1.0.0
* @since Release 1.0.0
*/
public class FxLgtPmtChs extends PlainDocument implements CharSeqs {
private int lgt;
private CharSequence pmt;
/**
* Construtor, recebe o tanto de caracteres que podem ser informados e
* a charsequence dos caracteres permitidos.
*
* @param lenght Quantidade de digitos maximos do campo
* @param permited Conjunto de caracteres que sao permitidos
*/
public FxLgtPmtChs(int lenght, CharSequence permited){
this.lgt = lenght;
this.pmt = permited;
}
/**
*
* @param offset
* @param str
* @param attr
* @throws BadLocationException
*/
@Override
public void insertString(int offset, String str, AttributeSet attr)
throws BadLocationException {
int length = pmt.length();
int infLgt = (getLength() + str.length());
if (str == null || lgt == 0 || pmt == null) {
return;
} else if (lgt <= 0){
super.insertString(offset, str, attr);
return;
} else if (infLgt <= lgt){
for (char ch : str.toCharArray()){
System.out.println(length);
for (int i = 0; i < length; i++){
if ((""+ch+"").contains(""+pmt.charAt(i)+""))
super.insertString(offset, String.valueOf(ch), attr);
}
}
} else {
if (getLength() == lgt) return;
String newStr = str.substring(0, (lgt - getLength()));
for (char ch : newStr.toCharArray()){
for (int i = 0; i < length; i++){
if ((""+ch+"").contains(""+pmt.charAt(i)+""))
super.insertString(offset, (""+ch+""), attr);
}
}
}
}
}
e a interface que ela implementa com os permitidos:
public interface CharSeqs {
public static final CharSequence NUMBERS_ONLY = "[telefone removido]";
public static final CharSequence ALPHABET_ONLY = "abcdefghijklmnopqrstuvwxyz" +
"ABCDEFGHIJKLMNOPQRSTUVWXYZ";
}
creio que o problema esteja nesta parte
else if (infLgt <= lgt){
for (char ch : str.toCharArray()){
System.out.println(length);
for (int i = 0; i < length; i++){
if ((""+ch+"").contains(""+pmt.charAt(i)+""))
super.insertString(offset, String.valueOf(ch), attr);
}
}
}
vleu ai quem puder ajudar! 