通常のアプリケーション プロファイルに適合しない Java Swing アプリケーションを開発しています。これにはタブ付きペイン (およびその他のパネル) が含まれ、各タブにはアクティブなレンダリング (一度に 1 つのスレッドのみがペイントされる) を含む Canvas が含まれます。
問題は、メイン アプリケーション ウィンドウのサイズを変更すると、キャンバスの内容が表示されず (マウスのドラッグを止めると表示される)、その理由がわかりません。また、一部のチュートリアルでは、コンテンツをバッファリングされた画像にレンダリングしていることにも気付きました。
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();
}
}