Olá amigos do GUJ,
antes de mais nada quero dizer que apesar de ter encontrado diversos tópicos na internet sobre este assunto, nenhum atendeu as minhas necessidades de forma completa, sempre faltando uma ou outra funcionalidade, assim, decidi criar este novo tópico.
É o seguinte, criei um jTextField com máscara para representar o preço de um determinado produto, porém, o cursor deveria digitar da direita para a esquerda, assim como caixa de banco, só que isto não acontece. Posso alinhar o cursor todo a direita, mas sem a máscara, e posso utilizar a máscara, mas o cursor deve ser posicionado corretamente para representar as casas decimais.
Segue abaixo o código:textPreco = new javax.swing.JTextField();
try{
textPreco = new javax.swing.JFormattedTextField(new MascarasJTextField().iserirMascara("#####.##"));
textPreco.setHorizontalAlignment(textPreco.RIGHT);
textPreco.setDocument(new AlinhaJTextField());
//textPreco.setComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT);
}catch(Exception e){
JOptionPane.showMessageDialog(null, "Erro ao criar campo de Preço.\nPor favor, contate o desenvolvedor do sistema.",
"Erro", JOptionPane.ERROR_MESSAGE);
}
public class AlinhaJTextField extends PlainDocument {
@Override
public void insertString(int offs, String str, AttributeSet atr)
throws BadLocationException {
String texto = getText(0, getLength());
if (texto.length() < 7) {
remove(0, getLength());
StringBuffer strBuf = new StringBuffer(texto.replaceAll(",", "")
+ str);
if (strBuf.length() < 3) {
strBuf.insert(0, ",");
} else {
strBuf.insert(strBuf.length() - 2, ",");
}
super.insertString(0, strBuf.toString(), atr);
}
}
}
public class MascarasJTextField {
public MaskFormatter iserirMascara(String Mascara) {
MaskFormatter F_Mascara = new MaskFormatter();
try {
F_Mascara.setMask(Mascara); //Atribui a mascara
F_Mascara.setPlaceholderCharacter(' '); //Caracter para preencimento
} catch (Exception excecao) {
JOptionPane.showMessageDialog(null, "Problema ao inserir máscara em jTextField.\n" + excecao, "Erro",
JOptionPane.ERROR_MESSAGE);
}
return F_Mascara;
}
}
Obs: O método setComponentOrientation funciona do jeito que eu quero, porém contém alguns bugs, como por exemplo, não posso pular para outro componente da gui que automaticamente o conteúdo da jtextfield é deletado sozinho.