![]() |
|
Модераторы: LSD, AntonSaburov |
![]()
|
|
| Prol |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 125 Регистрация: 11.1.2008 Где: Кыев, Украина Репутация: нет Всего: нет |
Этот апплет рисует красный овал там, где нажимается мышка.
Но мне непонятно, кто и где закрашивает старый овал в цвет фона? Я не люблю, когда программы делают то, чего я их не прошу. В тексте апплета есть как рисуется новый овал, но нету как затирается старый овал :о)
|
|||
|
||||
| Platon |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1801 Регистрация: 25.4.2006 Репутация: 4 Всего: 40 |
а это по твоему что?! |
|||
|
||||
| Prol |
|
||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 125 Регистрация: 11.1.2008 Где: Кыев, Украина Репутация: нет Всего: нет |
Если это закомментировать, то всё равно старый овал кто-то затирает :о) |
||||
|
|||||
| Metal_Heart |
|
|||
|
а почему бы и нет? ![]() ![]() Профиль Группа: Участник Сообщений: 728 Регистрация: 31.3.2005 Где: Москва Репутация: 1 Всего: 12 |
Prol,
Вот ответ на твой вопрос:
Ты же не хранишь ранее нарисованные фигуры? Нет? А кто это должен делать? Вот они и не стали этого реализовывать -------------------- не стыдно учиться, а стыдно не учиться |
|||
|
||||
| Prol |
|
||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 125 Регистрация: 11.1.2008 Где: Кыев, Украина Репутация: нет Всего: нет |
Нипанятнаааа... Как сделать так, чтобы "кто-то" не затирал старый овал, если его об этом не прошу? |
||||
|
|||||
| Metal_Heart |
|
|||
|
а почему бы и нет? ![]() ![]() Профиль Группа: Участник Сообщений: 728 Регистрация: 31.3.2005 Где: Москва Репутация: 1 Всего: 12 |
Prol, ну пойми ты наконец, что пока ты САМ не позаботишься о сохранении своих данный их никто хранит не будет!!! А чтоб тебе сохранить свои овалы - создаешь промежуточный буффер, типа Image - кажется. Рисуешь в нем, затем при repaint() выводишь на экран. У этого метода есть ещё несколько побочных плюсов ... -------------------- не стыдно учиться, а стыдно не учиться |
|||
|
||||
| batigoal |
|
|||
![]() Нелетучий Мыш ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6423 Регистрация: 28.12.2004 Где: Санктъ-Петербургъ Репутация: 7 Всего: 151 |
Prol, при reapint происходит полная перерисовка. Если тебе нужно, чтобы при этом рисовались ещё и старые изображения, тебе придется самому об этом позаботиться.
-------------------- "Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли) ЖоржЖЖ |
|||
|
||||
| Prol |
|
||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 125 Регистрация: 11.1.2008 Где: Кыев, Украина Репутация: нет Всего: нет |
Извините, я новик в Java. По опыту я знаю, что если я нарисовал один пиксел на экране, то он будет нарисованный, пока я сам его оттуда не сотру другим пикселом. Кто стирает мой старый овал без спросу? Как сказать ему, чтобы он не стирал мой старый овал? Добавлено через 2 минуты и 9 секунд
Что значит "полная перерисовка"? Перерисовка чего? Всего окна или только овала? Извините, я не могу уловить логику Java... |
||||
|
|||||
| Metal_Heart |
|
|||
|
а почему бы и нет? ![]() ![]() Профиль Группа: Участник Сообщений: 728 Регистрация: 31.3.2005 Где: Москва Репутация: 1 Всего: 12 |
перерисовка того компонента, на ком вызван repaint(). Сходи в раздел по книгам (ссылку не помню) и выбери себе достойную книгу. Начинать лучше всего с внимательного чтения документации, а не валить вину на "каких-то" программистов. -------------------- не стыдно учиться, а стыдно не учиться |
|||
|
||||
| Prol |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 125 Регистрация: 11.1.2008 Где: Кыев, Украина Репутация: нет Всего: нет |
Я не нашёл исходного кода метода repaint() |
|||
|
||||
| batigoal |
|
|||
![]() Нелетучий Мыш ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6423 Регистрация: 28.12.2004 Где: Санктъ-Петербургъ Репутация: 7 Всего: 151 |
Метод repaint() стирает изображение компонента и вызывает paint(), который выводит новый овал. В твоем коде он не объявлен, и наследуется из класса Applet. -------------------- "Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли) ЖоржЖЖ |
|||
|
||||
| Prol |
|
||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 125 Регистрация: 11.1.2008 Где: Кыев, Украина Репутация: нет Всего: нет |
Насколько я понимаю, метод repaint() в исходном тексте вызываетcя для объекта g. Единственное место, где я вижу рисование овала - это метод g.paint() Он рисует новый овал. То есть по умолчанию метод g.repaint() затирает любое изображение перерисовкой фона, который фон указан для объекта g ? Добавлено через 10 минут и 25 секунд Метод paint() для объекта g мною переопределён, если вы прочитаете исходник. В моём методе нету затирания старого овала. Кто затирает старый овал?
|
||||
|
|||||
| batigoal |
|
|||
![]() Нелетучий Мыш ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6423 Регистрация: 28.12.2004 Где: Санктъ-Петербургъ Репутация: 7 Всего: 151 |
Prol, прочитай ещё раз моё сообщение.
Добавлено через 1 минуту и 37 секунд Для апплета ClickMe, если быть точным. g - это просто графический контекст. -------------------- "Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли) ЖоржЖЖ |
|||
|
||||
| Prol |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 125 Регистрация: 11.1.2008 Где: Кыев, Украина Репутация: нет Всего: нет |
g - это объект класса Graphics, как я понимаю из описания. А repaint() - это метод объекта ClickMe класса Applet. Я правильно понимаю? Вопрос остаётся открытым, какой метод какого объекта меняет цвет на том месте, где был нарисован старый овал? Поскольку метод ClickMe.paint() мною переопределён, то видимо у ClickMe, а точнее у класса Applet, от которого ClickMe унаследован, есть какой-то невидимый метод, который затирает старый овал? |
|||
|
||||
| batigoal |
|
|||
![]() Нелетучий Мыш ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6423 Регистрация: 28.12.2004 Где: Санктъ-Петербургъ Репутация: 7 Всего: 151 |
Prol, повторяю в третий раз - это делает метод repaint().
-------------------- "Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли) ЖоржЖЖ |
|||
|
||||
| dorogoyIV |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1503 Регистрация: 26.3.2007 Репутация: 36 Всего: 46 |
вот посмотри: - здесь можно таскать инажимать
Это сообщение отредактировал(а) dorogoyIV - 11.1.2008, 18:22 |
|||
|
||||
| Prol |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 125 Регистрация: 11.1.2008 Где: Кыев, Украина Репутация: нет Всего: нет |
Повторю в третий раз, как сказать етому репайнту, чтобы он не делал того, что я его не прошу? Сейчас какой-то репейнт затирает без моего спросу безобидный овал, завтра какой-нибудь другой метод без моего спросу уничтожит данные пользователя и меня уволят с работы. Я не привык, чтобы мои программы делали то, чего я в них явно не прописал. Это сообщение отредактировал(а) Prol - 11.1.2008, 21:30 |
|||
|
||||
| w1nd |
|
||||||
![]() Вертилятор ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1077 Регистрация: 22.3.2006 Где: Москва Репутация: 23 Всего: 54 |
Никоим образом.
Такое возможно только в однооконных системах. В многооконной системе каждое окно и каждый компонент должны уметь полностью нарисовать себя в любой момент, потому что экран не принадлежит ни одному из них. Если вы нарисовали овал #1 и хотите, чтобы он остался на месте, вы должны перерисовывать его всякий раз, когда вызывается paint().
Вы ничего не написали в вашей программе для того, чтобы однажды нарисованные фигуры сохранялись. Это сообщение отредактировал(а) w1nd - 12.1.2008, 01:57 -------------------- ![]() ![]() |
||||||
|
|||||||
| batigoal |
|
|||
![]() Нелетучий Мыш ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6423 Регистрация: 28.12.2004 Где: Санктъ-Петербургъ Репутация: 7 Всего: 151 |
Раньше у тебя этот вопрос не звучал, было только - "кто?" Думаю, ты можешь его переопределить у себя в классе, но это - неправильный подход. Правильный - это запомнить тем или иным образом предыдущие положения овалов и отрисовывать их все в paint(). -------------------- "Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли) ЖоржЖЖ |
|||
|
||||
| Prol |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 125 Регистрация: 11.1.2008 Где: Кыев, Украина Репутация: нет Всего: нет |
Я понял, в чём проблема. :о)))
Я привык, что монитор (окно) - это память. Например: - рисуем пиксел в координатах 100,100 - рисуем пиксел в координатах 200,200 Пока мы ничего не рисуем в координатах 100,100, то там останется пиксел, который мы нарисовали раньше. Поэтому меня напугало исчезновение овала со старого места. А вот что я понял: Что при любом событии перерисовывается полностью всё окно, начиная от фона и заканчивая каждым объектом. Я привык перемещение объекта программировать так: сначала его стереть на старом месте, потом нарисовать на новом. А тут в Java получается, что я его на новом месте нарисовал своим методом paint, а кто-то его на старом месте стёр. А я не люблю, чтобы моя прога делала что-то без моего на то прямого указания. Скачал исходники, нашёл repaint в java.awt.Component и понял, что при любом событии вызывается пайнт контейнера, который полностью его перерисовывает, начиная с фона. Фон перерисовывается. старый овал стирается, потом рисуется новый овал. :о))) Зверство. Я не привык чтобы реакцией на любое событие была перерисовка всего окна со всеми объектами изображёнными в окне... а потом удивляются, куда делась мощность современных компов... да просто программисты не мудрствуя лукаво при любом событии заново перерисовывают всё окно... нда... |
|||
|
||||
| w1nd |
|
|||
![]() Вертилятор ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1077 Регистрация: 22.3.2006 Где: Москва Репутация: 23 Всего: 54 |
Prol, это не свойство java или ещё какого-либо runtime. Это свойство любой графической оконной системы. Отродясь. Уже лет двадцать как. И именно для того, чтобы ресурсов компьютера (в данном случае - памяти) хоть на что-то хватало. Вылезайте уже из каменного века - текстовых оконных систем
Эта память разделяется между всеми компонентами, которые могут перекрываться. Вы что же думаете, что в видеопамять можно запихать эдак сотню-другую видеостраниц?! Это сообщение отредактировал(а) w1nd - 12.1.2008, 01:59 -------------------- ![]() ![]() |
|||
|
||||
| Prol |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 125 Регистрация: 11.1.2008 Где: Кыев, Украина Репутация: нет Всего: нет |
Да я понял :о)
Раньше компьютеры были большие и памяти имели мало, поэтому приходилось в сто килобайт писать всё приложение причём с картинками, которое в реалтайме обслуживало сотню юзеров :о) А сейчас компьютеры маленькие, память имеют - экономить не нужно, так что можно и окна перерисовывать полностью, плевать на ресурсы, потому что обслуживает одного юзера :о))) В видеопамять можно запихнуть хоть тысячу видеостраниц :о) Прерывание на загрузку отсутствуещей в памяти страницы ещё никто не отменял. |
|||
|
||||
| w1nd |
|
|||
![]() Вертилятор ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1077 Регистрация: 22.3.2006 Где: Москва Репутация: 23 Всего: 54 |
Вы бы хоть прочитали, что я написал (если сами не понимаете) и немножко подумали прежде.
Вас обманули. Такой возможности нет и никогда не было. Прерывание есть, но не в видеопамяти честь. -------------------- ![]() ![]() |
|||
|
||||
| nornad |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1079 Регистрация: 16.2.2007 Где: в Караганде Репутация: 6 Всего: 31 |
Если я ничего не путаю, то в винде, например, сейчас доступна либо одна страница памяти, либо есть возможность получить доступ ко второй странице и использовать её в качестве видеобуфера. Нарисовал в буфер - перключился на него, нарисовал в предыдущем - перключился. Но это - нативная штука и в Java вроде бы явным образом не присутствует (хотя гарантировать не буду, ибо на этом уровне не лазал). Про линукс и другие платформы тоже ничего не скажу, ибо не знаю. P.S. Писать на Java используя парадигмы DOS'а - это круто. -------------------- Три достоинства программиста: Леность, Нетерпение и Гордость Ларри Уолл |
|||
|
||||
| Prol |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 125 Регистрация: 11.1.2008 Где: Кыев, Украина Репутация: нет Всего: нет |
На Java работают микроволновки и стиральные машинки, и прекрасно обрабатывают прерывания от электромоторов и кнопок на панелях управления этими дивайсами :о) P.S. Рекомендую почитать, что было до "парадигмы ДОСа" :о) Вы удивитесь, насколько опошлились программисты, развращённые безответственностью за свои программы. Более того, программисты воинственно обнаглели, объявив всему миру в своих так называемых "лицензиях", что не несут ответственности за последствия действия своих программ. |
|||
|
||||
| nornad |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1079 Регистрация: 16.2.2007 Где: в Караганде Репутация: 6 Всего: 31 |
Только вот там малость не та JVM и многозадачности не наблюдается. Ты же хочешь рисовать в многозадачной среде, а посему - забудь о микроволновках и интеллектуальных открывашках пивных банок. Чтобы писать сносно на каком-либо языке надо в общих чертах с ним разобраться и знать основные фразы. Чтобы писать правильно - надо понять язык и принять его. Заметь, "сносно" никогда не бывает лучшего качества, чем "правильно". Будем пиписькамивозрастом меряться? Я в курсе, что было "до". Я знаю, как "надо". Но в современных условиях частью критериев можно немного пренебречь. Отсюда и GC, кстати. Потому что памяти сейчас много. А когда совсем не хватает - вот тогда наступают тяжёлые времена для развращённой прыщавой восторженной молодёжи Но при всём при этом эти прыщавые юнцы, приняв современную идеологию, будут писать быстрее тебя с незыблемыми принципами. И могут оттяпать немалый кусок хлеба, если не подсуетиться вовремя. P.S. Если кому интересно, мой возраст есть в профиле. Точнее, дата рождения. Не старик, конечно, но и не прыщав уже, как мне кажется. -------------------- Три достоинства программиста: Леность, Нетерпение и Гордость Ларри Уолл |
|||
|
||||
| Prol |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 125 Регистрация: 11.1.2008 Где: Кыев, Украина Репутация: нет Всего: нет |
Ну и пусть тяпают :о) Всех денег не заработаешь :о) Тем более, скоро пенсия :о) Пусть молодые суетятся, пока ихние девки моложе :о) |
|||
|
||||
| nornad |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1079 Регистрация: 16.2.2007 Где: в Караганде Репутация: 6 Всего: 31 |
-------------------- Три достоинства программиста: Леность, Нетерпение и Гордость Ларри Уолл |
|||
|
||||
| Prol |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 125 Регистрация: 11.1.2008 Где: Кыев, Украина Репутация: нет Всего: нет |
|
|||
|
||||
![]()
|
| Правила форума "Java" | |
|
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, jk1. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Java: GUI и Java FX приложения | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |