競合しているように見えるダブル バッファリングと Swing イベントの両方を使用しています。私はJSliderを使用していて、ダブルバッファしようとしています。実際にはダブル バッファリングの描画を行いますが、ダブル バッファリングが再び描画され、イメージが失われます。JSlider を使用してダブル バッファリング描画を行っていますが、イベント システムがフレームを再描画しているようです (2 つのコンポーネント、画像とスライダーを使用)。これを正しい方法で行うにはどうすればよいですか?コンポーネントで再描画しないように通知するように再描画変数を設定しようとしましたが、これは機能しません。特定のコンポーネントの再描画を停止するための何らかのイベント スイッチはありますか? ダブルバッファリングを使用すべきではありませんか? コードスニペットを次に示します。
private void drawOneByOne(ImageComponent imgComponent, JFrame f,
MapObjects mapObjects, int number) {
f.createBufferStrategy(2);
BufferStrategy bufferStrategy = f.getBufferStrategy();
Graphics2D g = (Graphics2D)bufferStrategy.getDrawGraphics();
bufferStrategy = f.getBufferStrategy();
g = (Graphics2D)bufferStrategy.getDrawGraphics();
// draw the map and then the points
imgComponent.paint(g);
for (int i = 0; i < number; i++) {
imgComponent.drawPoint(mapObjects.get(i),g);
}
imgComponent.repaint = false;
bufferStrategy.show();
g.dispose();
imgComponent.repaint = true;
}
public void stateChanged(ChangeEvent e) {
JSlider source = (JSlider)e.getSource();
if (!source.getValueIsAdjusting()) {
int voterNumber = source.getValue();
System.out.println("Drawing One By One, " + voterNumber);
drawOneByOne(this.imgComponent, this.f, this.mapObjects, voterNumber);
}
}
. . .