【问题标题】:Flickering issue with a AWT / SWT componentAWT / SWT 组件的闪烁问题
【发布时间】:2013-09-10 12:08:49
【问题描述】:

我在 Eclipse 中的 AWT 组件有一个简单的闪烁问题。 这是我的“层次结构”:

  1. org.eclipse.swt.widgets.Composite => 我的 ViewPart 对象收到的主要父级(在 createPartControl() 中)
  2. org.eclipse.swt.widgets.Composite => 具有行为SWT.EMBEDDED 的主要父母的孩子
  3. java.awt.Frame => 使用桥接函数 SWT_AWT.new_Frame()(2 的子代)创建的 awt 框架。
  4. javax.swing.JComponent => 我的最终展示(3 的孩子。)

一切正常,我可以操作我的 JComponent 视图。大小还可以,但视图一直在闪烁/闪烁。 需要注意的是,之前,我使用了一个 JPanel 作为 3. 的孩子,然后是 JComponent。使用这种替代解决方案,尺寸不合适,但我没有任何闪烁。

有没有办法解决这个问题,或者至少有一些提示可以理解这种行为?

非常感谢您的帮助。

[编辑:我找到了解决问题的方法,方法是保留中间 JPanel 并使用 Layouts。我仍然有兴趣了解病理行为]

【问题讨论】:

  • 好奇:为什么要混合 swt 和 swing 组件?很可能(不知道,只是猜测 :-) 他们有不同的线程规则,所以混合处理起来很棘手
  • 实际上,我想显示一个由 prefuse 库创建的视图,它返回给我一个 JComponent 的子类。我发现的唯一解决方案是桥接 swt -> awt,然后将我的 swing 组件放入我的 awt。但是,当我在 JComponent 和 Frame 之间插入 JPanel 时,这可以正常工作,但在这种情况下我遇到了布局问题。这就是为什么我认为应该有一个非常简单的解决方案来解决这个问题。

标签: java eclipse swing swt awt


【解决方案1】:

在您的 JComponent 上启用双缓冲:

component.setDoubleBuffered(true);

【讨论】:

  • JComponent.setDoubleBuffered(true);是所有嵌套 API 中的默认值,并从 Swing 中的 JComponent 继承方法(不包括顶级容器)
  • 实际上这对我有用,因为我直接在 Frame 中添加了一个 piccolo PCanvas。并且 PCanvas 直接从 JComponent 派生而来,无需在构造函数中设置 setDoubleBuffered 标志。
猜你喜欢
  • 1970-01-01
  • 2013-05-19
  • 1970-01-01
  • 1970-01-01
  • 2015-01-04
  • 2016-03-06
  • 2012-05-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多