Toon posts:

[Java] hoe kan ik positie van drawString variabel houden?

Pagina: 1
Acties:

Verwijderd

Topicstarter
Hoi,
ik ben bezig een applet te schrijven voor school waarmee ik een door een user ingevoerde postcode kan controleren.
bedoeling is dat die postcode door 9 checkpoints gaat en dat daarna de eventuele fouten in een applet verschijnen.
de controle sessie gaat goed, maar ik heb nergens een antwoord kunnen vinden op mijn vraag :?
Ik wil namelijk ervoor zorgen dat ik bij een drawString de verticale positie variabel hou. De tekst die verschijnt is namelijk afhankelijk van de hoeveelheid fouten die mijn programmaatje eruit haalt.

Zeg maar als de ingevoerde postcode 3 fouten bevat, dan laat de applet die 3 fouten op 3 regels zien en daaronder de tekst: "na eerste controle van postcode zijn er 3 fouten gevonden"

Je begrijpt dat die laatste regel dus van positie verschilt, afhankelijk van hoeveel regels daarboven weergegeven worden.

Ook wil ik graag weten hoe ik die gevonden fouten kan nummeren, dus foutmelding 1 op regel 1, foutmelding 2 op regel 2, enz...

Alvast bedankt

Verwijderd

Je kan eenvoudigweg op de 11e regel je resultaat schrijven en de 9 eerste gebruiken om je fouten 1 voor 1 te plaatsen :)

Als je het perse variabel wilt dan declareer je gewoon een integer die je ophoogt na elke doorloop. Je kan die positie dan doorgeven met als y waarde dan bvb.
100 + i * 30

waarbij 100 dan de afstand is van de bovenzijde en 30 de hoogte van een regel. De i hoog je dan na elke drawString op en klaar is kees.

  • Keeper
  • Registratie: Juni 2001
  • Niet online

Keeper

<3 Ruby

:D je zit zeker (ook) op de UvA.

Je kan het best een variabele ('foutmelding' ofzo) nemen die per geconstateerde fout optelt (althans, zo werd het in het HC vanmiddag verteld).

Dus

if (geconstateerde fout)
foutmelding = foutmelding + 1

print (+ foutmelding "de fout is")

En dat dan voor elke fout verder doen. Zet die variabele voor het hele if-verhaal wel ff op 0 eerst. Voor als er geen fouten zijn.

[ Voor 10% gewijzigd door Keeper op 28-01-2003 00:25 ]


  • Soultaker
  • Registratie: September 2000
  • Laatst online: 24-08 23:08
Kun je niet beter een listbox met foutmeldingen vullen, zodat je er zonder belachelijk veel gedoe normaal in kan scrollen, enzovoorts?

Verwijderd

Topicstarter
dat van de foutmeldingen heb ik wel...
maar bij mijn drawString weet ik dus niet van te voren welke foutmelding er zal verschijnen. Ik moet die foutmeldingen die weergegeven worden dus ook nummeren, maar hoe? Ik bedoel...misschien is die hele postcode wel goed, behalve dan de laatste hoofdletter...hoe zorg ik ervoor dat die niet helemaal onderaan ergens beland, dus met een hele lap witte tekst tussen mijn ingevoerde postcode en mijn eerste (en enige foutmelding)?
Dat zal namelijk gebueren als ik die foutmeldingen van te voren een regelnummer geef

  • Keeper
  • Registratie: Juni 2001
  • Niet online

Keeper

<3 Ruby

Verwijderd schreef op 28 januari 2003 @ 00:39:
hoe zorg ik ervoor dat die niet helemaal onderaan ergens beland, dus met een hele lap witte tekst tussen mijn ingevoerde postcode en mijn eerste (en enige foutmelding)?
Lees mijn post nog eens goed :).

Je moet gewoon een setje if-statements maken voor elke mogelijke fout. Als een fout geconstateerd is laat je de variabele vpos een x aantal verhogen (20 bijvoorbeeld). Als een fout geconstateerd wordt, wordt die variabele opgehoogd en de betreffende error op die lijn gedumpt.

Je hebt dus bijvoorbeeld 4 mogelijkheden die fout kunnen zijn in die postcode (in werkelijkheid zijn het er 8 of 9, maar het gaat om het idee).

code:
1
2
3
4
5
6
7
8
9
10
11
12
if fout1 
   vpos + 20
   drawString fout1
if fout2 
   vpos + 20
   drawString fout2
if fout3
   vpos + 20
   drawString fout3
if fout4 
   vpos + 20
   drawString fout4


Je geeft dan die postcode in en het programma gaat langs het rijtje if-statements.
Stel in je invoer gebeurt een fout2 en een fout3. Het programma loopt dan langs de if-jes en ziet dat fout1 niet voorkomt. vpos verandert niet. fout2 komt echter wel voor, dus het programma verhoogt vpos met 20 en pleur de error-tekst voor fout2 neer. Dan ziet het programma dat fout3 ook voorkomt, verhoogt vpos weer met 20 en pleurt dan de error-tekst voor fout3 neer. Als laatste loopt hij langs de check voor fout4 en ziet hij dat dat type fout niet voorkomt. vpos wordt dus verder niet verhoogd.

Output: netjes 2 regels onder elkaar met fout2 en fout3 er in.

[ Voor 2% gewijzigd door Keeper op 28-01-2003 01:08 . Reden: duidelijker ]


  • Soultaker
  • Registratie: September 2000
  • Laatst online: 24-08 23:08
Keeper schreef op 28 January 2003 @ 01:08:
Je moet gewoon een setje if-statements maken voor elke mogelijke fout. Als een fout geconstateerd is laat je de variabele vpos een x aantal verhogen (20 bijvoorbeeld). Als een fout geconstateerd wordt, wordt die variabele opgehoogd en de betreffende error op die lijn gedumpt.
Met alle respect, maar zodra je al die dubbele code ziet, moet er toch een belletje gaan rinkelen dat je niet goed bezig bent? Als er nu eens 50 mogelijke fouten waren, en ik zou besluiten om niet 20 maar 15 punten witruimte aan te houden, dan moet ik dus 50 regels aan gaan zitten passen? En als ik bij nader inzien toch liever een listbox gebruik, weer? Dat is dus niet handig.

Ik zou dus willen suggereren om de foutmeldingen in een container klasse (een Vector volstaat) te stoppen en ze op het eind pas te gaan weergeven (en nummeren). Ik zou ze zelf uiteindelijk in een listbox stoppen, maar als je ze op het scherm wilt tekenen kan dat ook. Dat maakt eigenlijk weinig meer uit, wanneer je de code die de foutmeldingen genereert en de code die ze weergeeft netjes gescheiden hebt. Je hoeft slechts een enkele statement binnen een for-lus aan te passen om er iets anders mee te doen.

  • Keeper
  • Registratie: Juni 2001
  • Niet online

Keeper

<3 Ruby

Soultaker schreef op 28 January 2003 @ 01:26:
Met alle respect, maar zodra je al die dubbele code ziet, moet er toch een belletje gaan rinkelen dat je niet goed bezig bent? Als er nu eens 50 mogelijke fouten waren, en ik zou besluiten om niet 20 maar 15 punten witruimte aan te houden, dan moet ik dus 50 regels aan gaan zitten passen? En als ik bij nader inzien toch liever een listbox gebruik, weer? Dat is dus niet handig.
Ow, ik geloof je meteen. Maar ik moet toevallig dezelfde opdracht maken deze week en gezien de nick van de topicstarter zit hij bij mij op de UvA dezelfde cursus inleidend programmeren in Java te volgen. En wat jij nu noemt, hebben we nog niet gehad.
En wat ik noem wel. Dus dan lijkt me onder deze omstandigheden mijn suggestie dan ook de beste oplossing :).

[ Voor 2% gewijzigd door Keeper op 28-01-2003 01:36 . Reden: Bah. ]


  • Erik Jan
  • Registratie: Juni 1999
  • Niet online

Erik Jan

Langzaam en zeker

edit:
Keeper is me voor

offtopic:
Soultaker: In een normaal geval zou inderdaad gelijk hebben. Ik als (waarschijnlijk?) studie en jaargenoot van de voor mij onbekende topicstarter zeg echter: doe geen moeite. In de opdrachten staat precies beschreven op welke manier het antwoord moet worden gegeven. M.a.w. ze hebben je nog niets anders dan drawString() geleerd en die methode moet ook gebruikt worden in de source. De oplossing wordt hierboven ook al gegeven, als de topicstarter die hanteert krijgt hij/zij gegarandeerd een 10 :-)

Er staat zelfs een voorbeeld class online :D

[ Voor 6% gewijzigd door Erik Jan op 28-01-2003 01:38 ]

This can no longer be ignored.


  • Soultaker
  • Registratie: September 2000
  • Laatst online: 24-08 23:08
Weet je dat je Java code kunt decompileren, van .class files naar .java files? :P

Maar ik zal dan maar geen moeite doen. Wel een beetje vreemd onderwijs, als ze je eerst 'leren' hoe je applets programmeert, voordat ze je vertellen over container klassen.

Zelf doen ze het trouwens iets geavanceerder; als het scherm opnieuw getekend moet worden (als ik er een ander venster overheensleep of het venster minimaliseer en weer herstel, bijvoorbeeld) wordt de tekst wel opnieuw getekend, namelijk. Of vind de controle dan opnieuw plaats? Dat zou wel erg stom zijn.

edit: En inderdaad, het is erg stom! Dat is trouwens niet het enige. Neem alsjeblieft niet deze code als voorbeeld; zoek liever een goed (doch veel te lang) topic van mbravenboer ofzo op. Ik zou graag de code posten en aanwijzen wat er allemaal mis mee is, maar dat is uit didactisch oogpunt misschien niet zo verstandig.

edit2: Ook leuk dat 'ie crasht met een null pointer exception als ik de invoerdialoog cancel.

[ Voor 34% gewijzigd door Soultaker op 28-01-2003 01:58 ]


Verwijderd

Topicstarter
Bedankt allemaal...ik heb er een nachtje over geslapen en ben vanochtend verder gegaan...en het is zowaar gelukt!!!

ik had mijn vpos niet goed staan....maar hij doet het nu heel erg netjes...voelt toch wel goed...
trouwens Keeper...ik ben geen 'hij' :P
Pagina: 1