仅激发JavaFX中一系列事件中的最后一个事件
我有一个仅激发JavaFX中一系列事件中的最后一个事件,java,user-interface,javafx,Java,User Interface,Javafx,我有一个PackingCanvas在屏幕上绘制元素,它是JavaFXCanvas控件的扩展。我希望在调整大小时绘制元素,但仅在调整大小完成时绘制,因为在某些情况下,在每个调整大小事件上重新绘制整个画布的成本可能太高 我现在有以下资料: widthProperty().addListener(evt -> draw()); heightProperty().addListener(evt -> draw()); 我试过用线来做这件事;添加一个小延迟,看看是否创建了一个新线程,如果没有
PackingCanvas
在屏幕上绘制元素,它是JavaFXCanvas
控件的扩展。我希望在调整大小时绘制元素,但仅在调整大小完成时绘制,因为在某些情况下,在每个调整大小事件上重新绘制整个画布的成本可能太高
我现在有以下资料:
widthProperty().addListener(evt -> draw());
heightProperty().addListener(evt -> draw());
我试过用线来做这件事;添加一个小延迟,看看是否创建了一个新线程,如果没有<代码>绘图(),否则中止当前线程
然而,对我来说,这似乎不是一个优雅的解决方案。有解决这些问题的习惯用法吗?您可以在draw()函数中缓存宽度和高度
void draw()
{
cacheHeight = getHeight();
cacheWidth = getWidth();
}
然后
使用:“考虑一个矩形,它需要在每次宽度或高度改变时重新绘制。使用指示器和流组合器,我们可以将上面示例中的重新绘制次数减少到1。”
heightProperty().addListener(evt -> {if(getHeight()!=cacheHeight) draw();});