繁体   English   中英

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

[英]How to display animation in a JTable cell

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

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

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

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

首先,我采用了Nick Fortescue的相同想法(方法2)。 但是就在那之后我偶然发现

兔子洞博客

作者在其中为动画图标(基于GIF)提供了非常有用的类,以及Java2D绘制的无限进度指示器(著名的Mac OS X,如旋转轮),我可以直接将其放入应用程序而不必担心过多的绘画工作我。

但是,如果我没有找到这些,尼克的方式就是那样。

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

方法1-JLayeredPane

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

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM