Formato em um valor

14 respostas
B

Pessoa alguem me ajuda em uma logica? to pelejando aqui para setar uma mascara no meu jtextfield quando ele tem mais que 5 numeros veja so meu codigo

String limite = jt_limite.getText().replace(".", "").replace("", "").replace("_", "");
                                        System.out.println("limite = "+limite);

                                        if(limite.length() > 4) {
                                            jt_limite = new JFormattedTextField(Formats.getFormatoReal());
                                            jt_limite.setText(limite);
                                            System.out.println("setou");
                                        }

eu precisava setar uma mascara no meu campo jtextfield quando limite for assim 123456 ele setar o formato e ficar assim 1.234.56
Obs: o getFormatoReal ta correto o problema e como setar o formato quando a variavel limite tiver mais que 5 casas decimais! alguem pode me da uma forca? obrigada!

14 Respostas

pedroroxd

Não entendi o que você quer fazer, nem o seu código…
Seja um pouco mais específico na dúvida…

B

Seguinte eu tenho um jtextfield no meu form, e quando ele ganha o focu, faco uma soma para ver quantos caracter eu digitei se ele me retornar mais que 5 ele entra em uma condicao, e eh nessa condicao que preciso que ele ganhe uma mascara no jtextfield!
O jtextfield recebe int veja: 12345, e quando eu digitar 123456 ele tem q busca a mascara e ficar assim 1.234.56, sacou?

lina

Oi,

Não sei se é uma saida muito boa...

Declare a variavel MaskFormatter:

MaskFormatter io_mf_formato = new MaskFormatter();

Verifique se o tamanho é de 6 posições:

if (lo_field.getText().length() == 6) {

     try
     {
          // Modifica a mascara.
          String
          ls_value = lo_field.getText();
          io_mf_formato.uninstall();
          io_mf_formato.setMask("#.###.##");
          io_mf_formato.install(lo_field);	
          lo_field.setText(ls_value);
     }
     catch (ParseException e)
     {
          e.printStackTrace();
     }
}

Tchauzin!

renamed

Olá… acho que esse link pode ajudar

http://www.guj.com.br/posts/list/34734.java

B

Lina, amiga obrigada por sua atencao e seu tempo, mas viu

io_mf_formato.install(lo_field);

ta dando cannot find symbol nessa classe! e o erro aponta apra lo_field sendo que coloquei o jtextfield que esta tendo a condicao length corretamente veja

String limite = jt_limite.getText().replace(".", "").replace("", "").replace("_", "");
                                        System.out.println("limite = " + limite);

                                        if(limite.length() > 4) {
                                            // Modifica a mascara.
                                            String ls_value = jt_limite.getText();
                                            io_mf_formato.uninstall();
                                            io_mf_formato.setMask("#.###.##");
                                            io_mf_formato.install(ls_value);
                                            jt_limite.setText(ls_value);
                                        }

Estou fazendo algo de errado?

lina

Oi,

Sim... você deverá fazer.:

String limite = jt_limite.getText().replace(".", "").replace("", "").replace("_", "");
                                        System.out.println("limite = " + limite);

                                        if(limite.length() > 4) {
                                            // Modifica a mascara.
                                            String ls_value = jt_limite.getText();
                                            io_mf_formato.uninstall();
                                            io_mf_formato.setMask("#.###.##");
                                            io_mf_formato.install(jt_limite);
                                            jt_limite.setText(ls_value);
                                        }

Tchauzin!

B

mesmo erro cannot find symbol methods install (JtextField), location MaskFormatter

lina

Oi,

A bom!! é pq você tem que utilizar um JFormattedTextField e não um JTextField.

Tchauzin!

B

Entao amiga, era isso mesmo coloquei como jformattedtextfield e n deu erro de compilacao! esse codigo esta dentro da thread certo!!! pois entao quando execulto o processo n acontece nada apenas trava a tela e a caixa de som faz um barulho muito sinistro! pq isso vc sabe?

lina

Oi,

Fiz um exemplo rapidinho! manda executar e verifique se vc está fazendo o mesmo:

import java.awt.Container;
import java.awt.event.KeyAdapter;
import java.text.ParseException;
import java.awt.event.KeyEvent;
import javax.swing.JFormattedTextField;
import javax.swing.JFrame;
import javax.swing.text.MaskFormatter;

public class Estudos extends JFrame{
	
	 private JFormattedTextField lo_field;
	 
	 MaskFormatter io_mf_formato = new MaskFormatter();
	 
	  public Estudos(){
	    
	    super("Eventos do Mouse e Teclado");
	    Container c = getContentPane();
	    c.setLayout(null);
	    lo_field = new JFormattedTextField();
	    lo_field.setBounds(5,10,100,25);
	    lo_field.addKeyListener
	    (
			new	KeyAdapter()
			{
				public
				void			keyPressed(KeyEvent evt)
				{
					if	(lo_field.getText().length() == 6) {
						try
						{
							String
							ls_value = lo_field.getText();
							io_mf_formato.uninstall();
							io_mf_formato.setMask("#.###.##");
							io_mf_formato.install(lo_field);	
							lo_field.setText(ls_value);
						}
						catch (ParseException e)
						{
							e.printStackTrace();
						}
					}
				}
			}
		);
	    c.add(lo_field);
	    setVisible(true);
	  }
	  
  public static void main(String args[]) 
  {
	new Estudos().setVisible(true);
  }

Tchauzin!

B

Testei seu codigo e aqui funciono certinho, mas me fala uma coisa da para mim setar o install na mascara atravez da thread? pq dentro da thread da aquele problema? ou tem alguma outra maneira de resolver isso? pq pensa cumigo
Tenho 2 jtextField
JtextFieldA (tem foco) digito o valor
JtextFieldB (nao tem foco) apenas recebe o valor do jtextA

estando com o foco no jtextA como faco para se no campo jtextB tiver (.length() == 5) ele install a mascara!

mais uma vez obrigada por sua atencao!

lina

Oi,

Tem como colocar essa thread ??
colocar esse código iria facilitar as coisas… poderei compilar e verificar o problema =)

Tchauzin!

B

sim claro

private final Thread ThreadSoma() {
        return (new Thread(
                new Runnable() {

                    public void run() {
                        while (!lo_thread.isInterrupted()) {
                            if (jt_salario.getText().length() > 0 &&
                                    jt_salario.getText().length() > 0) {

                                PercentWageBean salario = (PercentWageBean) jcb_salario.getSelectedItem();
                                DecimalFormat df2 = (DecimalFormat) DecimalFormat.getNumberInstance();
                                df2.setParseBigDecimal(true);
                                String salario2 = jt_salario.getText();

                                if ("5%".equals(salario.getTipo())) {
                                    try {
                                        BigDecimal bd = (BigDecimal) df2.parse(salario2);
                                        BigDecimal multiplica = bd.multiply(new BigDecimal("0.05"));
                                        BigDecimal divisao = multiplica.divide(new BigDecimal("100"));
                                        jft_limite.setText(divisao.toString());

                                        //String limite = jft_limite.getText().replace(".", "").replace("", "").replace("_", "");
                                        //System.out.println("limite = " + limite);
                                        String limite = divisao.toString().replace(".", "").replace(" ", "").replace("_", "");
                                        //System.out.println("limite = "+limite);
                                        if (limite.length() > 4) {
                                            System.out.println("limite = " + limite);
                                            //Modifica a mascara.
                                            String ls_value = jft_limite.getText();
                                            io_mf_formato.uninstall();
                                            io_mf_formato.setMask("#.###.##");
                                            io_mf_formato.install(jft_limite);
                                            jft_limite.setText(ls_value);
                                        }
                                    } catch (ParseException ex) {
                                        ex.printStackTrace();
                                    }
                                } else {
                                //
                                // Aguarda 1 segundo e verifica novamente.
                                // Isso servirá para não consumir muito a memoria do SO
                                synchronized (lo_thread) {
                                    try {
                                        lo_thread.wait(1000);
                                    } catch (InterruptedException e) {
                                        e.printStackTrace();
                                    }
                                }
                            }
                        }
                    }
                }));
    }
lina

Oi,

Desculpe… não consegui encontrar o problema! rodei aqui e funcionou corretamente…

Apenas algumas observações:

String limite = divisao.toString().replace(".", "").replace(" ", "").replace("_", "");

Você poderá trocar por expressão regular:

String limite = divisao.toString().replaceAll("[^0-9]",""); // Isso irá tirar tudo que não está entre 0 e 9.

Acho que o problema pode estar aqui ó:

jft_limite.setText(ls_value); // Mude para: jft_limite.setText(limite);

Quem sabe não é a pontuação que está dando problema!

Tchauzin!

Criado 21 de setembro de 2009
Ultima resposta 28 de set. de 2009
Respostas 14
Participantes 4