[JAVA] De waarde van een leeg JTextField ( deel 2 )

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Anoniem: 296939

Topicstarter
Dag iedereen,

Ik heb een klein programmatje geschreven, waarbij gebruikers een aantal velden moeten invullen. Wanneer er op de knop geduwd wordt, zal er een berekening gemaakt worden.
Wanneer er in een van de tekstvelden ( || dus ... ) niets is ingevuld, mag het programma niets doen, of liever, een MessageBox geven.

Het probleem is dat ik niet weet hoe ik kan controleren wanneer mijn textfield leeg is ...
Ik vond het volgende topic hier op Tweakers: [JAVA] De waarde van een leeg JTextfield.

Ik moet werken met integers, aangezien het gebruik van getallen noodzakelijk is voor dit programma.

Deze persoon heeft net hetzelfde probleem als mij, en dus probeerde ik alle gegeven oplossingen even uit /// maar zonder resultaat. Wat doe ik in godsnaam verkeerd?

Ik ben ook nog maar net begonnen met progrmammeren in Java, dus het kan zijn dat er gewoon een hele domme fout inzit, in dat geval, excuseer me voor het verspillen van uw tijd.

Laten we over gaan tot de code:

Oorspronkelijke code

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
// Declaratie
        int intHours = Integer.parseInt(jTextField1.getText());
        int intMinutes = Integer.parseInt(jTextField2.getText());
        int intSeconds = Integer.parseInt(jTextField3.getText());
        int intSolution;

        
        
        if ((jTextField1.getText() == "") || (jTextField2.getText() == "") || (jTextField3.getText() == "")){
        
        JOptionPane.showMessageDialog(null, "Foutmelding" );

        
        
        }
        else {
            // Output
            intSolution = ((intHours * 3600 ) + (intMinutes * 60) + intSeconds);

            // Show in label
            jLabel6.setText(intSolution + " seconds.");
        }

    }


Oplossing volgens sig69

Ik moet de methode .equals() gebruiken. Dit las ik ook nog in het handboek dat ik gebruik.

Mijn code ziet er nu als volgt uit:

Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
        
        if ((jTextField1.getText().equals("")) || (jTextField2.getText().equals("")) || (jTextField3.getText().equals(""))){
        
        JOptionPane.showMessageDialog(null, "Foutmelding" );

        
        
        }
        else {
            // Output
            intSolution = ((intHours * 3600 ) + (intMinutes * 60) + intSeconds);

            // Show in label
            jLabel6.setText(intSolution + " seconds.");
        }

    }



Code volgens RedRose

Aan deze oplossing had ik zelf ook even gedacht, maar ook dit was tevergeefs.

Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 if ((jTextField1.getText().length() == 0) || (jTextField2.getText().length() == 0) || (jTextField3.getText().length() == 0)){
        
        JOptionPane.showMessageDialog(null, "Foutmelding" );


        }
        else {
            // Output
            intSolution = ((intHours * 3600 ) + (intMinutes * 60) + intSeconds);

            // Show in label
            jLabel6.setText(intSolution + " seconds.");
        }

    }


En nu? Wat is het probleem of hoe kan ik het oplossen?

Acties:
  • 0 Henk 'm!

  • Sebazzz
  • Registratie: September 2006
  • Laatst online: 15:25

Sebazzz

3dp

Ben je al een debugger ingestapt, en heb je bij 'watch' (zo heet dat in VS, zal ook wel een Netbeans of Eclipse equivalent van zijn) hoe de expressies het doen en wat de huidige waarde is van de variabelen? Of mag je niet een debugger gebruiken van school of waar je het ook voor doet?

[Te koop: 3D printers] [Website] Agile tools: [Return: retrospectives] [Pokertime: planning poker]


Acties:
  • 0 Henk 'm!

Anoniem: 296939

Topicstarter
Sebazzz schreef op zondag 26 juli 2009 @ 18:50:
Ben je al een debugger ingestapt, en heb je bij 'watch' (zo heet dat in VS, zal ook wel een Netbeans of Eclipse equivalent van zijn) hoe de expressies het doen en wat de huidige waarde is van de variabelen? Of mag je niet een debugger gebruiken van school of waar je het ook voor doet?
Ik gebruik NetBeans IDE 6.7 onder Ubuntu ( ik weet niets als dat er iets toe doet :p )
De foutmelding dat ik krijg is de volgende:

NetBeans IDE 6.7 @ Ubuntu 9.04:
Exception in thread "AWT-EventQueue-0" java.lang.NumberFormatException: For input string: ""
        at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
        at java.lang.Integer.parseInt(Integer.java:493)
        at java.lang.Integer.parseInt(Integer.java:514)
        at timeconverter_v1.TimeConverter_v1View.jButton1MouseClicked(TimeConverter_v1View.java:288)
        at timeconverter_v1.TimeConverter_v1View.access$800(TimeConverter_v1View.java:23)
        at timeconverter_v1.TimeConverter_v1View$4.mouseClicked(TimeConverter_v1View.java:158)
        at java.awt.AWTEventMulticaster.mouseClicked(AWTEventMulticaster.java:270)
        at java.awt.Component.processMouseEvent(Component.java:6111)
        at javax.swing.JComponent.processMouseEvent(JComponent.java:3276)
        at java.awt.Component.processEvent(Component.java:5873)
        at java.awt.Container.processEvent(Container.java:2105)
        at java.awt.Component.dispatchEventImpl(Component.java:4469)
        at java.awt.Container.dispatchEventImpl(Container.java:2163)
        at java.awt.Component.dispatchEvent(Component.java:4295)
        at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4461)
        at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4134)
        at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4055)
        at java.awt.Container.dispatchEventImpl(Container.java:2149)
        at java.awt.Window.dispatchEventImpl(Window.java:2478)
        at java.awt.Component.dispatchEvent(Component.java:4295)
        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)


edit:
Deeltje vergeten
De variabelen hebben nog geen waarde ... die worden opgehaald uit het text-vak, maar dit is leeg ...
Ik wil dit gebruiken als fout-opvanging ...

[ Voor 3% gewijzigd door Anoniem: 296939 op 26-07-2009 18:58 ]


Acties:
  • 0 Henk 'm!

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

Snake

Los Angeles, CA, USA

Anoniem: 296939 schreef op zondag 26 juli 2009 @ 18:55:
[...]


Ik gebruik NetBeans IDE 6.7 onder Ubuntu ( ik weet niets als dat er iets toe doet :p )
De foutmelding dat ik krijg is de volgende:

NetBeans IDE 6.7 @ Ubuntu 9.04:
Exception in thread "AWT-EventQueue-0" java.lang.NumberFormatException: For input string: ""
        at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
        at java.lang.Integer.parseInt(Integer.java:493)
        at java.lang.Integer.parseInt(Integer.java:514)
        at timeconverter_v1.TimeConverter_v1View.jButton1MouseClicked(TimeConverter_v1View.java:288)
        at timeconverter_v1.TimeConverter_v1View.access$800(TimeConverter_v1View.java:23)
        at timeconverter_v1.TimeConverter_v1View$4.mouseClicked(TimeConverter_v1View.java:158)
        at java.awt.AWTEventMulticaster.mouseClicked(AWTEventMulticaster.java:270)
        at java.awt.Component.processMouseEvent(Component.java:6111)
        at javax.swing.JComponent.processMouseEvent(JComponent.java:3276)
        at java.awt.Component.processEvent(Component.java:5873)
        at java.awt.Container.processEvent(Container.java:2105)
        at java.awt.Component.dispatchEventImpl(Component.java:4469)
        at java.awt.Container.dispatchEventImpl(Container.java:2163)
        at java.awt.Component.dispatchEvent(Component.java:4295)
        at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4461)
        at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4134)
        at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4055)
        at java.awt.Container.dispatchEventImpl(Container.java:2149)
        at java.awt.Window.dispatchEventImpl(Window.java:2478)
        at java.awt.Component.dispatchEvent(Component.java:4295)
        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)


edit:
Deeltje vergeten
De variabelen hebben nog geen waarde ... die worden opgehaald uit het text-vak, maar dit is leeg ...
Ik wil dit gebruiken als fout-opvanging ...
Volgens je foutmelding geef je een lege string in 1 van de textboxen. Geef je textboxen eens degelijke namen zoals inputTextfield, outputTextfield ipv textfield1,textfield2, daar maak je veel rapper fouten mee.

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


Acties:
  • 0 Henk 'm!

  • Sebazzz
  • Registratie: September 2006
  • Laatst online: 15:25

Sebazzz

3dp

Heb je al geprobeerd om een breakpoint neer te zetten? Misschien is het slim om even de Netbeans handleidingen en tutorials op te zoeken ;)

[Te koop: 3D printers] [Website] Agile tools: [Return: retrospectives] [Pokertime: planning poker]


Acties:
  • 0 Henk 'm!

Anoniem: 296939

Topicstarter
Snake schreef op zondag 26 juli 2009 @ 18:59:
[...]

Volgens je foutmelding geef je een lege string in 1 van de textboxen.
Dat is net wat ik wil. Wanneer de gebruiker niets invult in het tekstvak en op de knop duwt moet er een foutmelding getoond worden.
Snake schreef op zondag 26 juli 2009 @ 18:59:
[...]

Geef je textboxen eens degelijke namen zoals inputTextfield, outputTextfield ipv textfield1,textfield2, daar maak je veel rapper fouten mee.
Deze textboxen bepalen de invoer:
  • JTextField1
  • JTextField2
  • JTextField3
In JLabel6 wordt de uitvoer geplaatst.

Acties:
  • 0 Henk 'm!

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

Snake

Los Angeles, CA, USA

Anoniem: 296939 schreef op zondag 26 juli 2009 @ 19:08:
[...]


Dat is net wat ik wil. Wanneer de gebruiker niets invult in het tekstvak en op de knop duwt moet er een foutmelding getoond worden.
Ahhhh dat verklaard veel:

Integer.Parse gooit een NumberFormatException als je een lege string probeert te parsen.

Wat je dus moet doen is :

Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
int blah1;
int blah2;
int blah3;

try
{
   blah1 = Integer.Parse(JTextField1.getText());
   //... de rest ...
}
catch(NumberFormatException e)
{
   JOptionPane.showMessageDialog(this, "Foutieve string ingevoerd");
}

[ Voor 7% gewijzigd door Snake op 26-07-2009 19:14 ]

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


Acties:
  • 0 Henk 'm!

Anoniem: 296939

Topicstarter
Sebazzz schreef op zondag 26 juli 2009 @ 19:08:
Heb je al geprobeerd om een breakpoint neer te zetten? Misschien is het slim om even de Netbeans handleidingen en tutorials op te zoeken ;)
Ik weet niet goed wat het nut is om hier breakpoints te gaan gebruiken. Het programma werkt wel als alles mooi is ingevuld, maar wanneer er niets is ingevuld, crasht het programma.

Acties:
  • 0 Henk 'm!

Anoniem: 296939

Topicstarter
Ik heb het probleem opgelost :)
Na 3 dagen heb ik ontdekt dat als ik de if-functie een niveau hoger zet ( dus voor de declaratie ), dat alles werkt zoals het zou moeten.

Mijn code ziet er nu als volgt uit:

Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
    private void jButton1MouseClicked(java.awt.event.MouseEvent evt) {                                      
        // TODO add your handling code here:

         if ((jTextField1.getText().equals("")) || (jTextField2.getText().equals("")) || (jTextField3.getText().equals(""))){

             JOptionPane.showMessageDialog(null, "Foutmelding" );       
        
         }
        else {
              // Declaration input
        int intHours = Integer.parseInt(jTextField1.getText());
        int intMinutes = Integer.parseInt(jTextField2.getText());
        int intSeconds = Integer.parseInt(jTextField3.getText());
        int intSolution;
            // Output
            intSolution = ((intHours * 3600 ) + (intMinutes * 60) + intSeconds);

            // Show in label
            jLabel6.setText(intSolution + " seconds.");
        }

    }  

Bedankt voor de hulp!

Acties:
  • 0 Henk 'm!

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

Snake

Los Angeles, CA, USA

Anoniem: 296939 schreef op zondag 26 juli 2009 @ 19:17:
[...]


Ik weet niet goed wat het nut is om hier breakpoints te gaan gebruiken. Het programma werkt wel als alles mooi is ingevuld, maar wanneer er niets is ingevuld, crasht het programma.
Is toch vrij belangrijk om je stack/heap te kunnen bekijken.

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


Acties:
  • 0 Henk 'm!

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

Snake

Los Angeles, CA, USA

Anoniem: 296939 schreef op zondag 26 juli 2009 @ 19:22:
Ik heb het probleem opgelost :)
Na 3 dagen heb ik ontdekt dat als ik de if-functie een niveau hoger zet ( dus voor de declaratie ), dat alles werkt zoals het zou moeten.

Mijn code ziet er nu als volgt uit:

Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
    private void jButton1MouseClicked(java.awt.event.MouseEvent evt) {                                      
        // TODO add your handling code here:

         if ((jTextField1.getText().equals("")) || (jTextField2.getText().equals("")) || (jTextField3.getText().equals(""))){

             JOptionPane.showMessageDialog(null, "Foutmelding" );       
        
         }
        else {
              // Declaration input
        int intHours = Integer.parseInt(jTextField1.getText());
        int intMinutes = Integer.parseInt(jTextField2.getText());
        int intSeconds = Integer.parseInt(jTextField3.getText());
        int intSolution;
            // Output
            intSolution = ((intHours * 3600 ) + (intMinutes * 60) + intSeconds);

            // Show in label
            jLabel6.setText(intSolution + " seconds.");
        }

    }  

Bedankt voor de hulp!
Zeker? Typ eens een random string in in een van de textfields? ;)

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


Acties:
  • 0 Henk 'm!

Anoniem: 296939

Topicstarter
Snake schreef op zondag 26 juli 2009 @ 19:25:
[...]

Zeker? Typ eens een random string in in een van de textfields? ;)
Ohja, ik ben de domme gebruikers die letters gaan intypen vergeten. Ik moet alleen cijfers hebben!!! :p
Maar ik denk dat ik de oplossing al heb.

Volgens mij kan ik dit doen door het gebruik van de .length()
Ik zal even testen.

Acties:
  • 0 Henk 'm!

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

Snake

Los Angeles, CA, USA

Anoniem: 296939 schreef op zondag 26 juli 2009 @ 19:32:
[...]


Ohja, ik ben de domme gebruikers die letters gaan intypen vergeten. Ik moet alleen cijfers hebben!!! :p
Maar ik denk dat ik de oplossing al heb.

Volgens mij kan ik dit doen door het gebruik van de .length()
Ik zal even testen.
Nop dat kan je doen op de manier die ik zeg, of door te loopen door de string en te checken dat ze tussen 0 en 9 liggen :) allemaal verschillende manieren!

Succes!

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


Acties:
  • 0 Henk 'm!

  • Bl4ckviper
  • Registratie: Mei 2002
  • Laatst online: 21-07 20:56

Bl4ckviper

BlaBlaBla

Inderdaad gewoon tekst invoeren ipv nummer ;)

Be fast .... Be furious....


Acties:
  • 0 Henk 'm!

Anoniem: 296939

Topicstarter
Ik heb het opnieuw verbeterd. En wanneer de gebruiker nu iets verkeerd intypt, zal hij ook een foutmelding krijgen.

De code is als volgt:

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
    private void jButton1MouseClicked(java.awt.event.MouseEvent evt) {                                      
       
        // Declaration input

        int intHours;
        int intMinutes;
        int intSeconds;
        int intSolution;
        
        // Delete errors
        try{
        intHours = Integer.parseInt(jTextField1.getText());
        intMinutes = Integer.parseInt(jTextField2.getText());
        intSeconds = Integer.parseInt(jTextField3.getText());

        // Output
            intSolution = ((intHours * 3600 ) + (intMinutes * 60) + intSeconds);

            // Show in label
            jLabel6.setText(intSolution + " seconds.");
        }

        catch(NumberFormatException e){
        JOptionPane.showMessageDialog(null, "Please, enter the correct values in the textfields!" );
        }
        
            
        

    }            

Acties:
  • 0 Henk 'm!

  • rapture
  • Registratie: Februari 2004
  • Laatst online: 11:16

rapture

Zelfs daar netwerken?

code:
1
jTextField1.getText() == ""

Dit mag je niet doen omdat je de referentie naar een string-object probeert te vergelijken met een referentie naar een string-object met de inhoud "". Referenties naar 2 verschillende objecten vergelijken zal geen true geven. Je krijgt een true als de 2 referenties naar 1 dezelfde object verwijst.

code:
1
jTextField1.getText().equals("")

Hier vraag je om de inhoud van een string-object te vergelijken met een lege string.

code:
1
jTextField1.getText().length() == 0

Lengte van een string (integer) vergelijken met een primitieve met waarde 0 kan wel. Er wordt hier met de waarden van primitieven vergeleken ipv de referenties naar objecten.
Anoniem: 296939 schreef op zondag 26 juli 2009 @ 19:22:
Ik heb het probleem opgelost :)
Na 3 dagen heb ik ontdekt dat als ik de if-functie een niveau hoger zet ( dus voor de declaratie ), dat alles werkt zoals het zou moeten.
Niet zomaar de declaratie. Je probeerde eerst de strings tot numbers te parsen, daarna ga je eens kijken of er lege strings zijn. Het programma botst dus eerst tegen een lege string tijdens het parsen en je komt niet eens bij de controle op lege strings.

Het gemakkelijkste is de exception opvangen. Try de code, catch de NumberFormatException en voer wat code uit als je zo'n exception te pakken krijgt.

Acties:
  • 0 Henk 'm!

Anoniem: 296939

Topicstarter
rapture schreef op zondag 26 juli 2009 @ 19:56:
code:
1
jTextField1.getText() == ""

Dit mag je niet doen omdat je de referentie naar een string-object probeert te vergelijken met een referentie naar een string-object met de inhoud "". Referenties naar 2 verschillende objecten vergelijken zal geen true geven. Je krijgt een true als de 2 referenties naar 1 dezelfde object verwijst.

code:
1
jTextField1.getText().equals("")

Hier vraag je om de inhoud van een string-object te vergelijken met een lege string.

code:
1
jTextField1.getText().length() == 0

Lengte van een string (integer) vergelijken met een primitieve met waarde 0 kan wel. Er wordt hier met de waarden van primitieven vergeleken ipv de referenties naar objecten.


[...]
Niet zomaar de declaratie. Je probeerde eerst de strings tot numbers te parsen, daarna ga je eens kijken of er lege strings zijn. Het programma botst dus eerst tegen een lege string tijdens het parsen en je komt niet eens bij de controle op lege strings.

Het gemakkelijkste is de exception opvangen. Try de code, catch de NumberFormatException en voer wat code uit als je zo'n exception te pakken krijgt.
Dus het probleem is nog niet opgelost?

Acties:
  • 0 Henk 'm!

  • Mammon
  • Registratie: December 2006
  • Laatst online: 04-02 19:19
rapture schreef op zondag 26 juli 2009 @ 19:56:
code:
1
jTextField1.getText().length() == 0

Lengte van een string (integer) vergelijken met een primitieve met waarde 0 kan wel. Er wordt hier met de waarden van primitieven vergeleken ipv de referenties naar objecten.
Doe het dan zo. Voorkomt weer dat je de pleuris zoekt naar een foutje omdat er om de 1 of andere reden een spatie in staat :/ .
Java:
1
jTextField1.getText().trim().length() == 0

Acties:
  • 0 Henk 'm!

  • TeeDee
  • Registratie: Februari 2001
  • Laatst online: 21-07 23:15

TeeDee

CQB 241

Je zou van te voren ook kunnen controleren of de ingevoerde waarde daadwerkelijk numeriek is. Het mooiste zou zijn als Java ook iets van een int.TryParse heeft, maar die ben ik nog niet tegengekomen. In org.apache.commons.lang.math.NumberUtils zit wel zoiets (isNumeric). Deze geeft true of false terug.

Persoonlijk vind ik dat netter. Zomaar met een exception gaan gooien terwijl dat imo niet nodig is...

Heart..pumps blood.Has nothing to do with emotion! Bored


Acties:
  • 0 Henk 'm!

  • Nick_S
  • Registratie: Juni 2003
  • Laatst online: 19-07 01:17

Nick_S

++?????++ Out of Cheese Error

Ik gebruik altijd commons-lang.

code:
1
2
3
4
5
6
7
8
9
10
11
12
String bla = ...;
if ("".equals(bla)) { ... }
vs.
if (StringUtils.isEmpty(bla)) { ...}

if (bla != null && bla.trim.equals("")) { ... }
vs.
if (StringUtils.isBlank(bla)) { ... }

String g = bla == null ? null : bla.trim();
vs.
String g. StringUtils.trim(bla);


Het wordt duidelijker wat de bedoeling is, en je maakt minder fouten. Hierboven zijn nog de veilige versies, als je per ongeluk
code:
1
bla.equals("")
gebruikt, kan het alsnog mis gaan.

Ook de andere classes in commons-lang kun je niet vroeg genoeg gaan gebruiken. Wel elke eerste keer even de code erachter bekijken. Dan weet je wat er gebeurt. Maar je maakt daar zo snel fouten in.

@hieronder

Dat kun je zelf schrijven, of je kan NumberUtils.isDigits pakken. Nog beter is NumberUtils.isNumberic, dan vang je ook min getallen af, hexadecimale getallen (0x5), etc.

Dat vind ik het mooie aan Java, de hoeveelheid frameworks. Zolang je maar rekening houdt met de licentie is er niks aan de hand. Alles onder de Apache Software Licentie is veilig. Verder hangt het van je eigen licentie af. Ik maak een hoop maatwerk voor de klant (detachering), zodat de code toch bij hun en alleen bij hun in handen komt. Dan is eigenlijk alles veilig, zelfs GPL.

[ Voor 28% gewijzigd door Nick_S op 29-07-2009 23:28 ]

'Nae King! Nae quin! Nae Laird! Nae master! We willna' be fooled agin!'


Acties:
  • 0 Henk 'm!

  • Twazerty
  • Registratie: April 2006
  • Laatst online: 19:30

Twazerty

AVCHDCoder developer

Als je een methode schrijft die controleerd of de ingevoerde waarde cijfers zijn dan maakt dat je leven een stuk makkelijker.

Met een loopje ga je een voor een de characters af. Character kent een methode om te checken of het een cijfer is. ( isDigit() )

Ruisende versterker: schakel je subwoofer in.


Acties:
  • 0 Henk 'm!

Anoniem: 280479

TeeDee schreef op woensdag 29 juli 2009 @ 23:02:
Je zou van te voren ook kunnen controleren of de ingevoerde waarde daadwerkelijk numeriek is. Het mooiste zou zijn als Java ook iets van een int.TryParse heeft, maar die ben ik nog niet tegengekomen. In org.apache.commons.lang.math.NumberUtils zit wel zoiets (isNumeric). Deze geeft true of false terug.

Persoonlijk vind ik dat netter. Zomaar met een exception gaan gooien terwijl dat imo niet nodig is...
Is niets mis met het gooien van een exception en in deze situatie wordt het ook netjes afgehandeld.
Met de huidige oplossing is niets mis. Bij alle verkeerde invoer wordt netjes een foutmelding gegeven waarnaar de gebruiker de invoer opnieuw kan invoeren.

Acties:
  • 0 Henk 'm!

  • Mr_Light
  • Registratie: Maart 2006
  • Niet online

Mr_Light

Zo-i-Zo de gekste.

Het is bedroevend dat niemand hier er even op wijst dat JFormattedTextFields en consorten bestaan :'(

http://java.sun.com/docs/...s/formattedtextfield.html

Je kan de boel ook nog in mekaar haken en zorgen dat de knop disabled is zo lang er geen valide waarde in the velden staan.

IceManX schreef: sowieso


Acties:
  • 0 Henk 'm!

  • Joshua
  • Registratie: Juli 2005
  • Laatst online: 04-07 23:28
Ikzelf gebruik zoiets om te kijken of de tekst die ingevoerd is een getal is ja/nee:

InputController:
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
32
33
34
35
package controller;

import javax.swing.text.AttributeSet;
import javax.swing.text.BadLocationException;
import javax.swing.text.PlainDocument;

public class InputController extends PlainDocument {
    private String regex;
    private Integer max;

    public InputController(int max, String regex) {
        super();
        this.regex = regex;
        this.max = max;
    }
    
    @Override
    public void insertString(int offset, String str, AttributeSet attr) throws BadLocationException {

        if (!str.matches(regex)) {
            return;
        }

        if (max != null) {
            if (!str.matches(regex)) {
                return;
            }
            if ((getLength() + str.length()) <= max) {
                super.insertString(offset, str, attr);
            }
        }

    }

}


En dan mijn JTextField:
Java:
1
2
JTextField textfield = new JTextField();
textfield.setDocument(new InputController(4, "[0-9]");


[0-9] kun je dus ook vervangen door [A-z] etc. (regular expression).

Verder zou je natuurlijk ook nog een focuslistener kunnen gebruiken die controleert of de ingevoerde gegevens juist zijn en zo ja/nee de knop enablen/disablen.

[ Voor 6% gewijzigd door Joshua op 30-07-2009 19:56 ]


Acties:
  • 0 Henk 'm!

  • TeeDee
  • Registratie: Februari 2001
  • Laatst online: 21-07 23:15

TeeDee

CQB 241

Anoniem: 280479 schreef op donderdag 30 juli 2009 @ 09:56:
[...]
Is niets mis met het gooien van een exception en in deze situatie wordt het ook netjes afgehandeld.
Met de huidige oplossing is niets mis. Bij alle verkeerde invoer wordt netjes een foutmelding gegeven waarnaar de gebruiker de invoer opnieuw kan invoeren.
Een exception gooien is niets mis mee. Maar zoals Mr_Light zegt kan je zoiets beter bij de userinput doen (en misschien bedroevend, maar Java is not my cup of tea ;)).

Een regex daarentegen gebruiken is misschien wel helemaal de andere kant op.

Heart..pumps blood.Has nothing to do with emotion! Bored


Acties:
  • 0 Henk 'm!

  • Mr_Light
  • Registratie: Maart 2006
  • Niet online

Mr_Light

Zo-i-Zo de gekste.

TeeDee schreef op donderdag 30 juli 2009 @ 20:34:
(en misschien bedroevend, maar Java is not my cup of tea ;)).
oh ik reken het niemand aan hoor, ik vergeet ook regelmatig handige dingen. Maar gezien hoe lang het topic loopt en wie het allemaal gezien heeft.. Soms kan een simpele pointer zo veel tijd schelen.

IceManX schreef: sowieso


Acties:
  • 0 Henk 'm!

  • Remus
  • Registratie: Juli 2000
  • Laatst online: 15-08-2021
Mr_Light schreef op vrijdag 31 juli 2009 @ 11:32:
[...]


oh ik reken het niemand aan hoor, ik vergeet ook regelmatig handige dingen. Maar gezien hoe lang het topic loopt en wie het allemaal gezien heeft.. Soms kan een simpele pointer zo veel tijd schelen.
Ik denk eigenlijk dat veel van de mensen hier die met Java werken, over het algemeen niet zoveel Swing/GUI dingen doen en dat dus simpelweg vergeten (of niet eens weten).

Acties:
  • 0 Henk 'm!

Anoniem: 296939

Topicstarter
EDIT: Laat maar, ik heb het al gevonden ...

[ Voor 88% gewijzigd door Anoniem: 296939 op 01-08-2009 18:45 ]

Pagina: 1