Springen naar inhoud

Java applet - switch - help!


  • Log in om te kunnen reageren

#1

JobdGraaf

    JobdGraaf


  • 0 - 25 berichten
  • 7 berichten
  • Gebruiker

Geplaatst op 16 april 2014 - 07:07

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


Dit forum kan gratis blijven vanwege banners als deze. Door te registeren zal de onderstaande banner overigens verdwijnen.

#2

Math-E-Mad-X

    Math-E-Mad-X


  • >1k berichten
  • 2383 berichten
  • Ervaren gebruiker

Geplaatst op 16 april 2014 - 10:08

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.



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:

numberField[positie].setBackGround(Color.Orange);
previousColoredNumberField = numberField[positie];

Veranderd door Math-E-Mad-X, 16 april 2014 - 10:10

while(true){ Thread.sleep(60*1000/180); bang_bassdrum(); }

#3

Math-E-Mad-X

    Math-E-Mad-X


  • >1k berichten
  • 2383 berichten
  • Ervaren gebruiker

Geplaatst op 16 april 2014 - 10:16

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(); }

#4

JobdGraaf

    JobdGraaf


  • 0 - 25 berichten
  • 7 berichten
  • Gebruiker

Geplaatst op 16 april 2014 - 18:15

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.

 

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:

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


#5

Benm

    Benm


  • >5k berichten
  • 8792 berichten
  • VIP

Geplaatst op 17 april 2014 - 01:27

Je zult die numberField[] array moeten definieren met alle 25 velden - dat kan uiteraard eenvoudig met een for loopje oid.
Victory through technology

#6

Xenion

    Xenion


  • >1k berichten
  • 2606 berichten
  • Moderator

Geplaatst op 17 april 2014 - 08:40

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");


#7

JobdGraaf

    JobdGraaf


  • 0 - 25 berichten
  • 7 berichten
  • Gebruiker

Geplaatst op 17 april 2014 - 15:43

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?

Veranderd door JobdGraaf, 17 april 2014 - 15:44


#8

Benm

    Benm


  • >5k berichten
  • 8792 berichten
  • VIP

Geplaatst op 18 april 2014 - 01:35

heb je die numberField array wel gedeclareerd?
Victory through technology

#9

JobdGraaf

    JobdGraaf


  • 0 - 25 berichten
  • 7 berichten
  • Gebruiker

Geplaatst op 18 april 2014 - 07:20

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.


#10

Xenion

    Xenion


  • >1k berichten
  • 2606 berichten
  • Moderator

Geplaatst op 18 april 2014 - 09:13

 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:

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:

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





0 gebruiker(s) lezen dit onderwerp

0 leden, 0 bezoekers, 0 anonieme gebruikers

Ook adverteren op onze website? Lees hier meer!

Gesponsorde vacatures

Vacatures