2016-12-04 8 views
0

나는 이미지를 누르면 그것을 다시 누르면 됐어요 경우 경우에 나는 그것이 내가 변경을 원자바 FX

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

원래 조명에 가고 싶어하고 때마다 불려고에 이미지 뷰 효과를 변경 이미지 효과가 빨강에서 초록색이 아닌 경우. 그리고 내가 이미 그것을 누르면 원래의 효과로 다시 눌러 지지만 어떻게 든 일단 이미지를 변경하면 아무것도 변하지 않습니다.

힌트 : 두 번째 if를 제거하면 빨간색이 아닌 한 이미지를 녹색으로 변경하면 녹색으로 바뀝니다. 하지만 두 번째를 추가하면 아무것도 나는 그것이 이미지

+0

이'와 객체를 비교하지 마십시오 =' 와'=='와 같지만 대신 equals 메소드를 사용한다. 도움이 될 것입니다. – hotzst

+0

@hotzst가 작동하지 않았습니다 – MrRizk

답변

1

논리가 잘못되었습니다. 현재 구현은 다음과 같습니다.

현재 효과가 originalLighting 인 경우 첫 번째 if 조건이 적용되므로 효과를 lighting으로 변경합니다. 두 번째 if 조건도 적용됩니다 (효과가 lighting이므로). 그러면 즉시 효과를 originalLighting으로 다시 변경합니다.

당신은 뭔가를해야합니다!

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

    seat.setEffect(originalLighting); 

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

    seat.setEffect(lighting);  

} 

(. 당신이 적절히 코드를 배치하는 경우, 이러한 오류가보고 수정하는 것이 훨씬 쉽게합니다)

+0

불행히도 이미 모든 것을 변경하기 전에 이미 조명을 켜고 orginalLighting로 변경했습니다. 그리고 조명이 잘못된 경우 다시 조명을 켜면 lighting_red를 누르기를 원합니다. 그리고 일단 나는 조명을 위해 orginalLighting을 이미 수행하지만 내 문제를 다시 한 번 조명을 눌러야합니다. 조명으로 변경되면 변경되지 않은 orginalLighting으로 변경하고 싶습니다. orginallighting으로 변경하지 마십시오 – MrRizk

+0

감사합니다. – MrRizk

0

에서 아무 것도 변경하지 않는 원본에 변경 누르면 전혀 때마다 것 같아 발생하지 않는 경우는 인덱스에 따라 각각의 이미지 의 ID를 저장하는 List<Integer>를 작성 및 이미지를 누를 때마다 ID를 확인하는 방법을 실행하면 ID 및 이미지가 눌린 시간에 따라 변경됩니다.

1) - 이미지가 원래 상태 인 경우 당신은 1의 목록에서 증가하고 효과를 적용합니다.

2) - 이미 이미지가 눌려져 있으면 1 씩 감소하고 효과를 적용합니다.

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