LINUX.ORG.RU

[java] Обновление jPanel

 


0

1

Допустим я в NetBeans посадил на форму панельку jPanel и нарисовал на ней с помощью java.awt.Graphics некоторые штуковины, например так:

Graphics g = jPanel1.getGraphics();
g.setColor(Color.white);
g.fillRect(0, 0, 100, 100);
При любом обновлении окна, будь то ресайз или перекрывание другими окнами, все что нарисовалось на панельке исчезает, то есть стирается как ластиком. Недолгие размышления по этому поводу привели меня к тому, что видимо надо перерисовывать при каждом обновлении окна, подскажите как это сделать?


1) Картинку нужно рисовать на невидимом объекте java.awt.Image offscreen;
2) В методе прорисовки paint(Graphics g) визуального компонента быстро перенести содержимое невидимого компонента на канву.

http://www.thatsjava.com/java-swing/4218/

Методы рисования и прорисовки должны быть синхронными, чтобы избежать порчи изображения, если метод рисования вызывает другая нить.

iZEN ★★★★★
()
Ответ на: комментарий от vertexua

Это не двойная буферизация, а использование бэк-буфера для рукопашной.

У Java2D лучше получится

И как же она тут поможет?

iZEN ★★★★★
()

Поставь для панельки менеджер компоновки null и соответственно задай setbounds. Была такая же проблема. Решилась этим способом.

OnlineMagic
()
Ответ на: комментарий от OnlineMagic

Так делать плохо. Нужно наследовать JPanel и перегружать paintComponent, вписав первой строчкой в перегруженный метод «super.paintComponent(g);», а потом — свой код.

post-factum ★★★★★
()
Ответ на: комментарий от post-factum

Я как раз так и делал. Только перегружал JComponent. У меня просто такая же бага была.

OnlineMagic
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.