JFormattedTextField digitando da direita para esquerda?

3 respostas
F

Galera

Eu tenho um campo JFormattedTextField que recebe valores double, ja li muita coisa, pesquisei muito, testei muito e quero colocar uma observação aqui.: “vai ser dificil pra la trabalhar com mascaras no java” …kk !
Bem, consegui fazer em partes o que eu queria, coloquei uma mascara que aceita apenas numeros decimais. O problema agora é que naum consigo começar a digitar da direita para a esquerda.
Vi um post aqui no forum com um exemplo que dizem fazer isso, testei mas não consegui. Talvez outras pessoas tenham tido sucesso mas por enqto eu não tive.

O código que montei é:

public void mascara(){
        MaskFormatter formatter = null;
        try {
            formatter = new MaskFormatter("###.###,##");
            formatter.setPlaceholderCharacter(' ');
            valorProduto.setFormatterFactory(new DefaultFormatterFactory(formatter));
        } catch (ParseException ex) {
            ex.printStackTrace();
        }
    }

Isso ae ta funcionando, só preciso começar a digitar da direita para a esquerda.

3 Respostas

E

Provavelmente você terá que alterar o Document do teu JFormattedTextField e controlar a posição do caret, para que esse se movimente para a esquerda, e não para a direita.

F

Estou pesquisando sobre como alterar o caret do jtext para digitar da direita para a esquerda, encontrei o setCaretPosition e o getCaretPosition, o get traz a posição 0 que acredito ser onde ele inicia…ja o set quando tento alterar para um int qquer não funciona…Seria essa a maneira de alterar ??

obrigado.

F

Galeraaa…

Consegui resolver o problema com a ajuda de um amigo…sknsmiggles.

vejam:

//classe que contrala os decimais para Valor R$

import javax.swing.text.AttributeSet;
import javax.swing.text.BadLocationException;
import javax.swing.text.PlainDocument;

public class NumerosDecimais extends PlainDocument {
    private Integer maxLength;

    public NumerosDecimais(Integer maxLength) {
        this.maxLength = maxLength;
    }

    public void insertString(int offs, String str, AttributeSet a) throws BadLocationException {
        String texto = getText(0, getLength());

        if (texto.length() < this.maxLength) {
            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(), a);
        }
    }
}

//aqui invoco a classe 
valorProduto.setDocument(new NumerosDecimais(6));

Creditos para: sknsmiggles, vlw mano. é nóis !

obrigado a todos.

Criado 27 de outubro de 2010
Ultima resposta 28 de out. de 2010
Respostas 3
Participantes 2