Архитектура электронного правительства: Единая архитектура – это методологический подход при создании системы управления государства, который строится...
Поперечные профили набережных и береговой полосы: На городских территориях берегоукрепление проектируют с учетом технических и экономических требований, но особое значение придают эстетическим...
Топ:
История развития методов оптимизации: теорема Куна-Таккера, метод Лагранжа, роль выпуклости в оптимизации...
Генеалогическое древо Султанов Османской империи: Османские правители, вначале, будучи еще бейлербеями Анатолии, женились на дочерях византийских императоров...
Теоретическая значимость работы: Описание теоретической значимости (ценности) результатов исследования должно присутствовать во введении...
Интересное:
Распространение рака на другие отдаленные от желудка органы: Характерных симптомов рака желудка не существует. Выраженные симптомы появляются, когда опухоль...
Принципы управления денежными потоками: одним из методов контроля за состоянием денежной наличности является...
Как мы говорим и как мы слушаем: общение можно сравнить с огромным зонтиком, под которым скрыто все...
Дисциплины:
2022-10-10 | 46 |
5.00
из
|
Заказать работу |
|
|
Ответ: Второй вариант лучше. Но чтобы это понять, мы сначала реализуем первый вариант.
Итак, наша сегодняшняя задача – это пользовательские интерфейсы. Идем от простого к сложному. Вчера мы начали делать программу, которую можно считать простой. Соответственно, программа 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. Вся графика собрана в этом классе.
|
|
Организация стока поверхностных вод: Наибольшее количество влаги на земном шаре испаряется с поверхности морей и океанов (88‰)...
Семя – орган полового размножения и расселения растений: наружи у семян имеется плотный покров – кожура...
Историки об Елизавете Петровне: Елизавета попала между двумя встречными культурными течениями, воспитывалась среди новых европейских веяний и преданий...
Индивидуальные и групповые автопоилки: для животных. Схемы и конструкции...
© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!