[Java] NumberFormat werkt niet in ieder textfield

Pagina: 1
Acties:

  • RvL
  • Registratie: Maart 2002
  • Laatst online: 17:34
Hallo allemaal,

ik ben bezig met een formuliertje van een barrekening. Het programma haalt de artikelen uit een database en zet deze in een combobox. Door een artikel te selecteren en het aantal in te vullen, kun je artikelen toevoegen aan de rekening, welke opgesomd wordt.

De prijs wordt ook uit de database gehaald. Omdat een getal als 11,00 niet bestaat, laat ik hier een Numberformat op los:
Java:
1
2
NumberFormat formatter = NumberFormat.getNumberInstance();
formatter.setMinimumFractionDigits(2);

Vervolgens laat ik deze los op de textfields die aangepast moeten worden aan dit format, productprijs en totaalprijs:
Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
try
{
  //Query uitvoeren welke de prijs van het gekozen artikel (strSelect) uit de database haalt
  ResultSet select = myStat.executeQuery("Select prijs from bar where artikel = '"+strSelect+"'");
  int intAantal = Integer.parseInt(txtAantal.getText());

  while(select.next())
   {
      float fltPrijs =select.getFloat("prijs");
      arrArtikel[intLoop].setText(strSelect);
      arrAantallijst[intLoop].setText(String.valueOf(intAantal));
      arrPrijs[intLoop].setText(String.valueOf(formatter.format(fltPrijs*intAantal)));
      float fltOldtot = Float.parseFloat(txtTotprijs.getText());
      float fltNewtot =(fltPrijs*intAantal)+fltOldtot;
      txtTotprijs.setText(String.valueOf(formatter.format(fltNewtot)));
    }
}

Het gaat hier fout bij het textfield txtTotprijs. Het eerste artikel wordt juist toegevoegd, en de getallen in alle velden juist weergegeven. Ook het aantal ophogen van dat artikel werkt goed.

Echter, als ik een nieuw artikel toevoeg (er wordt dan een nieuwe rij textfields (artikel, aantal, prijs) aangemaakt en onder de bestaande regel geplaatst), krijg ik een NumberFormatException:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
java.lang.NumberFormatException: 11,00
        at java.lang.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:1213)
        at java.lang.Float.parseFloat(Float.java:203)
        at cateringformulier.actionPerformed(cateringformulier.java:88)
        at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1767)
        at javax.swing.AbstractButton$ForwardActionEvents.actionPerformed(AbstractButton.java:1820)
        at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:419)
        at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:257)
        at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:258)
        at java.awt.Component.processMouseEvent(Component.java:5021)
        at java.awt.Component.processEvent(Component.java:4818)
        at java.awt.Container.processEvent(Container.java:1525)
        at java.awt.Component.dispatchEventImpl(Component.java:3526)
        at java.awt.Container.dispatchEventImpl(Container.java:1582)
        at java.awt.Component.dispatchEvent(Component.java:3367)
        at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:3359)
        at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3074)

        at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3004)
        at java.awt.Container.dispatchEventImpl(Container.java:1568)
        at java.awt.Window.dispatchEventImpl(Window.java:1581)
        at java.awt.Component.dispatchEvent(Component.java:3367)
        at java.awt.EventQueue.dispatchEvent(EventQueue.java:445)
        at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.java:191)
        at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:144)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138)

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

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

Als ik het NumberFormat op txtTotprijs weglaat, dus alleen op de artikelprijzen uitvoer, dan doet het programma het wel gewoon.

Wie weet de oplossing voor dit, voor mij, rare probleem??

Roy

[ Voor 2% gewijzigd door RvL op 24-04-2003 10:57 . Reden: overzichtelijker gemaakt ;-) ]

Liefde maakt een smal bed breed!
Nu de dekens nog...


Verwijderd

deze code gaat fout:
code:
1
float fltOldtot = Float.parseFloat(txtTotprijs.getText());

dat komt doordat de txtTotprijs een getal met een komma bevat
echter een parsefloat verwacht een getal met een punt.
even een replace eroveheen en het is opgelost

  • RvL
  • Registratie: Maart 2002
  • Laatst online: 17:34
Ja, inderdaad, dat is het. Stom dat ik daar zelf niet aangedacht heb 8)7

Ik heb het nu in ieder geval zo opgelost:
Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
//NumberFormat aanmaken, met 2 cijfers achter de komma
NumberFormat formatter = NumberFormat.getNumberInstance();
formatter.setMinimumFractionDigits(2);

try
 {
//Query uitvoeren om prijs bij artikel te vinden
   ResultSet select = myStat.executeQuery("Select prijs from bar where artikel = '"+strSelect+"'");

   int intAantal = Integer.parseInt(txtAantal.getText());
   while(select.next())
   {
//Gevonden prijs in float zetten
     float fltPrijs =select.getFloat("prijs");

//Textfields vullen met geselecteerde artikel, aantal en prijs
     arrArtikel[intLoop].setText(strSelect);
     arrAantallijst[intLoop].setText(String.valueOf(intAantal));
     arrPrijs[intLoop].setText(String.valueOf(formatter.format(fltPrijs*intAantal)));

//Oude totaalprijs uitlezen en in string plaatsen
     String strOldtot = txtTotprijs.getText();

//Eventuele ',' vervangen door '.' en getal omzetten in een float
     float fltOldtot = Float.parseFloat(strOldtot.replace(',','.'));

//Nieuwe totaalprijs berekenen
     float fltNewtot =(fltPrijs*intAantal)+fltOldtot;

//Nieuwe totaalprijs wegschrijven, met NumberFormat
     txtTotprijs.setText(String.valueOf(formatter.format(fltNewtot)));

Hardstikke bedankt voor je hulp!!

Roy

[ Voor 5% gewijzigd door RvL op 24-04-2003 15:58 ]

Liefde maakt een smal bed breed!
Nu de dekens nog...