Tekens herkennen voor opvangen van foutmelding

Status
Niet open voor verdere reacties.

Schut4ever

Nieuwe gebruiker
Lid geworden
7 mei 2009
Berichten
4
Ik heb ongeveer hetzelfde probleem als Sanderino1992, bij hem is het opgelost, maar mij lukt het niet. Ik gebruik het programma JBuilder. Om die van Sanderino1992 te zien: http://www.helpmij.nl/forum/showthread.php?t=418654

In java heb ik een programma gemaakt met rekensommen. Ik heb een tekstvak en daar kan een getal worden ingevuld, dan druk je op de knop en moet er een uitkomst uitkomen. Dit lukt. Als er letters of andere tekens ( bijv. **%!#!*$!#%!%) worden ingevuld, doet het programma natuurlijk niets. Ik zou graag in bijvoorbeeld een string een foutmelding willen geven als men een ander teken dan een letter invoert.
Hoe laat ik mijn programma getallen herkennen? En hoe kan ik dit het beste programmeren?:eek:

Als oplossing kreeg hij:

Code:
public void actionPerformed( ActionEvent e ) {
if( e.getSource() == knop ) {
String getalinvoer;

getalinvoer = invoerveld.getText();
try{
    x = Integer.parseInt( getalinvoer );
    //+de rest van de code. Als je de rest van de code buiten dit blok zet,
    //zal die code uitgevoerd worden met de oude waarde van x, en dat wil je niet.
    }catch(NumberFormatException ex)
    {
         uitvoerveld.setText("Je hebt geen geldig getal ingevoerd");
    }
.
.
.
}

Maar ik weet niet hoe ik dat in de mijne moet verwerken, dit is mijn code:

package tijdeenheden;
import java.awt.*;
import java.awt.event.*;
import java.applet.*;
public class Tijd extends Applet
implements ActionListener // Aangeven dat er in een programma een reactie moet zijn op een event
{
String invoerstring1, invoerstring2, invoerstring3; //Declareren van de invoerteksten
TextField invoervak1, invoervak2, invoervak3; //Declareer invoervelden
TextField uitvoervak1, uitvoervak2, uitvoervak3; //Declareer uitvoervelden
Button uur, minu, sec, uurminu, uursec, minusec, uurminusec, reset; //Declareer knoppen
public void init() // Hier begint het programma mee
{
setLayout( null ); // Automische layout wordt uitgezet
invoervak1 = new TextField(10); // Aangeven dat de invoervelden Textfields zijn
invoervak2 = new TextField(10);
invoervak3 = new TextField(10);
uitvoervak1 = new TextField(10); // Aangeven dat de uitvoervelden Textfields zijn
uitvoervak2 = new TextField(10);
uitvoervak3 = new TextField(10);
uur = new Button( "#" ); // Aangeven dat de knoppen Buttons zijn en de tekst die er op komt, namelijk #
minu = new Button( "#" );
sec = new Button( "#" );
uurminu = new Button( "#" );
uursec = new Button( "#");
minusec = new Button( "#");
uurminusec = new Button( "#" );
reset= new Button ( "Reset" ); // Deze heeft een andere naam, omdat deze voor de reset is
uur.addActionListener(this); // Aangeven dat de knoppen een event bevatten
minu.addActionListener(this);
sec.addActionListener(this);
uurminu.addActionListener(this);
uursec.addActionListener(this);
minusec.addActionListener(this);
uurminusec.addActionListener(this);
reset.addActionListener(this);
invoervak1.setBounds( 5, 70, 90, 20 ); // Aangeven welke plek de invoervakken staan + lengte en breedte
invoervak2.setBounds( 102, 70, 90, 20 );
invoervak3.setBounds( 199, 70, 90, 20 );
uitvoervak1.setBounds( 5, 270, 90, 20 ); // Aangeven welke plek de invoervakken staan + lengte en breedte
uitvoervak2.setBounds( 102, 270, 90, 20 );
uitvoervak3.setBounds( 199, 270, 90, 20 );
uur.setBounds( 5, 110, 15, 15 ); // Aangeven welke plek de knoppen hebben + lengte en breedte
minu.setBounds( 5, 127, 15, 15 );
sec.setBounds( 5, 144, 15, 15 );
uurminu.setBounds( 5, 161, 15, 15 );
uursec.setBounds( 5, 178, 15, 15 );
minusec.setBounds( 5, 195, 15, 15 );
uurminusec.setBounds( 5, 212, 15, 15 );
reset.setBounds( 240, 234, 50, 20 );
add( invoervak1 ); // Toevoegen van de invoervakken in de applet
add( invoervak2 );
add( invoervak3 );
add( uitvoervak1 ); // Toevoegen van de uitvoervakken in de applet
add( uitvoervak2 );
add( uitvoervak3 );
add( uur ); // Toevoegen van knoppen in de applet
add( minu );
add( sec );
add( uurminu );
add( uursec );
add( minusec );
add( uurminusec );
add( reset );
}
public void paint( Graphics g ) //Aangeven dat dit het grafische gedeelte is
{
setBackground( Color.gray ); // Achtergrondkleur is grijs
g.drawString( "Voer het aantal uren, minuten en seconden in. Kies", 2, 10 ); // Tekst van handleiding van de applet laten 'tekenenen' + de positie
g.drawString( "de knop waarin uw gewenste uitkomst in eenheden", 2, 22 );
g.drawString( "staat. LET OP! Vul alle invoervakken in en doe dit in", 2, 34 );
g.drawString( "hele getallen en niet meer dan 5 getallen per vak.", 2,46 ); // Einde handleiding
g.drawString( "Uren", 5, 65 ); // Tekst die bij de invoervelden horen ter verduidelijking + positie
g.drawString( "Minuten", 105, 65 );
g.drawString( "Seconden", 200, 65 ); // Einde tekst bij invoervelden
g.drawString( "Uren", 22, 120 ); // Tekst die bij de knoppen horen ter verduidelijking + positie
g.drawString( "Minuten", 22, 137 );
g.drawString( "Seconden", 22, 154 );
g.drawString( "Uren en minuten", 22, 171 );
g.drawString( "Uren en seconden", 22, 188 );
g.drawString( "Minuten en seconden", 22, 205 );
g.drawString( "Uren, minuten en seconden", 22, 222 ); // Einde van tekst die bij de knoppen hoort
g.drawString( "Waarnaar wilt u de gegevens omzetten?", 35, 105 ); // Tekst ter verduidelijking dat iemand een keuze heeft uit de knoppen + positie
g.drawString( "Uitkomst", 120, 245 ); // Tekst ter verduidelijking dat de uitkomst hieronder staat + positie
g.drawString( "Uren", 5, 265 ); // Tekst die bij de uitvoervelden horen ter verduidelijking + positie
g.drawString( "Minuten", 105, 265 );
g.drawString( "Seconden", 200, 265 );
g.drawLine( 0, 51, 300, 51 ); // Lijnen om het geheel overzichtelijker en duidelijker te maken
g.drawLine( 0, 93, 300, 93 );
g.drawLine( 0, 229, 300, 229 ); // Einde lijnen 'tekenenen'
}
int AantalSeconden() // Declareren van methode
{
invoerstring1 = invoervak1.getText(); // Invoertekst uit het invoervak halen
invoerstring2 = invoervak2.getText();
invoerstring3 = invoervak3.getText();
int sec1, sec2, as; // Declareren van de tussenwaardes ( sec1 en sec2) en eindwaarde (as) als int
int uren, minuten, seconden; //Declareren van de invoerteksten die worden omgezet in getallen als
uren = Integer.parseInt( invoerstring1 ); // Zet de invoertekst om in getallen (uren) als int
minuten = Integer.parseInt( invoerstring2 ); // Zet de invoertekst om in getallen (minuten) als int
seconden = Integer.parseInt( invoerstring3 ); // Zet de invoertekst om in getallen (seconden) als int
sec1 = uren * 3600; // De uren worden omgezet in door het te vermenvuldigen met 3600
sec2 = minuten * 60; // De minuten worden omgezet in seconden door het te vermenvuldigen met 60
as = sec1 + sec2 + seconden; // De tussenwaardes in seconden worden opgeteld, zodat je het totaal aantal seconden hebt
return (int)as; // Geeft de eindwaarde
}
public void actionPerformed( ActionEvent e ) // In dit gedeelte worden events uitgevoerd
{
if( e.getSource() == uur ) // Als de knop uur wordt ingedrukt wordt de onderstaande opdracht uitgevoerd
{ // Begin opdracht
int as; // Declareer as als int
double uren; // Declareer uren als double
as=AantalSeconden(); // Oproepen van methode AantalSeconenden en stelt de uitkomstwaarde van de methode gelijk aan as
uren = as * 1.0 / 3600; // Berekening naar uren door as te delen door 3600 sec
uitvoervak1.setText( "" + uren ); // Zet antwoord (uren) in uitvoervak1
uitvoervak2.setText( "" ); // Leeg uitvoervak2
uitvoervak3.setText( "" ); // Leeg uitvoervak3
} // Eind opdracht
if( e.getSource() == minu ) // Als de knop minu wordt ingedrukt wordt de onderstaande opdracht uitgevoerd
{ // Begin opdracht
int as; // Declareer as als int
double minuten; // Declareer minuten als double
as=AantalSeconden(); // Oproepen van methode AantalSeconden en stelt de uitkomstwaarde van de methode gelijk aan as
minuten = as * 1.0 / 60; // Berekening naar minuten door as te delen door 60 sec
uitvoervak1.setText( "" ); // Leeg uitvoervak1
uitvoervak2.setText( "" + minuten ); // Zet waarde minuten in uitvoervak2
uitvoervak3.setText( "" ); // Leeg uitvoervak3
} // Eind opdracht
if( e.getSource() == sec ) // Als de knop sec wordt ingedrukt wordt de onderstaande opdracht uitgevoerd
{ // Begin opdracht
int as, seconden; // Declareer as en seconden als int
as=AantalSeconden(); // Oproepen van methode AantalSeconden en stelt de uitkomstwaarde van de methode gelijk aan as
uitvoervak1.setText( "" ); // Leeg uitvoervak1
uitvoervak2.setText( "" ); // Leeg uitvoervak2
uitvoervak3.setText( "" + as ); // Zet waarde as (aantalseconden) in uitvoervak2
} // Eind opdracht
if( e.getSource() == uurminu ) // Als de knop uurminu wordt ingedrukt wordt de onderstaande opdracht uitgevoerd
{ // Begin opdracht
int as, rest1, uren; // Declareer as, rest1 en uren als int
double minuten; // Declareer minuten als double
as=AantalSeconden(); // Oproepen van methode AantalSeconden en stelt de uitkomstwaarde van de methode gelijk aan as
uren = as / 3600; // Berekening naar uren door as te delen door 3600 sec
rest1 = as % 3600; // Berekening van getal (aantal seconden) dat overblijft nadat het gedeeld is door het aantal HELE uren
minuten = rest1 * 1.0 / 60; // Berekning naar minuten door rest1 te delen door 60
uitvoervak1.setText( "" + uren ); // Zet waarde uren in uitvoervak1
uitvoervak2.setText( "" + minuten ); // Zet waarde minuten in uitvoervak2
uitvoervak3.setText( "" ); // Leeg uitvoervak3
} // Eind opdracht
if( e.getSource() == uursec ) // Als de knop uursec wordt ingedrukt wordt de onderstaande opdracht uitgevoerd
{ // Begin opdracht
int as, seconden, uren; // Declareer as, seconden en uren als int
as=AantalSeconden(); // Oproepen van methode AantalSeconden en stelt de uitkomstwaarde van de methode gelijk aan as
uren = as / 3600; // Berekening naar uren door as te delen door 3600 sec
seconden = as % 3600; // Berekening van aantal seconden dat overblijft nadat het totaal gedeeld is door het aantal HELE uren
uitvoervak1.setText( "" + uren ); // Zet waarde uren in uitvoervak1
uitvoervak2.setText( "" ); // Leeg uitvoervak2
uitvoervak3.setText( "" + seconden ); // Zet waarde seconden in uitvoervak3
} // Eind opdracht
if( e.getSource() == minusec ) // Als de knop minusec wordt ingedrukt wordt de onderstaande opdracht uitgevoerd
{ // Begin opdracht
int as, seconden, minuten; // Declareer as, seconden en minuten als int
as=AantalSeconden(); // Oproepen van methode AantalSeconden en stelt de uitkomstwaarde van de methode gelijk aan as
minuten = as / 60; // Berekening naar minuten door as te delen door 60 sec
seconden = as % 60; // Berekening van aantal seconden dat overblijft nadat het totaal gedeeld is door het aantal HELE minuten
uitvoervak1.setText( "" ); // Leeg uitvoervak1
uitvoervak2.setText( "" + minuten ); // Zet waarde minuten in uitvoervak2
uitvoervak3.setText( "" + seconden ); // Zet waarde seconden in uitvoervak3
} // Eind opdracht
if( e.getSource() == uurminusec ) // Als de knop uurminusec wordt ingedrukt wordt de onderstaande opdracht uitgevoerd
{ // Begin opdracht
int as, rest1, rest2; // Declareer as, rest1 en rest2 als int
int seconden, uren, minuten; // Declareer seconden, uren, minuten als int
as=AantalSeconden(); // Oproepen van methode AantalSeconden en stelt de uitkomstwaarde van de methode gelijk aan as
uren = as /3600; // Berekening naar uren door as te delen door 3600 sec
rest1 = as % 3600; // Berekening van aantal seconden dat overblijft nadat het gedeeld is door het aantal HELE uren
minuten = rest1 / 60; // Berekening naar minuten door as te delen door 3600 sec
rest2 = rest1 % 60; // Berekening van aantal seconden dat overblijft nadat het rest1 gedeeld is door het aantal HELE minuten
seconden = rest2; // Aantal overgebleven seconden (rest2) wordt gelijk gemaakt aan seconden
uitvoervak1.setText( "" + uren ); // Zet waarde uren in uitvoervak1
uitvoervak2.setText( "" + minuten ); // Zet waarde minuten in uitvoervak2
uitvoervak3.setText( "" + seconden ); // Zet waarde seconden in uitvoervak3
} // Eind opdracht
if( e.getSource() == reset ) // Als de knop uurminusec wordt ingedrukt wordt de onderstaande opdracht uitgevoerd
{ // Begin opdracht
uitvoervak1.setText( "" ); // Leeg uitvoervak1
uitvoervak2.setText( "" ); // Leeg uitvoervak2
uitvoervak3.setText( "" ); // Leeg uitvoervak3
invoervak1.setText( "" ); // Leeg invoervak1
invoervak2.setText( "" ); // Leeg invoervak2
invoervak3.setText( "" ); // Leeg invoervak3
} // Eind opdracht
}
}

De code lijkt niet erg overzichtelijk door het kopieren, ik hoop dat het een beetje te lezen valt.

Weet iemand hoe je het in mijn programma moet verwerken en waar?
 
Laatst bewerkt:
Er is java niet echt een goed oplossing voor het controleren of invoer een int is. De truc van parseInt() werkt wel, maar is niet netjes. Exceptions zijn bedoeld voor echt uitzonderlijk gevallen dat er iets fout gaat en niet voor een foute invoer van gebruiken..

Wat soms handiger werkt is gebruik maken van JFormattedTextField, dit is een textField waarbij je kan opgeven wat je mag invoeren.

NumberFormat format = NumberFormat.getNumberInstance();
JFormattedTextField invoerveld = new JFormattedTextField(format);

in het invoer veld mag je nu alleen nog maar nummers invoeren..

succes..
 
Oké ik snap wat je bedoelt:), maar hoe werkt die tekstvak precies?? Hoe verwerk ik die in mijn programma zodat je geen letters in kan typen??:shocked:
 
Hmm, je antwoord doet 2 vragen bij mij opkomen. Ken je eigenlijk Java? En heb je die code zelf geschreven ?

Om je vraag nu te beantwoorden (al is dit eigenlijk basis Java-kennis)

In dit stuk breng je de wijzigingen aan:
Code:
	public void init() // Hier begint het programma mee
	{
		setLayout( null ); // Automische layout wordt uitgezet
		invoervak1 = new TextField(10); // Aangeven dat de invoervelden Textfields zijn
		invoervak2 = new TextField(10);
		invoervak3 = new TextField(10);

Ik heb dit niet uitgetest, maar ik vermoed dat je maar één keer het NumberFormat moet opvragen.

NumberFormat format = NumberFormat.getNumberInstance();

en je invoervakken krijgen dan als constructor "new JFormattedTextField(format)" ipv "new TextField(10)"

Als het aantal kolommen belangrijk is dan je die nog setten met setColumns(int columns)

Dit zou dan moeten uitkomen op:

Code:
	public void init() // Hier begint het programma mee
	{
		setLayout( null ); // Automische layout wordt uitgezet
		NumberFormat format = NumberFormat.getNumberInstance();
		invoervak1 = new JFormattedTextField(format); // Aangeven dat de invoervelden Textfields zijn
		invoervak2 = new JFormattedTextField(format);
		invoervak3 = new JFormattedTextField(format);
		invoervak1.setColumns(10);
		invoervak2.setColumns(10);
		invoervak3.setColumns(10);

Meer info ook te vinden op http://java.sun.com/javase/6/docs/api/javax/swing/JFormattedTextField.html
 
Ja, ik heb de code zelf geschreven en ja ik ken Java, maar ik weet niet hoe ver ik er in ben:confused:. Ik heb een cursus uit een boekje gevolgd en met die grondbeginselen alles gedaan. De reden waarom ik het vraag hoe je het moet verwerken is dat het liefst wat zekerheid heb met nieuwe "begrippen"of hoe je het ook wil noemen.

Maar ik zal wel ff wat dingen proberen en als ik tegen problemen aankom, dan horen jullie het wel.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan