Биохимия спиртового брожения: Основу технологии получения пива составляет спиртовое брожение, - при котором сахар превращается...
Механическое удерживание земляных масс: Механическое удерживание земляных масс на склоне обеспечивают контрфорсными сооружениями различных конструкций...
Топ:
Комплексной системы оценки состояния охраны труда на производственном объекте (КСОТ-П): Цели и задачи Комплексной системы оценки состояния охраны труда и определению факторов рисков по охране труда...
Выпускная квалификационная работа: Основная часть ВКР, как правило, состоит из двух-трех глав, каждая из которых, в свою очередь...
Отражение на счетах бухгалтерского учета процесса приобретения: Процесс заготовления представляет систему экономических событий, включающих приобретение организацией у поставщиков сырья...
Интересное:
Искусственное повышение поверхности территории: Варианты искусственного повышения поверхности территории необходимо выбирать на основе анализа следующих характеристик защищаемой территории...
Уполаживание и террасирование склонов: Если глубина оврага более 5 м необходимо устройство берм. Варианты использования оврагов для градостроительных целей...
Лечение прогрессирующих форм рака: Одним из наиболее важных достижений экспериментальной химиотерапии опухолей, начатой в 60-х и реализованной в 70-х годах, является...
Дисциплины:
2022-10-10 | 52 |
5.00
из
|
Заказать работу |
|
|
Ответ: Где-то в тексте, если его внимательно читать, вы увидите, что вся идея в том, что он должен быть правильно настроенным этот объект. Что я под этим подразумеваю? А вот представьте себе такую историю. Вот у вас на экране главное окно. И вы пользователю говорите: «Рисуй!». Дали ему возможность рисовать. Вот он рисует-рисует. А теперь скажите, а было бы нормально, если бы пользователь вышел за границы окна? Вот, например, рисовалка, которой я пользуюсь, она рисует где хочет. Она как раз берет в качестве поверхности для рисования экран. Не какое-то конкретное окно, а весь экран. Но она для этого и писалась, чтобы я мог рисовать по всему экрану. А вот, например, когда я нахожусь внутри Paint, происходит отсечение. Почему? Есть такое понятие «клиентская область». И я за ее пределы не могу выйти. А кто это делает? Границы объекта. Когда его создают, то его создают не просто, а для конкретного окна. И я говорю: «вот для этого окна Graphicsмне дай!». И вам в этом объекте настроят область отсечения, чтобы вы не могли испортить.
Итак, чтобы попросить Graphicsнужно взять окно. Я сейчас переключусь в ваш конструктор. Это же окно (AWT)? Да, он от Frameнаследует. Это как раз окно. Я пишу this.getGraphics(). У любого окна есть готовый метод. Я говорю: «дай мне Graphics». И они мне его создадут и правильно настроят. И я не смогу выйти за контур этой клиентской части этого окна. А кто такой MyListener? Кто он такой? Никто. Вы можете тут thisнаписать, да вообще, что угодно. Как здесь можно сделать возможность получить объект Graphics? Тогда нужно что передавать? Ссылочку на окно. Вот понимаете?
И начинается… Ему нужно ссылочку на окно, ссылочку еще на что-то, ссылочку еще куда-то. Потому что он у вас отдельный класс и до функционала Frame (а он ему очень нужен) дотянуться не может. Мы сейчас тогда должны будем сделать здесь конструктор с параметрами, создать MyListener, вы передаете this. Это целая история. Здесь надо сделать член класса. Запоминать это все. Вы спросите: «это сложно разве сделать?». Нет, не сложно. Но это уже сделано. Если вы сделаете внутренний класс, то он получает ссылку на тот объект в котором он находится. Помните, мы на прошлом курсе изучали, что у вас может быть внутренний класс со словом staticи без слова static. Если он со словом static, то он не получает ссылку на объект внешнего класса, а если он без static (а это именно тот вариант, который нам нужен), то получает эту ссылку.
|
Поэтому я сейчас вырезаю вот этот класс и вставляю в AWT.
Теперь он стал членом класса. И теперь все понятно. Я пишу getGraphics(). Все работает. Вы спросите: «откуда она его взяла?». Из контейнера. Это внутренний класс и у него ссылка на контейнер.
Вы видите насколько данное взаимодействие удобно? Вы же будете постоянно во всех пользовательских интерфейсах делать обработчики на события. Нам нужен функционал из контейнера. Поэтому внутренний класс – это лучшее решение, потому что уже связь между ними сделана. И вам не нужно лишний код каждый раз писать. Всё. Мы все рисование отработали. Учтите, что по умолчанию объект Graphicsзапускает программу, а на экране ничего нет. По умолчанию, когда создается объект Graphics, толщина линии равна одному пикселю черного цвета. Линия непрерывная.
Вопрос: Запустили программу? Работает?
Ответ: Нет.
Вопрос: А почему не рисует?
Ответ: Мы этот объект сделали. А мы подписались на него? Поэтому открываем конструктор.
Во-первых, мы должны создать объект этого класса. Мы же собирались на два события подписаться. Как создать объект, тут все понятно. Ничего нового для нас естественно нет.
MyListener my = new MyListener();
Создали. И вот теперь этот объект «my» подписываем. Вопрос: «накого?».
· addMouseListener(my);
· addMouseMotionListener(my);
Вот теперь после этого наша программа должна работать.
|
|
Папиллярные узоры пальцев рук - маркер спортивных способностей: дерматоглифические признаки формируются на 3-5 месяце беременности, не изменяются в течение жизни...
Поперечные профили набережных и береговой полосы: На городских территориях берегоукрепление проектируют с учетом технических и экономических требований, но особое значение придают эстетическим...
Кормораздатчик мобильный электрифицированный: схема и процесс работы устройства...
Индивидуальные и групповые автопоилки: для животных. Схемы и конструкции...
© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!