我在使用Swing组件时遇到了一些麻烦。
在一个JFrame
中,我有一个由GLCanvas
分隔的JEditorPane
和一个JSplitPane
。此配置使两个面板中的显示响应不稳定。
但是,当我将GLCanvas
和JEditorPane
分别放在他们自己的JFrame
中时,显示响应很棒。
我认为这是因为,在第二种情况下,这些组件上的所有操作都在不同的线程中执行。如果是这样,我的问题如下:
是否可以在自己的线程中运行组件?或者有更好的方法我应该这样做吗?
感谢您提供的任何帮助。
答案 0 :(得分:4)
我怀疑第一种情况下的糟糕表现更多地与Mixing heavy and light components有关。与大多数图形API一样,Swing使用single, event dispatch thread来更新屏幕;我猜JOGL必须遵守相同的限制。同时,many ways可以在另一个线程中执行工作并与图形环境进行通信。
答案 1 :(得分:1)
我认为你的假设不正确。所有Swing绘制操作都在同一个线程上进行。
也许你可以扩展你对'波涛汹涌'的描述?也许这是双缓冲与非双缓冲问题?
答案 2 :(得分:1)
看起来@trashgod是对的。 GLCanvas
是来自awt Canvas
后代的“重量级”组件。要查看是否真的是一个案例我建议将GLCanvas
替换为GLJPanel
,这是来自JPanel
的Swing组件后代。