【问题标题】:Getting rid of flicker in SWT摆脱 SWT 中的闪烁
【发布时间】:2013-05-19 20:38:14
【问题描述】:

我们使用以下类在我们的 Java 应用程序中显示进度条:TextProgressBar

不幸的是,我们在使用它时遇到了一些闪烁问题(Win 7、Java 7)。您对我们如何避免这种情况有什么建议吗?我们能否以某种方式减少重绘它的频率,使用双缓冲或其他方式?非常感谢任何提示!

【问题讨论】:

  • 首先,您看到Javadoc 中的注释了吗? “限制:这个类不打算被客户子类化。”您绝对应该首先尝试SWT.DOUBLE_BUFFERED,但不能保证您的情况。

标签: java swt progress-bar double-buffering


【解决方案1】:

首先,尝试将SWT.DOUBLE_BUFFERED 传递给构造时的样式参数。如果这不能改善这种情况,请向上移动父链并将SWT.DOUBLE_BUFFERED 添加到它们的构造函数调用中。

如果您无法控制父级,那么您可能需要将您的控件包装在另一个启用了此标志的 Composite 中。

【讨论】:

  • 谢谢,我试过了,但不幸的是它没有用。我尝试将其添加到 TextProgressBar 的构造函数中,也尝试了父复合。
  • 是什么触发了您看到的重绘?如果您可以确定一个区域被频繁调用,您可以在控件上调用 .setRedraw(false) 将其包装起来,正常执行导致快速重绘的工作,然后调用 .setRedraw(true)最后。
【解决方案2】:

首先尝试SWT.NO_BACKGROUND,如果不使用SWT.DOUBLE_BUFFERED。 不要同时使用两者,因为没有意义。 见discussion

【讨论】:

    【解决方案3】:

    免责声明:我知道该问题专门针对TextProgressBar。不过,相信很多对这个问题的看法并不局限于这个widget。

    我遇到了Text 小部件闪烁的问题,我无法通过使用SWT.DOUBLE_BUFFERED 样式、用Composite 包装它或应用它们的任何组合来解决此问题。

    最后,我只需将小部件类型从Text 更改为StyledText 即可解决此问题。即使没有 SWT.DOUBLE_BUFFERED 样式和 Composite 包装器,也不会出现闪烁。

    希望这对被这个问题的宽泛标题所吸引的人有所帮助。

    【讨论】:

      【解决方案4】:

      您可以尝试使用 thread.sleep() 来延迟时间。当我在使用 jTables

      时遇到同样的问题时,它对我有用

      【讨论】:

      • 请注意我说的是 SWT。不摇摆。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-04-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-15
      • 1970-01-01
      • 2021-04-17
      相关资源
      最近更新 更多