javafx-2 - 在 JavaFX 的同一个场景中多次重用同一个 ImageView

标签 javafx-2

我正在尝试构建一个 Twitter 风格的 ListView,但我无法在同一个列表中多次重复使用同一个 ImageView。加载多个副本似乎很浪费,并且由于 UI 虚拟化导致滚动速度变慢。有任何解决方法吗?

public class TwitterCell extends ListCell<Object> {

private static HashMap<String, ImageView> images = new HashMap<String, ImageView>();

@Override
protected void updateItem(Object tweet, boolean empty) {
  super.updateItem(tweet, empty);
  Tweet t = (Tweet) tweet;
  if (t != null) {
    String message = t.getMessage();
    setText(message);
    String imageUrl = t.getImageUrl();
    if (!images.containsKey(imageUrl)) {
      images.put(imageUrl, new ImageView(imageUrl));
    }
    setGraphic(images.get(imageUrl));
  }
}

最佳答案

场景图不能在 JavaFX 中包含两次相同的 Node,并且没有克隆节点的方法(据我所知)。

解决方法可能是让您的 map 成为 HashMap 存储 Image 而不是 ImageView,并将最后一行更改为

setGraphic(new ImageView(images.get(imageUrl)));

这样您至少可以缓存实际 Image 的加载,这应该是最繁重的部分。

关于javafx-2 - 在 JavaFX 的同一个场景中多次重用同一个 ImageView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15175022/

相关文章:

java - 自动关闭 Java FX 应用程序可能处于窗口 sleep 模式

JavaFX 3D - 如何为 Group with 3D object 和 SubScene with UI Controls 设置不同的相机?

css - 突出显示 JavaFx 标签中的文本

javafx-2 - JavaFX : How to disable a button for a specific amount of time?

java - Graphics2D 和 GraphicsContext 之间的互操作性

javafx-2 - JavaFx、事件拦截/消费

java - 确定 JavaFX WebView 何时完成渲染

java - 为什么我的 TableView 第一行被选中?

java - 应用程序错误:java: module not found: javafx.

java - JavaFX UI 组件的 Nimbus 式外观