小编典典

如何在JTable单元格中显示动画

java

我正在寻找一种方法来在表格单元格中显示动画进度指示器(动画GIF,通过Java2D渲染的旋转轮等,此处没有首选项),直到计算或检索出最终显示的值为止。

到目前为止,我只是在尚未准备好加速显示的每个单元格中放置了一个静态的“待处理…”文本。当数据从后台线程到达时,我将其放入适当的单元格中并在表上调用repaint。

使用静态标签或图像可以很好地工作,但是由于单元格渲染仅将其用作橡皮图章,并且不会为每个单元格创建单独的实例(当然,从性能角度考虑,这是一个好主意),例如,动画GIF可以而不是在各个单元格中“玩”。

我怎样才能达到这样的效果?这将使UI变得不仅仅是一个简单的文本,而是一个更加“优美”的UI。


阅读 221

收藏
2020-09-26

共1个答案

小编典典

就像您说的那样,基本的JTable呈现机制不支持此功能,CellRenderer用于绘制单元格(或根据需要绘制单元格的一部分),并且不允许重绘,而是按需绘制。

方法1-JLayeredPane

如果需要这样做,可以使用JLayeredPane在JTable顶部绘制动画渲染器。

但是,我认为这将需要大量工作。您需要做很多事情,特别是如果您将其放在滚动窗格中。您的遏制层级将是这样的:

JScrollPane->(视口)JLayeredPane-> JTable和JPanel(透明,带有动画)

您还需要完成一个棘手的工作,即放置动画面板,或者需要自定义布局管理器来镜像JTable列宽,或者使用诸如GridLayout之类的东西。可行,但工作量很大。

Method2-自定义CellRenderer并在Swing Timer中重绘

唯一的选择是保留一个已设置动画的单元格列表,然后维护一个摆动计时器,反复对它们进行重绘。然后,您将有一个自定义的CellRenderer进行动画绘画,并且绘画会随着时间而变化。这可能更简单,但是在不占用CPU的情况下获得正确的帧速率,以及获取更新的重绘以匹配动画更新可能会导致一些奇怪的视觉效果

2020-09-26