[Java] JTextfield kan niet naar integer geparsed worden

Pagina: 1
Acties:

  • Enfer
  • Registratie: Februari 2004
  • Laatst online: 10-10 13:28
Hey :) Ik ben bezig met een (simpele) calculator in java, om te leren hoe ik een Java GUI maak. Maar ik loop nu tegen een probleem waar ik al verscheidene tijd mee zit, en wie ik niet kan oplossen. Vandaar dat ik hier om hulp vraag.

De rekenmachine is nog niet helemaal af, maar ik ben nu bezig met het gedeelte om uit het invoerveld de waarde die ingevoerd is door de gebruiker te halen, en daarvan een int te maken.
Ik heb 2 klassen geschreven, 1 voor het invoerveld en 1 voor de gehele GUI. De code volgt.
Invoerveld.java
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
/**
 * Write a description of class Invoerveld here.
 * 
 * @author (your name) 
 * @version (a version number or a date)
 */
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class Invoerveld extends JPanel
{
    private JTextField invoerveld;
    
    public Invoerveld(){
        invoerveld = new JTextField( 25 );
        //invoerveld.setBounds( 10, 500, 10, 500 );
        add( invoerveld );
    }
    
    public int getInvoer(){
        int invoer = Integer.parseInt( invoerveld.getText() );
        return invoer;
    }
    
    public void addWaarde( String waarde ){
        invoerveld.setText( invoerveld.getText() + waarde );
    }
}

Rekenmachine.java
Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
    class Handler implements ActionListener{  
        public void actionPerformed( ActionEvent e ){
            if( e.getSource() == knop7 ){
                invoerveld.addWaarde( "7" );
            }
           else if( e.getSource() == knop_plus ){
                //System.out.println( invoerveld.getInvoer() );
                //eerst de gettext opslaan
                int temp = invoerveld.getInvoer();
                System.out.println( temp );
                //System.out.println( invoerveld.getInvoer() + " .. " + invoer1  + " lol " + temp);
                String berekening = "plus";
                invoerveld.clearField();
            }
        }
    }

Mijn probleem is nu de string altijd leeg aankomt als ik bijvoorbeeld 5 indruk, en dan op het plusknopje druk.. Daarbij krijg ik de volgende foutmeldingen:
code:
1
2
3
4
Exception in thread "AWT-EventQueue-0" java.lang.NumberFormatException: For input string: ""
    at java.lang.NumberFormatException.forInputString(NumberFormatException.java:48)
    at Invoerveld.getInvoer(Invoerveld.java:22)
    at Rekenmachine$Handler.actionPerformed(Rekenmachine.java:129)

Er zijn er wel meer maar die zijn denk ik niet van belang omdat ze meer met java.awt ed te maken hebben

Hier voor de duidelijkheid nog even de code waar het volgens mij fout moet gaan:
Java:
1
2
3
4
5
6
7
8
int temp = invoerveld.getInvoer();

//in combinatie met

    public int getInvoer(){
        int invoer = Integer.parseInt( invoerveld.getText() );
        return invoer;
    }


Ik heb her en der (zoals je wel kunt zien) wat System.out's neergezet, om de waarden te bekijken, maar deze lijken mij volledig correct, en totaal niet leeg zoals de foutmelding aangeeft..

Ik heb al geprobeer om de Integer.parseInt in de klasse rekenmachine te zetten en eerst de getText() op te slaan, en die daarna pas om te parsen, maar ook dat mocht niet baten..

Hopelijk kan iemand mij helpen want ik zie het ff niet meer zitten :+ :/

/edit: http://media5.filewind.com/g.php?filepath=5754

[ Voor 52% gewijzigd door Enfer op 13-02-2007 15:20 . Reden: wat RobIII zegt ]


  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Zou je je code even willen beperken tot de relevante stukken? Dik 250 regels code is wat veel van het goede ;)

Heb je al eens gekeken wat de getText returned? oh, dat had je dus al gedaan ;)

[ Voor 44% gewijzigd door RobIII op 13-02-2007 14:32 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • Enfer
  • Registratie: Februari 2004
  • Laatst online: 10-10 13:28
Ja, deze return netjes de door mij verwachte waarde (dus als ik 5 indruk, retourneert hij ook 5).

Zelfs als ik de getText() trim, krijg ik een foutmelding..
Het rare vind ik dus dat ik als foutmelding krijg dat ik een lege string meegeef, terwijl als ik hem in de terminal uitprint er wel degelijk een waarde komt..

@Hieronder:
Ja, want als ik precies dezelfde variable System.out, dan krijg ik wel een waarde in de terminal..

[ Voor 68% gewijzigd door Enfer op 13-02-2007 14:36 ]


  • Snake
  • Registratie: Juli 2005
  • Laatst online: 07-03-2024

Snake

Los Angeles, CA, USA

code:
1
For input string: ""


Vul je wel iets in? Of misschien noemt je veld verkeerd?

Going for adventure, lots of sun and a convertible! | GMT-8


Verwijderd

Je kan met System.println() niet direct int'jes printen, alleen maar strings.

Probeer eens

Java:
1
System.println("" + temp);


Als het goed is werkt dat wel :)

[ Voor 9% gewijzigd door Verwijderd op 13-02-2007 14:39 ]


  • Enfer
  • Registratie: Februari 2004
  • Laatst online: 10-10 13:28
Ja, ik krijg (zoals ook wel eerder ;) ) gewoon wel output in de terminal, maar bij de parseInt nog steeds een dikke foutmelding..

Moet het niet
Java:
1
System.out.println( "" + temp );

zijn?

[ Voor 23% gewijzigd door Enfer op 13-02-2007 14:40 ]


  • Enfer
  • Registratie: Februari 2004
  • Laatst online: 10-10 13:28
Oke sorry voor de dubbelpost maar het probleem is gevonden..

In de constructor werd 2 maal de ActionListener toegevoegd (knop_plus.addActionListener( new Handler() );)..
Niet zo handig dus, iig bedankt voor jullie tijd! :)

  • bazzs2001
  • Registratie: April 2002
  • Laatst online: 22-10 21:11

bazzs2001

je moet knagen wat lekker is

Verwijderd schreef op dinsdag 13 februari 2007 @ 14:36:
Je kan met System.println() niet direct int'jes printen, alleen maar strings.

Probeer eens

Java:
1
System.println("" + temp);


Als het goed is werkt dat wel :)
Sinds wanneer niet?

volgens mij werkt:
Java:
1
System.out.println(temp);

perfect

groeten


  • Kwistnix
  • Registratie: Juni 2001
  • Laatst online: 08:22
Verwijderd schreef op dinsdag 13 februari 2007 @ 14:36:
Je kan met System.println() niet direct int'jes printen, alleen maar strings.
PrintStream heeft al sinds jaar en dag overloaded println() methoden voor java.lang.Object java.lang.String en alle primitieven.
Pagina: 1