Я использую как двойную буферизацию, так и события Swing, которые, похоже, конфликтуют. Я использую JSlider и пытаюсь удвоить буфер. На самом деле это двойная буферизация, но двойная буферизация снова рисуется, и я теряю свое изображение. Я использую JSlider для рисования с двойной буферизацией, и система событий, похоже, перерисовывает кадр (с двумя компонентами, изображением и ползунком). Как мне сделать это правильно? Я попытался установить переменную перерисовки, чтобы сигнализировать о том, чтобы не перерисовывать компонент, но это не работает. Есть ли какой-то переключатель событий, чтобы остановить перерисовку определенных компонентов? Должен ли я не использовать двойную буферизацию? Вот фрагмент кода.
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);
}
}
. . .