当前位置: 首页 > 面试题库 >

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

董同
2023-03-14
问题内容

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

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

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

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


问题答案:

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

方法1-JLayeredPane

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

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

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

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

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

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



 类似资料:
  • 问题内容: 我有此代码从如何突出显示jtable中的多个单元格: 但是,当我用它突出显示一个单元格时,它会执行错误的操作,就像丢失整个数据一样。Iam是Java Swing的新手。请帮助使单元格在按钮按下动作事件中突出显示。 更新:添加我的示例代码: 我想要的是单击按钮,我只想突出显示单元格编号1(Row1-Column1)。 问题答案: 我使用此类来设置JTables的样式 创建此类的实例,并将

  • 我的代码有一个特殊的问题。 然后它会发生在图像上出现的事情。我需要汉字列是CENTER对齐,但出于某种原因,'tcr,不工作,因为它应该是,但默认渲染器正在做它应该是。 有什么建议/帮助吗?

  • 问题内容: 我正在尝试实现本教程中描述的自定义TableRenderer 。我想让渲染器对每个给定单元格很长的文本进行换行。这个想法是,使用TextArea作为渲染器,因为它支持换行。但是,以下代码无法正常工作: 我将此渲染器设置为 但是单元格条目保持未包装状态。如果我添加到该方法,则所有单元格都按预期是黄色,但没有被包裹。 有任何想法吗? 更新: 正如Michael Borgwardt在评论中指

  • 问题内容: 我想显示一个从数据库到表单元格的段落。 结果是一个大的1行,而忽略了它在数据库中的组织方式。例如忽略“输入”(换行) 我想完全按照它在数据库中的编写方式来显示它。 例如,如果段落保存如下: 我希望它完全像这样显示,而不是: 问题答案: 您想使用应用于适当的CSS 。为此,请对所有表单元格执行此操作,例如: 另外,如果您可以更改标记,则可以在内容周围使用标签。默认情况下,Web浏览器使用

  • 问题内容: 我想在JTable中将不可编辑的单元格显示为灰色。我正在使用这样的TableCellRenderer: 这有效,但有一个令人讨厌的伪像:最初,“复选框”是“左排列的”,当我按鼠标左键时,它移到“居中”,而当我释放鼠标按钮时,它又移回“左排列”。 如何避免这种令人讨厌的伪像,并且可能对我的问题有更好的简单解决方案? 问题答案: 返回的实例中。 附录:从美学角度,你可能想调理渲染的和基于编