我遇到了JavaFX的一些奇怪问题。 用例是:我想缩小一个样本。 我实现了一个Scroll事件处理程序,如下所示:
private void handleSwatchScrollAction(ScrollEvent se){
if(se.getEventType().equals(ScrollEvent.SCROLL)){
System.out.println("Enter into handleSwatchScrollAction ");
//The following two lines just want to calculate a ration to scale
double diff = (se.getDeltaY() / 40) * 2;
double diffFactor = diff / 2 / this.fxDial.getRadius() + 1;
System.out.println("diffFactor is: " + diffFactor);
//The following lines is to set scale
this.fxSwatch.setScaleX(diffFactor);
this.fxSwatch.setScaleY(diffFactor);
}
System.out.println("finish handleDialScrollAction");
}
问题是,当我使用滚动缩小时,第一次缩小操作效果很好。 但是从第二次看,没有变化。 日志看起来正确,但只是没有变化显示,一切都和以前一样。
例如,当我不断进行缩小操作(向上滚动)时,无论是第一次还是之后,日志总是这样:
输入handleSwatchScrollAction
(deltaX,deltaY)=(0.0,40.0)
diffFactor是:1.005
完成handleSwatchScrollAction
那么,为什么从视图上看第二次缩小(向上滚动)操作没有变化? 非常感谢你!
答案 0 :(得分:0)
每次滚动时,您只需将比例值设置为相同的值(1.005)。第一次,你会看到0.5%左右的变焦;但是在后续滚动事件中,您没有更改值。
您需要以下内容:
double diffFactor = ... // as before
double scale = this.fxSwatch.getScaleX() * diffFactor ;
this.fxSwatch.setScaleX(scale);
this.fxSwatch.setScaleY(scale);