Campo de moeda com mascara

Pessoal, boa tarde.

Estou fazendo programa desktop Java, e estou utilizando campos com mascara. Preciso fazer um campo de moeda. Igual aos caixas eletrônicos quando vamos sacar dinheiro, onde os valores são preenchidos da direita para esquerda.

Exemplo:
,5
,50
5,00
50,00

Pesquisei nos fóruns e consegui fazer uma parte, mas ainda tem um probleminha.

Criei uma mascara “######,##” e não funciona, pois ele começa a preencher da esquerda para a direita porem empurra a virgula !!!

Vocês podem me ajudar com essa duvida ??

Segue abaixo o codigo ate o momento:


    public MaskFormatter Mascara(String Mascara){

       MaskFormatter F_Mascara = new MaskFormatter();
       try{
           F_Mascara.setMask(Mascara); //Atribui a mascara
           F_Mascara.setPlaceholderCharacter(' '); //Caracter para preencimento
       }
       catch (Exception excecao) {
       excecao.printStackTrace();
       }
       return F_Mascara;
    }

jFormattedTextField1 = new javax.swing.JFormattedTextField(Mascara("######,##"));

jFormattedTextField1.setComponentOrientation(java.awt.ComponentOrientation.RIGHT_TO_LEFT);

Obrigado,
Fabio

Olá,

Dê uma olhada neste artigo, com certeza vai te ajudar: http://www.guj.com.br/articles/29.

Uma idéia seria vc implementar uma classe PlainDocument, inserindo sempre no final e formatando com DecimalFormat.
Algo +/- assim:

public class MyDocument extends PlainDocument  
{  

    private double value;
  
    public void insertString(int offset, String str, AttributeSet attr)  
                    throws BadLocationException {  
        if (s == null) return;  

        //formata o nr. com DecimalFormat ...
        ...

        //insere sempre no final
        super.insert(this.getLength()-1, str, attr);

        ...
    }
 
}

Exatamente. Aconselho você a ler o artigo que o colega juno.rr passou.

Ou, se você quer uma solução temporária, você pode usar simplesmente

JFormattedTextField f = new JFormattedTextField(new DecimalFormat("#####,##"));

Pessoal, bom dia.

Muito obrigado pela ajuda.

Li o artigo http://www.guj.com.br/articles/29 e montei conforme abaixo.

Mas estou com um problema, não consigo fazer reconhecer a tecla BACKSPACE e DELETE.

segue código abaixo:


public class MyDocument extends PlainDocument     
{     
     public void insertString(int offset, String str, AttributeSet attr) throws BadLocationException {     

        //Aceitar somente numeros
        if(str.codePointAt(0) <= 47 || str.codePointAt(0) >= 58) { 
            return;
        }                

        //Nao permitir a tecla Delete
        if (str.codePointAt(0) == KeyEvent.VK_DELETE){
           return;
        }

        //Nao permitir a tecla Backspace
        if (str.codePointAt(0) == KeyEvent.VK_BACK_SPACE){
            return;
        }

        //Nao permitir a tecla Backspace de outro modo
        if (cont >= 1 & str.codePointAt(0) == 8){
            return;
            //cont = cont - 1;
        }
    }   

Alguém pode me ajudar ??

Obrigado,
Fabio