2016-12-04 6 views
0

Ich versuche, für den Fall, jedesmal, wenn das Bild gedrückt zu leuchten, und wenn es noch einmal gedrückt worden ist möchte ich es auf die ursprüngliche Beleuchtung gehenÄnderung der Imageview Wirkung auf javafx

// Effect To light up the image once it been pressed to green 
    Lighting lighting = new Lighting(); 
    lighting.setDiffuseConstant(1.0); 
    lighting.setSpecularConstant(0.0); 
    lighting.setSpecularExponent(0.0); 
    lighting.setSurfaceScale(0.0); 
    lighting.setLight(new Light.Distant(45, 45, Color.GREEN)); 

    // Effect to show the unavailable images which can't be pressed 
    Lighting lighting_red = new Lighting(); 
    lighting_red.setDiffuseConstant(1.0); 
    lighting_red.setSpecularConstant(0.0); 
    lighting_red.setSpecularExponent(0.0); 
    lighting_red.setSurfaceScale(0.0); 
    lighting_red.setLight(new Light.Distant(45, 45, Color.RED)); 

    // the original effect and the one to change back the green effect once it being pressed again 
    Lighting orginalLighting = new Lighting(); 
    orginalLighting.setDiffuseConstant(1.0); 
    orginalLighting.setSpecularConstant(0.0); 
    orginalLighting.setSpecularExponent(0.0); 
    orginalLighting.setSurfaceScale(0.0); 
    orginalLighting.setLight(new Light.Distant(85, 85, Color.LIGHTGREY)); 

    // To initialize the original imageview and set its original effect 
    for(int i = 0;i<30;i++){ 
    seats[i] = new ImageView(seats_image); 
    seats[i].setEffect(orginalLighting); 
    } 


    for(int i=0;i<30;i++){ 
     Node seat = seats[i]; 
    seat.setOnMouseClicked(e->{ 
     if(seat.getEffect()!=lighting_red){ 
     seat.setEffect(lighting); } 

     if(seat.getEffect()==lighting){ 
      seat.setEffect(orginalLighting); } 
    });  
    } 

ich ändern wollte der Bildeffekt für den Fall, dass nicht rot zu grün ist. Und wenn ich es schon drücke und drücke es nochmal auf den originalen Effekt aber irgendwie drücke ich irgendein Bild nichts an.

Hinweis: Wenn ich das zweite if entferne, ändert sich das Bild zu grün, wenn ich es drücke, solange es nicht rot ist. Aber sobald ich die zweiten hinzugefügt, wenn gar nichts passiert es wie jedes Mal scheint, dass ich sich auf den ursprünglichen ändern drücken, die nichts mehr im Bild ändern

+0

nicht vergleichen Objekte mit '=' und '==' aber stattdessen mit der equals-Methode. Dies könnte helfen. – hotzst

+0

@hotzst habe nicht gearbeitet – MrRizk

Antwort

1

Ihre Logik ist falsch. Ihre aktuelle Implementierung ist:

Wenn der aktuelle Effekt originalLighting ist, wird die erste if Bedingung wahr, so dass Sie den Effekt zu lighting ändern. Dann ist die zweite if Bedingung auch wahr (da der Effekt jetzt lighting ist), so dass Sie sofort den Effekt zurück zu originalLighting ändern.

Sie brauchen so etwas wie:

if(seat.getEffect() == lighting) { 

    seat.setEffect(originalLighting); 

} else if (seat.getEffect() == originalLighting) { 

    seat.setEffect(lighting);  

} 

(. Beachten Sie, wenn Sie Ihren Code richtig, legen, diese Fehler viel leichter zu sehen und zu beheben)

+0

leider habe ich das schon gemacht bevor es alles verändert hat sogar die lighting_red auf orginalLighting und wenn ich es nochmal auf die beleuchtung drücke die schon falsch ist will ich die lighting_red lighting_red selbst ich drücke. Und sobald ich drücke ich orginalLighting, um Beleuchtung sein, die bereits zu erreichen, aber mein Problem, sobald ich wieder die Beleuchtung, die ich will es in orginalLighting ändern, die nicht passiert, sobald es geändert wird, um Beleuchtung ist es nie ändern zu orginallighting – MrRizk

+0

es funktioniert danke – MrRizk

0

Erstellt ein List<Integer> die ID jedes Bild speichern je nach Index und Jedes Mal, wenn Sie das Bild drücken, führen Sie eine Methode aus, um die ID zu überprüfen. Dann nehmen Sie die Änderung in Abhängigkeit von der ID und der Anzahl der Bildeingaben vor:

1) -wenn das Bild im Originalzustand ist, dann Sie erhöhen die Liste von 1 und wenden den Effekt an.

2) -wenn das Bild bereits gedrückt wurde, dekrementieren Sie um 1 und Sie wenden den Effekt an.

//Create and initialize the List with a loop (length 30 images here) 
List<Integer> pressCount = new ArrayList<>(); 
Verwandte Themen