1 van 1

Java applet - switch - help!

Geplaatst: wo 16 apr 2014, 08:07
door JobdGraaf
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

Re: Java applet - switch - help!

Geplaatst: wo 16 apr 2014, 11:08
door Math-E-Mad-X
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];

Re: Java applet - switch - help!

Geplaatst: wo 16 apr 2014, 11:16
door Math-E-Mad-X
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.

Re: Java applet - switch - help!

Geplaatst: wo 16 apr 2014, 19:15
door JobdGraaf
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

Re: Java applet - switch - help!

Geplaatst: do 17 apr 2014, 02:27
door Benm
Je zult die numberField[] array moeten definieren met alle 25 velden - dat kan uiteraard eenvoudig met een for loopje oid.

Re: Java applet - switch - help!

Geplaatst: do 17 apr 2014, 09:40
door Xenion
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");

Re: Java applet - switch - help!

Geplaatst: do 17 apr 2014, 16:43
door JobdGraaf
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?

Re: Java applet - switch - help!

Geplaatst: vr 18 apr 2014, 02:35
door Benm
heb je die numberField array wel gedeclareerd?

Re: Java applet - switch - help!

Geplaatst: vr 18 apr 2014, 08:20
door JobdGraaf
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.

Re: Java applet - switch - help!

Geplaatst: vr 18 apr 2014, 10:13
door Xenion
 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);