Двойная буферизация и покраска

Я использую как двойную буферизацию, так и события 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.

Другие вопросы по тегам