2015-12-24 6 views
-3

Я разрабатываю графический проект в java с помощью swing и awt-библиотек. Я ищу метод, который позволяет мне очень быстро рисовать на моем JPanel. Я пробовал различные методы: переопределять paintComponent, вызывая перерисовку (x, y, width, heigth). Но во всех случаях я должен перекрасить ВСЕ экран! У меня есть фон и небольшое изображение перед ним, которое меняется каждые несколько раз. Я ищу метод, который позволяет мне рисовать на экране только маленькое изображение, мне тоже не нужно перерисовывать фон, потому что он всегда один и тот же, и маленькое изображение всегда находится в одних и тех же коордах. например, на C++ я нарисовал фон, а затем я только нарисовал маленькие изображения перед ним, используя putimage (graphics.h), так что это было очень быстро. У кого-нибудь есть подсказки?JPanel repaint не работает

+0

Возможный дубликат [Краска в части JPanel без перекрашивания остальных] (http://stackoverflow.com/questions/9668564/paint-in-a-part-of-jpanel-without-repaint-the-rest) –

+0

'Мне тоже не нужно перекрашивать фон, потому что он всегда один и тот же, и маленькое изображение всегда в одном и том же coords' - так зачем вам перекрашивать что-либо, если обратное изображение и небольшое изображение тоже самое? Почему вы пытаетесь сделать обычную роспись. Просто используйте JLabel для фонового изображения. Затем вы можете добавить вторую метку меньшего размера на ярлык фона. – camickr

+0

Да, но небольшое изменение изображения, в моей программе у меня есть 3 изображения, которые меняют каждые n миллисекунд, и я хочу перерисовать непосредственно только небольшую часть, где находится изображение –

ответ

0

У меня был некоторый опыт программирования игр, и обычно JPanel используется как холст. Теперь, чтобы нарисовать на нем, вы должны написать простой цикл, который непрерывно буферизует изображение, а затем рисует его на экране. Таким образом, при инициализации вы создаете объект Graphics или Graphics2D, который передается методу buffer(). После рисования BufferedImage с экземпляром Graphics, некоторый метод paint() рисует BufferedImage на экране.

Если вы только рисуете фон один раз, нарисованные ранее изображения будут по-прежнему видны. Если все ваши изображения имеют одинаковый размер, вам не нужно беспокоиться, но я по-прежнему рекомендую перекрасить свой фон.

Посмотрите на книгу Программирование в Killer Game на Java для получения дополнительной информации, это отличная справочная информация.

+0

, но у меня все еще есть сомнения .. это мой код класса ImagePanel расширяет JPanel { ImagePanel() {/ * INIT * /} защищены недействительный paintComponent (график г) { // этого метода расписывать все сцены } недействительного myRepaintMethod() { // что мне писать здесь, чтобы перекрасить только // что небольшая площадь -> x1 = 12, y1 = 304, x2 = 710, y2 = 500 } } Что мне делать? –

+0

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

0

Советы:

  • краски статические изображения на BufferedImage, а затем сделать что в paintComponent с помощью Graphics#drawImage(...)
  • Вы знаете, что метод repaint(...) перегружен, и что одна перегрузка может принимать параметр Прямоугольник, ограничивающий область перекраски.
Смежные вопросы