Вопрос: А есть какой-то критерий как выбрать? Где лучше сделать? Отдельный класс написать и реализовать там два интерфейса или я сейчас здесь напишу класс и здесь напишу реализацию? — КиберПедия 

История развития пистолетов-пулеметов: Предпосылкой для возникновения пистолетов-пулеметов послужила давняя тенденция тяготения винтовок...

Особенности сооружения опор в сложных условиях: Сооружение ВЛ в районах с суровыми климатическими и тяжелыми геологическими условиями...

Вопрос: А есть какой-то критерий как выбрать? Где лучше сделать? Отдельный класс написать и реализовать там два интерфейса или я сейчас здесь напишу класс и здесь напишу реализацию?

2022-10-10 41
Вопрос: А есть какой-то критерий как выбрать? Где лучше сделать? Отдельный класс написать и реализовать там два интерфейса или я сейчас здесь напишу класс и здесь напишу реализацию? 0.00 из 5.00 0 оценок
Заказать работу

Ответ: Второй вариант лучше. Но чтобы это понять, мы сначала реализуем первый вариант.

Итак, наша сегодняшняя задача – это пользовательские интерфейсы. Идем от простого к сложному. Вчера мы начали делать программу, которую можно считать простой. Соответственно, программа AWTу всех есть. Открываем то, что вчера сделали. Мы создали наследник специального класса из библиотеки – Frameв данном случае. Кроме настроек мы обязаны были подписаться на события окошка. Когда мы его запускаем, оно закрывается. Последующая наша обработка событий в этой архитектуре будет связана с обработкой событий мыши. Мы в прошлый раз договорились, что мы сделаем класс отдельно для того чтобы было потом видно неудобства такого решения. Анонимный класс тоже делать не хорошо. Потому что представьте, что вам надо обработчики на 10 событий. Ну что это за «простыня» будет? А даже может быть не это страшно. А страшно то, что я хочу сделать один объект и его подписать на разные события. Конечно, можно создать анонимный объект и в него положить всякие Listener. Но отдельным классом это сделать проще.

А значит на проекте AWT (там где папочка пакетов) создаем новый класс Java. Назовем его MyListener. Мы создали отдельно класс в котором сейчас будем разбираться. Естественно, мы по максимуму, будем стараться генерировать код. Начнем только с importчтобы с Intellisenseне было проблем.

Итак. СразуставимпослеMyListener «implements» и уже после этого будем выбирать те интерфейсы, которые нам нужны. Смотрите, метод называется addMouseListener. Поэтому выбираем MouseListener и MouseMotionListener.

Можно было бы сейчас остановиться и попросить добавить реализацию метода, а можно сразу все. В первом 4 метода, а во втором 2. Самое важное, что вы интерфейсы в список добавили. Нажимаете на эту лампочку и выбираете «Реализовать все абстрактный методы». Код, конечно, надо уплотнять. Это никуда не годится.

 

А потом уплотнение начнет происходить «что внутри метода написано». А что там у нас внутри? Заглушки. А события-то будут идти. И значит эта заглушка будет срабатывать. Поэтому все содержимое от фигурной скобки до фигурной скобки я стираю. И у меня получаются пустые фигурные скобочки.

Нам будут нужны следующие методы:

· mousePressed – т.е. мы нажали кнопку. Это будет стартовая точка и оттуда пойдут линии. он позволит задать нам начальную точку.

· mouseDragged – это событие происходит, когда вы двигаете мышкой с нажатой кнопкой. и очень удобно. вы нажали, начали рисовать, отпустили и перестали рисовать.

Вот собственно говоря всего-то из этого нужно два метода. Но они оказались в разных интерфейсах. Поэтому приходится цеплять два интерфейса.

Итак, что делать в методе mousePressed? Надо зафиксировать точку. А чтобы ее зафиксировать, эти данные должны быть как член класса. Значит, соответственно, после открывающей фигурной скобки в начале класса пишу:

Как получить эти значения? Вы пишете «x0 =». И у MouseEvent есть два метода: getX() и getY().

· getX() – координата в системе окна по оси X

· getX() – координата в системе окна по оси X

· getXOnScreen() – координата в системе экрана по оси X

· getYOnScreen() – координата в системе экрана по оси Y

Но зачем нам в системе экрана? Мы же в окне рисуем. Поэтому getX(), getY().

Вот и всё. Элементарно.

Что дальше? А дальше надо рисовать. У нас начальная точка есть. Где мы находимся в текущий момент, мы знаем. Это mouseDragged();Здесь мы также можем дописать пару x,y. Соответственно, это будут текущие значения.

ООП в этом смысле все еще красиво. Вам также все на блюдечке приносят и уносят.

Осталось только линии провести между этими точками. Есть начальная точка, а есть конечная. Их нужно соединить линиями. Эту точку нельзя писать, потому что если вы будете точку рисовать, то мышка движется, но событие, что она сдвинулась идет не по каждому пикселю и у вас будет прерывистая линия. Поэтому точки должны соединяться линиями. Так что нам надо нарисовать линию. Где линия? В каком-то классе. В каком? В каком-то классе, отвечающем за рисование. Давайте посмотрим. У нас есть такая замечательная вещь, как класс Graphics. И мы говорим: «О!!! Graphics!!!». И тут сразу раз, и мы видим, что он абстрактный. Поэтому если нельзя создавать объект этого класса, значит нельзя. А он действительно не предназначен для того, чтобы создавать. Вы спросите: «может быть еще что-то есть?». Нет, это именно он.

Вот если здесь посмотреть, то здесь все какие хотите графические функции. drawArc(), drawImage(), а вот она наша drawLine. Вся графика собрана в этом классе.


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

Адаптации растений и животных к жизни в горах: Большое значение для жизни организмов в горах имеют степень расчленения, крутизна и экспозиционные различия склонов...

История развития пистолетов-пулеметов: Предпосылкой для возникновения пистолетов-пулеметов послужила давняя тенденция тяготения винтовок...

Индивидуальные и групповые автопоилки: для животных. Схемы и конструкции...

Историки об Елизавете Петровне: Елизавета попала между двумя встречными культурными течениями, воспитывалась среди новых европейских веяний и преданий...



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

0.012 с.