【问题标题】:Fire only the last event in a series of events in JavaFX仅触发 JavaFX 中一系列事件中的最后一个事件
【发布时间】:2017-10-05 10:34:58
【问题描述】:

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

我现在拥有的如下:

widthProperty().addListener(evt -> draw());
heightProperty().addListener(evt -> draw());

我试过用线程来做这个;添加一个小延迟,看看是否新创建了一个新线程,如果没有; draw(),否则中止当前线程。

但是,这对我来说似乎不是一个优雅的解决方案。有处理这些问题的成语吗?

【问题讨论】:

  • 使用ReactFX:“考虑一个矩形,它每次宽度或高度发生变化时都需要重新绘制。使用指示器和流组合器,我们可以将上面示例中的重新绘制次数减少到1。”

标签: java user-interface javafx


【解决方案1】:

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

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

然后

heightProperty().addListener(evt -> {if(getHeight()!=cacheHeight) draw();});

【讨论】:

    猜你喜欢
    • 2014-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-21
    • 2020-12-11
    相关资源
    最近更新 更多