我的应用程序(TableView)中有一个文件浏览器组件,并且我通过<Label LineBreakMode="WordWrap">
<Label.FormattedText>
<FormattedString>
<Span Text="Red Bold, " TextColor="Red" FontAttributes="Bold" />
<Span Text="default, " Style="{DynamicResource BodyStyle}">
<Span.GestureRecognizers>
<TapGestureRecognizer Command="{Binding TapCommand}" />
</Span.GestureRecognizers>
</Span>
<Span Text="italic small." FontAttributes="Italic" FontSize="Small" />
</FormattedString>
</Label.FormattedText>
</Label>
加载了文件图标。现在,这非常慢,因为我还需要将图标转换为BufferedImage,然后转换为JavaFX Image。所以我需要将所有这些推送到后台线程。我创建了一个IconLoadingTask,它加载了一个图标-在TableView的FileSystemView.getFileSystemView().getSystemIcon()
中,我将这些IconLoadingTasks推送到ExecutorService。可以,但是可以改进。
我遇到的问题是,如果文件夹中有很多图标,并且用户快速拖动滚动条,则会加载很多“冗余”图标,从而使线程停滞并导致通常看不到重要的图标当时:TableView中当前显示的内容。
任何人都有如何解决此问题的想法?我当时正在考虑访问TableView的垂直滚动条并监听它(也许只有在释放滚动条后才进行更新),但是我不确定如何访问滚动条……也许有一个更简单的解决方案使我无所适从
编辑:
好吧。我从Kotlin代码到Java代码中创建了一个最小,完整且可验证的示例,并且我再也无法重现“效果”。它似乎可以按照我的初衷工作。因此,似乎我只需要弄清楚我在主应用程序的代码中在做什么。无论如何,这是看似有效的示例代码。
updateItem()