【问题标题】:How to display animation in a JTable cell如何在 JTable 单元格中显示动画
【发布时间】:2015-07-31 15:07:37
【问题描述】:

我正在寻找一种在表格单元格中显示动画进度指示器(动画 GIF、通过 Java2D 呈现的旋转轮等,此处没有偏好)的方法,直到计算或检索到最终显示的值.

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

使用静态标签或图像可以正常工作,但因为单元格渲染仅将其用作橡皮图章,并且不会为每个单元格创建单独的实例(这在性能方面当然是一个好主意)动画 GIF例如不在单个单元格中“播放”。

我怎样才能达到这样的效果?它将使用户界面变得更加“精致”,而不仅仅是简单的文本。

【问题讨论】:

    标签: java user-interface animation animated-gif


    【解决方案1】:

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

    The rabbit hole blog

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

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

    【讨论】:

      【解决方案2】:

      正如你所说,基本的 JTable 渲染机制不支持这一点,CellRenderer 用于绘制单元格(或根据需要绘制单元格的一部分),并且不允许重新绘制,它按需绘制。

      方法 1 - JLayeredPane

      如果我需要这样做,我会使用JLayeredPane 在 JTable 上绘制我的动画渲染器。

      但是我认为这将是很多工作。您需要做很多正确的事情,特别是如果您将它放在滚动窗格中。你的收容层级是这样的:

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

      您还需要为动画面板布置一项棘手的工作,您要么需要自定义布局管理器来镜像 JTable 列宽,要么使用类似 GridLayout 的东西。可行,但工作量很大。

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-01-20
        • 1970-01-01
        • 2020-05-08
        • 1970-01-01
        相关资源
        最近更新 更多