| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Java: GUI и Java FX приложения > Где взять пример простейшей программы рисовалки? |
| Автор: JavaNewb 5.3.2008, 02:14 |
| Я только начинаю изучать Яву. Весьма непривычный язык, надо сказать. Есть ли где-то собрание лёгких примеров демонстрирующих работу кнопок, обработка их событий и т.д.? В частности интересует небольшой примерчик программы реализующий рисование курсором мыши. Нет ли где такого? Там много чего интересного можно почерпнуть - и прорисовку, и обработки событий... Спасибо! |
| Автор: JavaNewb 5.3.2008, 02:33 |
| Круто! То, что нужно! Спасибо большое! Туториал свинговский я посмотрел уже. Видел всякие "SwingPaintDemo4Project". Но то, что ты дал - просто супер по сравнению с "SwingPaintDemo4Project" |
| Автор: JavaNewb 5.3.2008, 02:55 |
| А зачем здесь буферизируется изображение? Почему это необходимо делать?? |
| Автор: Kangaroo 5.3.2008, 10:21 | ||
Чтобы сохранять то, что пользователь уже нарисовал. Если бы не было этого буфера, то при перирисовки окна (например, при изменении размера) все изображение пропадало бы. |
| Автор: JavaNewb 5.3.2008, 21:41 |
| Kangaroo, спасибо за объяснение! Проголосовал за тебя! (в подписи) Вот ещё что непонятно.. Зачем там существует переменная backgroundGraphics. Я вижу только то, что там она объявляется, устанавливается цвет на нёё, рисуется овал на этом "графическом контексте" (если можно так выразиться) и ещё делается вот это: backgroundGraphics = bufferImage.getGraphics(); насколько я понял это присваивание (копирование) bufferImage в backgroundGraphics. Но больше ничего с этим backgroundGraphics и не делается.. А какая же цель её существования там?? Эту переменную ведь никуда не переносят и никак её и не используют, как я понял... Зачем же она нужна? |
| Автор: Kangaroo 6.3.2008, 01:32 | ||
Все правильно. То что пользователь рисует мы рисуем на bufferImage, а точнее на "графическом контексте" этой картинка - backgroundGraphics. Так что этой строкой: backgroundGraphics = bufferImage.getGraphics(); мы просто связываем переменную backgroundGraphics, с "графическом контекстом" картинки, чтобы потом рисовать на ней. |
| Автор: JavaNewb 6.3.2008, 03:56 | ||||
Вот это как не получается понять Всё, что пользователь рисует мы кидаем на bufferImage.. но причём же тут вообще backgroundGraphics? Не очень понятная технология Получается мы рисуем напрямую на bufferImage и потом ЕЁ же отрисовываем на панель:
а причём же здесь backgroundGraphics, если она в этом процессе не используется? Я уже попробовал убрать и оно не стало работать. Понятно, что оно зачем-то нужно, но вот зачем именно так врубиться и не могу :( |
| Автор: Kangaroo 6.3.2008, 10:22 | ||
Мы не прямо на bufferImage рисуем, а через его graphics - backgroundGraphics Вот, смотри:
Это у graphics есть методы setColor, fillOval, drawLine, etc. У image их нету. |
| Автор: JavaNewb 6.3.2008, 21:17 |
| а.. "Вон оно чё!" Т.е. получается, что после кода: backgroundGraphics = bufferImage.getGraphics(); backgroundGraphics становится как будто ссылкой на bufferImage и рисуя на backgroundGraphics у нас меняется и содержимое bufferImage?? Фигасе финт ушами |
| Автор: JavaNewb 10.3.2008, 03:18 |
| Так я понял? или нет всё-таки?? |
| Автор: Kangaroo 10.3.2008, 12:17 | ||
backgroundGraphics это не "как будто ссылка", а объект класса, у которого есть функциональность для рисования на bufferImage. Не знаю как красиво сказать |
| Автор: DelphiFun 12.3.2008, 07:17 |
| [удалено] |
| Автор: JavaNewb 5.6.2008, 12:21 | ||||
| Kangaroo, если позволишь - ещё вопрос! Если в вышеидущем коде необходимо нарисовать что-то до того как пользователь начнёт рисовать где можно такой код прописать? Я попытался сделать это вот здесь:
но получил вот такую ошибку:
Он о чём говорит? То, что "backgroundGraphics" не инициализировано ещё? Но разве вызываемый перед этим метод paint() не инициализирует "backgroundGraphics"? |
| Автор: JavaNewb 6.6.2008, 08:14 |
| Кстати, а как в данном случае вообще из родительского класса обратиться к переменной backgroundGraphics? т.е. например из функции public static void main(String[] args)? |
| Автор: JavaNewb 6.6.2008, 17:39 | ||
Попытался сделать переменную backgroundGraphics глобальной, выдаёт вот это:
Что означает эта ошибка? Как обойти её можно? Насколько я понимаю - я хочу сделать переменную backgroundGraphics нестатической, а оно мне говорит, что делать её таковой нельзя? |
| Автор: JavaNewb 7.6.2008, 11:48 |
| Справился! отбой! Добавлением новых методов, которые возвращали эти "недосягаемые" переменные. |
| Автор: lift 4.6.2009, 12:19 | ||||||
Посоветуйте пожалуйста как решить следующую проблему: необходимо создать что-то типа простенького графического редактора для просмотра и изменения рисунков (jpg,gif..), фильтры, всякие, наложения и, конечно, рисование. Вот как раз с рисованием и возникли проблемы(никогда раньше не программировал графику, да и в яве я новичок, раньше в основном с дельфи работал). За основу для рисования взял код выложенный Kangaroo на предыдущей странице (спасибо ему большое кстати). Но там рисование производилось на пустом рисунке:
когда я пытаюсь сделать что-то вроде этого
то при перерисовке ява ругается на метод
пишет: Exception in thread "AWT-EventQueue-0" java.lang.UnsupportedOperationException: getGraphics() not valid for images created with createImage(producer). Никак не могу это обойти, посовейте что-нибудь, пожалуйста, или хотя бы где искать. |
| Автор: math64 4.6.2009, 12:55 |
| используй java.awt.image.BuferedImage для рисования и пакет javax.imageio.* для загрузки и сохранения |