Двойная буферизация и покраска
Я использую как двойную буферизацию, так и события 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);
}
}
,,,
1 ответ
Swing легко дублируется через setDoubleBuffered(true)
если это все, чего вы хотели достичь. Нет ничего плохого в двойной буферизации, она просто использует больше памяти, вызовите ее в родительском контейнере ваших компонентов колебания. Вы не можете контролировать repaint
ОС вызывает его всякий раз, когда сочтет это необходимым, если вы не позвоните setIgnoreRepaint
на JFrame.