我正在开发一个不适合正常应用程序配置文件的 java swing 应用程序。它包含一个选项卡式窗格(和一些其他面板),每个选项卡都包含一个带有活动渲染的画布(一次只有一个线程绘制)。
问题是,当我调整主应用程序窗口的大小时,画布内容不显示(当我停止拖动鼠标时它显示出来),我不知道为什么。我还注意到一些教程将内容呈现为缓冲图像:
http://jamesgames.org/resources/double_buffer/double_buffering_and_active_rendering.html
这可能是画布闪烁的原因(我理解教程缓冲图像的方式仅用于删除标题栏偏移)?
GUI 的结构如下:
JFrame
- TabbedPane
- ScrollPane
- Canvas 1
- ScrollPane
- Canvas 2
- JPanel
- labels,buttons,..
编码:
class Renderer extends Canvas implements Runnable
{
Thread hThread = null;
BufferStrategy strategy = null;
Renderer()
{
setIgnoreRepaint(true);
}
public void run()
{
while(active)
{
g = strategy.getDrawGraphics();
draw(g); // renderer elements
strategy.show();
g.dispose();
}
}
// Called when switched to in Tabbed pane
public void start()
{
createBufferStrategy(2);
strategy = getBufferStrategy();
hThread = new Thread(this);
hThread.start();
}
// Called when switched off in Tabbed pane
public void stop(){
hThread.stop();
}
}