JobdGraaf
Artikelen: 0
Berichten: 7
Lid geworden op: ma 14 apr 2014, 17:13

Java applet - switch - help!

Goedendag!
 
Ik ben bezig met een informatica PO, waarbij we een spelletje moeten maken in een java applet. Hierbij moet toeval een rol spelen. Denk aan dobbelstenen bijvoorbeeld.
Ik ben al een tijdje bezig met Ganzenbord, en het lukt al aardig. Ik loop nu alleen een beetje vast al wil ik de switch gaan gebruiken.
 
Ik wil de positie aangeven op het bord door een numberField  een kleurtje te geven. Maar als de positie niet gelijk is aan het nummer van het numberField moet hij weer wit worden. Dit is momenteel de code die ik heb geschreven voor de switch:
 
 
switch(positie) {
      case 1: numberField1.setBackground(Color.ORANGE); break;
      case 2: numberField2.setBackground(Color.ORANGE); break;
      case 3: numberField3.setBackground(Color.ORANGE); break;
      case 4: numberField4.setBackground(Color.ORANGE); break;
      case 5: numberField5.setBackground(Color.ORANGE); break;
      case 6: numberField6.setBackground(Color.ORANGE); break;
      case 7: numberField7.setBackground(Color.ORANGE); break;
      case 8: numberField8.setBackground(Color.ORANGE); break;
      case 9: numberField9.setBackground(Color.ORANGE); break;
      case 10: numberField10.setBackground(Color.ORANGE); break;
      case 11: numberField11.setBackground(Color.ORANGE); break;
      case 12: numberField12.setBackground(Color.ORANGE); break;
      case 13: numberField13.setBackground(Color.ORANGE); break;
      case 14: numberField14.setBackground(Color.ORANGE); break;
      case 15: numberField15.setBackground(Color.ORANGE); break;
      case 16: numberField16.setBackground(Color.ORANGE); break;
      case 17: numberField17.setBackground(Color.ORANGE); break;
      case 18: numberField18.setBackground(Color.ORANGE); break;
      case 19: numberField19.setBackground(Color.ORANGE); break;
      case 20: numberField20.setBackground(Color.ORANGE); break;
      case 21: numberField21.setBackground(Color.ORANGE); break;
      case 22: numberField22.setBackground(Color.ORANGE); break;
      case 23: numberField23.setBackground(Color.ORANGE); break;
      case 24: numberField24.setBackground(Color.ORANGE); break;
      case 25: numberField25.setBackground(Color.GREEN); break;
      default: numberField1.setBackground(Color.WHITE);
               
   } 
 
Het probleem is dat ik wil bij alle veldjes dat het weer de witte kleur krijgt indien positie ongelijk is aan het numberField. Ten eerste vraag ik me af hoe ik dit op alle velden toepas, zonder er veel extra regels aan te hoeven besteden. Ten tweede werkt de default die ik momenteel gebruik niet. numberField1 blijft namelijk oranje als postie ongelijk is aan veld.
 
 
Ik hoop dat jullie mij zouden kunnen helpen met een beetje java ervaring.
 
Vriendelijke groet,
Job
Gebruikersavatar
Math-E-Mad-X
Artikelen: 0
Berichten: 2.907
Lid geworden op: wo 13 sep 2006, 17:31

Re: Java applet - switch - help!

Je moet een variabele aanmaken waarin je opslaat welk numberField je voor het laatst oranje had gemaakt. Elke keer dat je een nieuw veld oranje maakt, maak je eerst de vorige wit.

<div style="margin:0px;color:rgb(40,40,40);font-family:helvetica, arial, sans-serif;font-size:11.818181991577148px;">

Code: Selecteer alles


if(previousColoredNumberField != null){
   previousColoredNumberField.setBackground(Color.WHITE);  
}

switch(positie) {
      case 1: 
           numberField1.setBackground(Color.ORANGE);
           previousColoredNumberField  = numberField1;
           break;
      case 2:
           numberField2.setBackground(Color.ORANGE);
           previousColoredNumberField  = numberField2;
           break;
     case 3:
           etcetera...
}
 

Overigens, nog een (offtopic) tip: het is veel handiger om een array van NumberField objecten te maken dan om 25 verschillende variabelen te gebruiken. Dan kun je die enorme switch/case vervangen door een paar regels:

Code: Selecteer alles

numberField[positie].setBackGround(Color.Orange);
previousColoredNumberField = numberField[positie];
while(true){ Thread.sleep(60*1000/180); bang_bassdrum(); }
Gebruikersavatar
Math-E-Mad-X
Artikelen: 0
Berichten: 2.907
Lid geworden op: wo 13 sep 2006, 17:31

Re: Java applet - switch - help!

JobdGraaf schreef: Ten tweede werkt de default die ik momenteel gebruik niet. numberField1 blijft namelijk oranje als postie ongelijk is aan veld.
 
"default" is het geval dat de positie niet gelijk is aan één van je cases. Bijvoorbeeld wanneer positie gelijk is aan 100.
 
Wanneer positie een getal tussen 1 en 25 is, zal de bijbehorende case uitgevoerd worden, en wordt de default dus niet uitgevoerd.
while(true){ Thread.sleep(60*1000/180); bang_bassdrum(); }
JobdGraaf
Artikelen: 0
Berichten: 7
Lid geworden op: ma 14 apr 2014, 17:13

Re: Java applet - switch - help!

Hartelijk bedankt voor je hulp, alleen snap ik er niet heel veel van wat je precies bedoelt. Mijn java ervaring is namelijk niet zo heel breed.
 
Math-E-Mad-X schreef: Overigens, nog een (offtopic) tip: het is veel handiger om een array van NumberField objecten te maken dan om 25 verschillende variabelen te gebruiken. Dan kun je die enorme switch/case vervangen door een paar regels:

Code: Selecteer alles

numberField[positie].setBackGround(Color.Orange);
previousColoredNumberField = numberField[positie];
 
Ik vroeg me af hoe deze array zou functioneren, en wat ik er allemaal bij moet schrijven.
De 2 regels die jij gaf, werken niet als ik ze in mijn code plak. Ik hoop dat je mij hiermee zou kunnen helpen. 
 
Job
Benm
Artikelen: 0
Berichten: 12.262
Lid geworden op: za 21 okt 2006, 01:23

Re: Java applet - switch - help!

Je zult die numberField[] array moeten definieren met alle 25 velden - dat kan uiteraard eenvoudig met een for loopje oid.
Victory through technology
Gebruikersavatar
Xenion
Artikelen: 0
Berichten: 2.609
Lid geworden op: za 21 jun 2008, 10:41

Re: Java applet - switch - help!

Ik weet niet of dit in Java kan, maar in C# geloof ik dat je iets kan doen als form.getObject("name") en dan wordt in alle formobjecten gezocht en het object met naam "name" teruggegeven.
 
Op die manier kan je jouw probleem iets eleganter aanpakken met 1 lijn die er dan ongeveer zo zou uitzien:
(Forms.Label)main.getObject("numberField"+nr).setBackgroundColor("orange");
JobdGraaf
Artikelen: 0
Berichten: 7
Lid geworden op: ma 14 apr 2014, 17:13

Re: Java applet - switch - help!

Okee bedankt voor jullie tips!
Alleen er worden soms tips gegeven waarin stof staat dat wij nog niet hebben gehad, en dat wij dus ook niet mogen gebruiken in het po. :(
 
Ik ben een beetje met het idee van Math-E-Mad gaan werken en ben bij dit gekomen:
 
 
int laatstepositie = Integer.parseInt(positieVeld2.getText());
numberField(laatstepositie).setBackground(Color.WHITE);
 
Hierbij maakt hij het vorige veld weer wit. Ik heb namelijk de code een kleine wijziging gegeven waardoor hij alles weer wit maakt. Dit geeft een probleem nu ik de code voor de 2e speler heb geschreven.
Het probleem met de code die ik hierboven heb geciteerd, is dat dit een ongeldige manier van schrijven is. Zegmaar dat numberField(laatstepositie) een probleem geeft.
 
Hierbij krijg ik de volgende code;
 
Compiliere "F:\School\Informatica\PO 2 - JAVA\Ganzenbord.java" mit Java-Compiler
Ganzenbord.java:450:5: error: cannot find symbol
    numberField(laatstepositie).setBackground(Color.WHITE);
    ^
  symbol:   method numberField(int)
  location: class Ganzenbord
1 error
 
 
Weten jullie hoe ik dit oplos?
Benm
Artikelen: 0
Berichten: 12.262
Lid geworden op: za 21 okt 2006, 01:23

Re: Java applet - switch - help!

heb je die numberField array wel gedeclareerd?
Victory through technology
JobdGraaf
Artikelen: 0
Berichten: 7
Lid geworden op: ma 14 apr 2014, 17:13

Re: Java applet - switch - help!

Benm schreef: heb je die numberField array wel gedeclareerd?
Ik heb niet gewerkt met een array. Ik heb het switch system gebruikt voor de kleur van het vakje, maar geen array.
Gebruikersavatar
Xenion
Artikelen: 0
Berichten: 2.609
Lid geworden op: za 21 jun 2008, 10:41

Re: Java applet - switch - help!

 numberField(laatstepositie) is geen geldige uitdrukking. Als je het wil doen zoals Math-E-Mad-X het voorstelde moet je een array gebruiken en dan gebruik je vierkante haakjes ipv ronde.
 
Het gemakkelijkste dat je volgens mij kan doen met de Java ervaring die je momenteel hebt is het volgende:
Je maakt een method kleurVakje die er als volgt uitziet:

Code: Selecteer alles

kleurVakje(int positie, Color kleur){
  // hier de code om numberField met nummer "positie" de kleur "kleur" te geven
  // het is niet erg elegant, maar die switch die je al had doet de job (na enkele kleine aanpassingen)
  switch(positie){
  ...
  }
}
En om dan de kleur van een vakje te veranderen doe je:

Code: Selecteer alles

kleurVakje(oudepositie, wit);
kleurVakje(nieuwepositie, oranje);

Terug naar “Informatica en programmeren”