Вопрос: как добраться до графики, если класс абстрактный? — КиберПедия 

Автоматическое растормаживание колес: Тормозные устройства колес предназначены для уменьше­ния длины пробега и улучшения маневрирования ВС при...

Своеобразие русской архитектуры: Основной материал – дерево – быстрота постройки, но недолговечность и необходимость деления...

Вопрос: как добраться до графики, если класс абстрактный?

2022-10-10 45
Вопрос: как добраться до графики, если класс абстрактный? 0.00 из 5.00 0 оценок
Заказать работу

Ответ: Где-то в тексте, если его внимательно читать, вы увидите, что вся идея в том, что он должен быть правильно настроенным этот объект. Что я под этим подразумеваю? А вот представьте себе такую историю. Вот у вас на экране главное окно. И вы пользователю говорите: «Рисуй!». Дали ему возможность рисовать. Вот он рисует-рисует. А теперь скажите, а было бы нормально, если бы пользователь вышел за границы окна? Вот, например, рисовалка, которой я пользуюсь, она рисует где хочет. Она как раз берет в качестве поверхности для рисования экран. Не какое-то конкретное окно, а весь экран. Но она для этого и писалась, чтобы я мог рисовать по всему экрану. А вот, например, когда я нахожусь внутри 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);

Вот теперь после этого наша программа должна работать.


Поделиться с друзьями:

Организация стока поверхностных вод: Наибольшее количество влаги на земном шаре испаряется с поверхности морей и океанов (88‰)...

Механическое удерживание земляных масс: Механическое удерживание земляных масс на склоне обеспечивают контрфорсными сооружениями различных конструкций...

Археология об основании Рима: Новые раскопки проясняют и такой острый дискуссионный вопрос, как дата самого возникновения Рима...

Типы сооружений для обработки осадков: Септиками называются сооружения, в которых одновременно происходят осветление сточной жидкости...



© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!

0.007 с.