Duvida em montar mascaka para um JFormattedTextField

3 respostas
S

Galera preciso de ajuda em 2 campos do tipo JFormattedTextField

no primeiro campo o “preco”, preciso montar uma mascara que fique da seguinte forma R$ 10.00, R$ 100.00, R$ 150.75, R$ 25000.25 tah complicado pq não estou conseguindo que fique desta forma.

no outro campo o “cnpj” é um campo onde digitarei a inscrição estadual nele deve aceitar tanto o 64.803.570/0001-00 quanto o 764.803.570/0001-00

alguem pode ma ajudar? pq o problema que estou encontrado é qeu tenho que digitar exatamente como esta na mascara se não ele não aceita

3 Respostas

R

Faz um teste ae com esses códigos…

CNPJ:

JFormattedTextField formatedField = new JFormattedTextField(); MaskFormatter formatter = new MaskFormatter(); try { formatter.setMask( "###.###.###/####-##" ); formatter.setPlaceholderCharacter( '_' ); formatter.install( formatedField ); } catch ( ParseException pe ) { // tratar erro }

Campo Preço:

JFormattedTextField formatedField = new JFormattedTextField();
DecimalFormat formatter = new DecimalFormat();
formatedField.setHorizontalAlignment( JTextField.RIGHT );        formatter.applyPattern( "R$ #0,00; R$ (#0,00)" );
S

Amigo valeu pela ajuda, no campo do preço depois de criar o DecimalFormat como eu uso ele? pq no exemplo vc não ligou ele com o campo JFormattedTextField, aito na duvida de como utiliza-lo. valeu!!

R

ai cara... usa essa classe e altera pro q vc quiser!

da uma olhada:

public class DecimalFormattedField extends JFormattedTextField {
    
    public static int FLOAT_TYPE = 1;
    public static int DOUBLE_TYPE = 2;
    
    private DecimalFormat df = new DecimalFormat();
    
    private int typeOfValue = 1;
    private float fValue = 0.00f;
    private double dValue = 0.00;
    
    private String sDecimals;
    private String oldValue;
    
    /** Creates a new instance of DecimalFormattedField */
    public DecimalFormattedField() {
        super();
        this.setHorizontalAlignment( JTextField.RIGHT );
        df.applyPattern( "R$ #,##0.00; R$ (#,##0.00)" );
        applyActions();
    }
    
    /**
     * Cria um campo formatado para valor monetário.
     * @param typeOfValue tipo do valor do campo [float (default) ou double]
     */
    public DecimalFormattedField( int typeOfValue ) {
        super();
        this.typeOfValue = typeOfValue;
        this.setHorizontalAlignment( JTextField.RIGHT );
        df.applyPattern( "R$ #,##0.00; R$ (#,##0.00)" );
        applyActions();
    }
    
    /**
     * Cria um campo formatado para valor monetário.
     * @param typeOfValue tipo do valor do campo [float (default) ou double]
     * @param decimals  número de casas decimais depois do zero.
     */
    public DecimalFormattedField( int typeOfValue, int decimals ) {
        super();
        this.typeOfValue = typeOfValue;
        this.setHorizontalAlignment( JTextField.RIGHT );
        String s = getDecimalPattern( decimals );
        df.applyPattern( "R$ #,##0." + s + "; R$ (#,##0." + s + ")" );
        System.out.println( "\n" + s + "\n" );
        applyActions();
    }
    
    private void applyActions() {
        
        this.addKeyListener( new KeyAdapter() {
            public void keyPressed( KeyEvent evt ){
                if ( evt.getKeyCode() == KeyEvent.VK_ENTER )
                    transferFocus();
            }
        } );
        
        this.addFocusListener( new FocusAdapter() {
            public void focusLost( FocusEvent evt ) {
                thisFocusLost( evt );
            }
        });
        
        this.addFocusListener( new FocusAdapter() {
            public void focusGained( FocusEvent evt ) {
                thisFocusGained( evt );
            }
        });
    }
    
    public void thisFocusLost( FocusEvent evt ) {
        String valor = getText().replaceAll( ",", "." );
        if ( !valor.equals( "" ) )
            oldValue = valor;
        setValue( valor );
    }
    
    public void thisFocusGained( FocusEvent fe ) {
        this.setText( "" );
        normalText();
    }
    
    private void setValue( String value ) {
        if ( typeOfValue == 1 ) {
            try {
                fValue = Float.parseFloat( value );
            } catch ( Exception e ) {
                //fValue = 0.00f;
                value = oldValue;
            }
        }
        else {
            try {
                dValue = Double.parseDouble( value );
            } catch ( Exception e ) {
                //dValue = 0.00f;
                value = oldValue;
            }
        }
        showValue( value );
    }
    
    /**
     * Mostra o valor formatado monetariamente
     * @param s valor informado no campo
     */
    public void showValue( String s ) {
        try {
            this.setText( df.format( new java.math.BigDecimal( s ) ) );
        } catch ( Exception e ) {
            error( "somente números" );
        }
    }
    
    /**
     * Retorna o valor inserido no campo.
     * @return fValue float value
     */
    public float getFloatValue() {
        return fValue;
    }
    
    /**
     * Retorna o valor inserido no campo.
     * @return dValue double value
     */
    public double getDoubleValue() {
        return dValue;
    }
    
    /**
     * Retorna a quantidade de zeros da casa decimal
     * @return sDecimals quantidade de zeros (ex.: 000 - 3 zeros depois da vírgula)
     */
    private String getDecimalPattern( int nrDecimals ) {
        sDecimals = "";
        for ( int i = 0; i < nrDecimals; i++ ) {
            sDecimals = sDecimals + "0";
        }
        return sDecimals;
    }
    
    /**
     * Mostra o texto em vermelho e no estilo negrito.
     */
    private void error( String text ) {
        this.setFont(new java.awt.Font("Tahoma", java.awt.Font.BOLD, 11));
        this.setForeground(new java.awt.Color(255, 0, 0));
        this.setText( text );
    }
    
    /**
     * Volta o texto ao formato original
     */
    private void normalText() {
        this.setFont(new java.awt.Font("Tahoma", java.awt.Font.PLAIN, 11));
        this.setForeground(new java.awt.Color(0, 0, 0));
    }
    
}
Criado 15 de agosto de 2007
Ultima resposta 16 de ago. de 2007
Respostas 3
Participantes 2