Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
仅激发JavaFX中一系列事件中的最后一个事件_Java_User Interface_Javafx - Fatal编程技术网

仅激发JavaFX中一系列事件中的最后一个事件

仅激发JavaFX中一系列事件中的最后一个事件,java,user-interface,javafx,Java,User Interface,Javafx,我有一个PackingCanvas在屏幕上绘制元素,它是JavaFXCanvas控件的扩展。我希望在调整大小时绘制元素,但仅在调整大小完成时绘制,因为在某些情况下,在每个调整大小事件上重新绘制整个画布的成本可能太高 我现在有以下资料: widthProperty().addListener(evt -> draw()); heightProperty().addListener(evt -> draw()); 我试过用线来做这件事;添加一个小延迟,看看是否创建了一个新线程,如果没有

我有一个
PackingCanvas
在屏幕上绘制元素,它是JavaFX
Canvas
控件的扩展。我希望在调整大小时绘制元素,但仅在调整大小完成时绘制,因为在某些情况下,在每个调整大小事件上重新绘制整个画布的成本可能太高

我现在有以下资料:

widthProperty().addListener(evt -> draw());
heightProperty().addListener(evt -> draw());
我试过用线来做这件事;添加一个小延迟,看看是否创建了一个新线程,如果没有<代码>绘图(),否则中止当前线程


然而,对我来说,这似乎不是一个优雅的解决方案。有解决这些问题的习惯用法吗?

您可以在draw()函数中缓存宽度和高度

void draw()
{ 
  cacheHeight = getHeight();
  cacheWidth  = getWidth();
}
然后

使用:“考虑一个矩形,它需要在每次宽度或高度改变时重新绘制。使用指示器和流组合器,我们可以将上面示例中的重新绘制次数减少到1。”
heightProperty().addListener(evt -> {if(getHeight()!=cacheHeight) draw();});