【问题标题】:changing the imageview effect on javafx更改 javafx 上的 imageview 效果
【发布时间】:2016-12-04 19:01:01
【问题描述】:

每次按下图像时我都会尝试点亮,如果再次按下它,我希望它转到原始照明

    // 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,只要它不是红色,只要按下它,图像就会变为绿色。但是,一旦我添加了第二个,如果根本没有发生任何事情,似乎每次按下它都会更改为原始图像,而图像中没有任何变化

【问题讨论】:

  • 不要用!===比较对象,而是用equals方法。这可能会有所帮助。
  • @hotzst 没用

标签: java javafx imageview


【解决方案1】:

你的逻辑是错误的。您当前的实现是:

如果当前效果是originalLighting,那么第一个if条件为真,所以你把效果改成lighting。 那么第二个if条件也为真(因为现在效果是lighting),所以你马上把效果改回originalLighting

你需要这样的东西:

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

    seat.setEffect(originalLighting);

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

   seat.setEffect(lighting);    

}

(请注意,如果您的代码布局正确,这些错误更容易查看和修复。)

【讨论】:

  • 不幸的是,在将所有内容甚至将 Lighting_red 更改为 orginalLighting 之前,我已经这样做了,如果我再次将其按到已经错误的照明,我希望即使我按下,lighting_red 也能成为 Lighting_red。一旦我按下我的 orginalLighting 成为已经完成的照明但是我的问题一旦我再次按下照明我希望它更改为 orginalLighting 一旦它被更改为照明就不会发生它永远不会更改为 orginallighting
【解决方案2】:

创建一个List&lt;Integer&gt; 来存储每个图像的 ID 取决于索引,每次按下图像时,您都会运行一个方法来检查 ID,然后根据 ID 进行更改以及图片被按下的次数:

1)-如果图像处于原始状态,则在列表中增加 1 并应用效果。

2)-如果图像已被按下,则减 1 并应用效果。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-05-12
    • 1970-01-01
    • 1970-01-01
    • 2021-11-24
    • 2019-06-11
    • 1970-01-01
    • 2018-12-25
    相关资源
    最近更新 更多