[RESOLVIDO]Preencher jlabel a partir de números informados na tela

7 respostas
R

Desculpe por mais um tópico sobre isso, mas eu já pesquisei por vários tópicos sobre a mesma dúvida e ainda assim não consegui resolver meu caso.

String pu = lblp.getText().trim();

        String q = txtquant.getText().trim();
        
        double pud = Double.parseDouble(pu);
        double qd = Double.parseDouble(q);
        double pt = pud * qd;
        lblp1.setText("R$ "+String.valueOf(pt));

Este código é de um botão que pega:

  1. O valor do preço unitário (em uma jlabel - lblp)
  2. O valor da quantidade (em uma txtfield - txtquant)

Multiplica os dois valores e retorna em outra jlabel, lblp1. As outras variáveis que estou usando é só por questão de conversão.
Mas quando eu clico no botão, aparece o erro:

Exception in thread AWT-EventQueue-0 java.lang.NumberFormatException: For input string: "R$ 0003.92"

at sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:1242)

at java.lang.Double.parseDouble(Double.java:527)

at fronteira.Entregas.bttptActionPerformed(Entregas.java:893)

at fronteira.Entregas.access$500(Entregas.java:27)

at fronteira.Entregas$6.actionPerformed(Entregas.java:148)

at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2012)

at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2335)

at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:404)

at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)

at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:253)

at java.awt.Component.processMouseEvent(Component.java:6107)

at javax.swing.JComponent.processMouseEvent(JComponent.java:3287)

at java.awt.Component.processEvent(Component.java:5872)

at java.awt.Container.processEvent(Container.java:2101)

at java.awt.Component.dispatchEventImpl(Component.java:4467)

at java.awt.Container.dispatchEventImpl(Container.java:2159)

at java.awt.Component.dispatchEvent(Component.java:4293)

at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4578)

at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4241)

at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4171)

at java.awt.Container.dispatchEventImpl(Container.java:2145)

at java.awt.Window.dispatchEventImpl(Window.java:2559)

at java.awt.Component.dispatchEvent(Component.java:4293)

at java.awt.EventQueue.dispatchEvent(EventQueue.java:604)

at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:275)

at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:200)

at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:190)

at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:185)

at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:177)

at java.awt.EventDispatchThread.run(EventDispatchThread.java:138)

BUILD SUCCESSFUL (total time: 32 seconds)

Como corrigir isso?

7 Respostas

E

Quando você chama get text, você tá pegando a parte do R$ também, então não tem como tranformar isso em um valor numérico que é o que você tá querendo. Tira o R$ da string e tenta de novo.

R

eu tirei, não adiantou…

R

Eu percebi também que:
Na hora que eu pego os valores, tudo bem, mas eles vêm como String. Quando eu estava pesquisando o problema na internet, todos os tópicos em que entrei diziam a mesma coisa: variável String está vazia. Mas svjp que não é o caso, pois ao que parece, as variáveis são preenchidas corretamente. Eu pedi pra imprimir no console via println e os dois valores apareceram.
Mas para multiplicar, eu teria que converter String em Double: foi o que eu fiz ali. Só que é nessa parte que dá problema.
Agora, POR QUE, não sei. :frowning:

V

A mensagem de erro é clara. O double.parseDouble está encontrando uma String que não é um número no formato válido.

Os motivos para esse geralmente são:

  • Presença de texto (incluindo o R$ ou espaço) na String;
  • Usar . no lugar de vírgula, ou vice-versa;
  • Não ter mesmo um número no label.

O ideal é usar a classe DecimalFormat para formatar e posteriormente ler o número. Assim você garante que o formato usado na entrada será exatamente o mesmo a ser lido na saída.

R

Valeu pessoal!

V

Conseguiu resolver? Poste qual exatamente era o problema e a solução!

R

era na verdade o que o elissonandrade tinha falado. Quando eu concatenava R$ dentro do textfield, o java não conseguia extrair o valor. Mas o “R$” tinha referência em algumas outras ActionPerformed’s que eu não tinha visto. Eu tive que colocar isso em uma label à parte.

Criado 1 de janeiro de 2013
Ultima resposta 2 de jan. de 2013
Respostas 7
Participantes 3