Следующий код просто отображает холст в окне, которое просто заполняет его содержимое красным. Однако при изменении размера окна он мерцает много, потому что перед каждой перерисованием холст, кажется, очищается. После небольшого тривиального поиска это, казалось, было потому, что метод update()
назывался g.clearRect()
, но теперь я его преодолел, и мерцание остается там, полотно все еще очищается до перерисовки.Остановить холст Java от очистки на перерисовке
Я играл с двойной буферизацией, и насколько я могу судить, что, похоже, не исправляет ситуацию - я не уверен, насколько это было бы полезно в любом случае, поскольку проблема, похоже, больше связана с предотвращением полотно от очистки до его перекраски.
Как и в сторону, прежде чем все врывается и говорит, я есть использовать Canvas в данном случае, не JPanel, потому что в другой момент времени, я использую тот же холст для нативного воспроизведения видео с VLCJ.
public class MyCanvas extends Canvas {
@Override
public void update(Graphics g) {
paint(g);
}
@Override
public void paint(Graphics g) {
//By the time we get here, the canvas has been cleared to its background colour
g.setColor(Color.RED);
g.fillRect(0, 0, getWidth(), getHeight());
}
public static void main(String[] args) {
JFrame frame = new JFrame();
MyCanvas c = new MyCanvas();
frame.add(c);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
}
Как вы реализовали двойную буферизацию? Я думаю, что это не должно рисовать белый прямоугольник, так как вы переопределили метод, вызывающий его ... Я пробовал код на своем компьютере, и он работает хорошо. – zeller
@zeller Пробовал ли вы код как есть или без двойной буферизации? Я просто использовал тривиальный подход с заменой изображений поверх, а не встроенными в стратегии буферов, когда я его пробовал, но изменений не было. – berry120
без двойной буферизации. Он мерцает, но не из-за рисования белого прямоугольника. Я думаю, вы должны попробовать встроенную буферную стратегию, вот это сообщение, которое может помочь: http://stackoverflow.com/questions/5924697/java-double-buffering – zeller