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
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)" );
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!!
ai cara… usa essa classe e altera pro q vc quiser!
da uma olhada:
[code]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));
}
}[/code]