Я разрабатываю графический проект в java с помощью swing и awt-библиотек. Я ищу метод, который позволяет мне очень быстро рисовать на моем JPanel. Я пробовал различные методы: переопределять paintComponent, вызывая перерисовку (x, y, width, heigth). Но во всех случаях я должен перекрасить ВСЕ экран! У меня есть фон и небольшое изображение перед ним, которое меняется каждые несколько раз. Я ищу метод, который позволяет мне рисовать на экране только маленькое изображение, мне тоже не нужно перерисовывать фон, потому что он всегда один и тот же, и маленькое изображение всегда находится в одних и тех же коордах. например, на C++ я нарисовал фон, а затем я только нарисовал маленькие изображения перед ним, используя putimage (graphics.h), так что это было очень быстро. У кого-нибудь есть подсказки?JPanel repaint не работает
ответ
У меня был некоторый опыт программирования игр, и обычно JPanel используется как холст. Теперь, чтобы нарисовать на нем, вы должны написать простой цикл, который непрерывно буферизует изображение, а затем рисует его на экране. Таким образом, при инициализации вы создаете объект Graphics или Graphics2D, который передается методу buffer(). После рисования BufferedImage с экземпляром Graphics, некоторый метод paint() рисует BufferedImage на экране.
Если вы только рисуете фон один раз, нарисованные ранее изображения будут по-прежнему видны. Если все ваши изображения имеют одинаковый размер, вам не нужно беспокоиться, но я по-прежнему рекомендую перекрасить свой фон.
Посмотрите на книгу Программирование в Killer Game на Java для получения дополнительной информации, это отличная справочная информация.
, но у меня все еще есть сомнения .. это мой код класса ImagePanel расширяет JPanel { ImagePanel() {/ * INIT * /} защищены недействительный paintComponent (график г) { // этого метода расписывать все сцены } недействительного myRepaintMethod() { // что мне писать здесь, чтобы перекрасить только // что небольшая площадь -> x1 = 12, y1 = 304, x2 = 710, y2 = 500 } } Что мне делать? –
Я уверен, но чего вы на самом деле пытаетесь достичь, только частично перерисовывая изображение на холсте? –
Советы:
- краски статические изображения на BufferedImage, а затем сделать что в paintComponent с помощью
Graphics#drawImage(...)
- Вы знаете, что метод
repaint(...)
перегружен, и что одна перегрузка может принимать параметр Прямоугольник, ограничивающий область перекраски.
- 1. JPanel repaint не работает
- 2. repaint() JPanel
- 3. | JAVA | Рисуем дерево, JPanel repaint() не работает
- 4. Repaint JPanel не работает в JApplet
- 5. Java repaint() не работает в классе jPanel
- 6. repaint() Jpanel не работает после события
- 7. сложены JPanel repaint не правильно
- 8. repaint() Метод не перекрашивать JPanel
- 9. JTabbedPane repaint не работает
- 10. Swing JPanel wont repaint
- 11. Почему repaint() не работает?
- 12. repaint query в JPanel
- 13. repaint() JFrame и JPanel
- 14. JDialog repaint не работает
- 15. Repaint TextFile в JPanel
- 16. Вопросы о JPanel repaint
- 17. Repaint на ребенка JPanel
- 18. Проблемы с методом JPanel repaint()
- 19. Java repaint() не работает
- 20. repaint() не работает
- 21. JPanel repaint() call not working
- 22. JPanel revalidate и repaint не работает должным образом (Java Swing)
- 23. JPanel repaint() метод и отладка
- 24. Проблемы с компонентом/JPanel repaint()
- 25. revalidate() и repaint() не обновляет мой JPanel
- 26. repaint in java не работает
- 27. Почему repaint() не всегда работает?
- 28. repaint метод не работает java
- 29. repaint не работает в потоке
- 30. Метод repaint() не работает более одного раза
Возможный дубликат [Краска в части JPanel без перекрашивания остальных] (http://stackoverflow.com/questions/9668564/paint-in-a-part-of-jpanel-without-repaint-the-rest) –
'Мне тоже не нужно перекрашивать фон, потому что он всегда один и тот же, и маленькое изображение всегда в одном и том же coords' - так зачем вам перекрашивать что-либо, если обратное изображение и небольшое изображение тоже самое? Почему вы пытаетесь сделать обычную роспись. Просто используйте JLabel для фонового изображения. Затем вы можете добавить вторую метку меньшего размера на ярлык фона. – camickr
Да, но небольшое изменение изображения, в моей программе у меня есть 3 изображения, которые меняют каждые n миллисекунд, и я хочу перерисовать непосредственно только небольшую часть, где находится изображение –