Вопрос: Надо накидать простенькую программу в Swing? — КиберПедия 

Кормораздатчик мобильный электрифицированный: схема и процесс работы устройства...

Эмиссия газов от очистных сооружений канализации: В последние годы внимание мирового сообщества сосредоточено на экологических проблемах...

Вопрос: Надо накидать простенькую программу в Swing?

2022-10-10 44
Вопрос: Надо накидать простенькую программу в Swing? 0.00 из 5.00 0 оценок
Заказать работу

Ответ: надо.

Создаем обычный проект. Называем его MySwing1. Для того чтобы получить Swing-приложение нужно добавить JFrame.

Система предлагает имя «NewJFrame». Вам нравится имя? Мне да. Нажимаем готово.

Всё. Вам генерируют код. Вам генерируют интерфейс. Вам генерируют формочку в дизайнере и говорят: «ТВОРИ!».

Наверху вы можете увидеть три иконки: «ИСТОЧНИК», «ПРОЕКТ», «ИСТОРИЯ».

Нажимаем на «ИСТОЧНИК» и это будет наш тот же NewJFrame, но уже в варианте кода на Java. Кстати, если посмотреть в самый низ, то там есть main.

Я думаю вы понимаете, что две main–это слишком для программы. Поэтому я вас сейчас прошу правильно удалить. Удаляем первый файл MySwing.

Всё. В нашей проекте остался один файлик – NewJFrame. Что это? Давайте посмотрим на код.

Прокомментируем код. Поехали. От кого он наследует? От JFrame. Что это значит? Главное окно.

По доброте они сделали вам конструктор. Вот он.

А в самом низу main.

А это значит, если я сейчас нажму F6, то программа спросит следующее:

Ну т.к. вы main поменяли, то вообще среда должна спросить: «вот это теперь новый main?». Вы говорите: «Да». И программа запустилась.

Давайте теперь разбираться с main. Обратите внимание, что в main есть свернутый кусочек кода.

Если мы раскроем его, то увидим следующее.

На catchне смотрим. Смотрим на try. Написано «javax.swing.UIManager.LookAndFeelInfo». Пытаемся объяснить, что сие означает. Ребята, которые сказали: «мы нарисуем себя сами», они сами и придумали, как они это сделают. Как вы думаете – это похоже на то что здесь в ОС, если они сами это придумали? Мало похоже. Вот! В том то и дело. Понимаете, они сделали какой-то внешний вид Swing, но тот, который они сами хотели. Потом им народ сказал: «Ребята! А не могли бы вы как-то сделать это похожим на Windows?». Они говорят: «Ладно сделаем!». И они сделали свой неповторимый стиль «Metal», потом сделали внешний вид аля «Windows», потом сделаливнешний вид аля «Linux», потом сделаливнешний вид аля «Macintosh» (он правда только на Macintoshи запустится). Потом они еще сделали новый вариант внешнего вида, а потом они могут сделать еще вариант внешнего вида. В общем итоге они сделали много.

Сегодня по умолчанию используется в Java 8 «Nimbus». Но обратите внимание на цикл for, который просит все варианты, какие есть. Видите? «getInstalledLookAndFeels()». Это по сути цикл для коллекции вы видите. И каждый вариант, который вам возвращают, можно увидеть через печать с помощью System.out.println.

run: Metal Nimbus CDE/Motif – «аляLinux» Windows Windows Classic

Ну ребята старались, да и сейчас еще стараются. В обще есть свои неповторимые варианты внешнего вида. Я, конечно, не хочу сказать, что мы это будем делать, но возможности существуют. Ваш дизайнер может разработать свой внешний вид, а вы можете это запрограммировать. Дело в том, что в этой библиотеке уже хотя бы присутствуют какие-то попытки реализовать то, что называется Model-ViewController. Это небольшая попытка, потому что получилась частичная реализация. Но уже есть какое-то движение в эту сторону. Дело в том, что они отделили данные от объектов и они предложили создать отдельно UIManager, который занимается прорисовкой. Если ему сказать: «рисуй так!», то он будет рисовать все по-другому. Т.е. это не сам объект себя рисует. Внутри любого объекта Swingесть ссылочка на того, кто его рисует. И когда ему говорят: «нарисуй себя!», то он переадресует UIManager, чтобы он его нарисовал. Тем самым вы можете менять внешний вид программы на Swing. Даже в демонстрационных версиях с Oracle, там прямо пункты меню есть. Открываете меню и там выбор внешнего вида. Это архитектура, которая позволяет вынести отдельно то, как все выглядит на экране. Если вы все остальное тоже будете стараться делать правильно, то данные будут отдельно, бизнес-логика отдельно, рисование отдельно. Ну это уже что-то похожее на Model-ViewController. Т.е. какие-то попытки в архитектуре начали делаться. Вот почему они выбрали Nimbusпо умолчанию я не знаю.

А дальше идет какая-то строчка в mainеще. Если вы в это строчку внимательно вглядитесь, то я очень надеюсь, что вы вспомните то, что у нас было на первом занятии. Видите Runnable? Это поток. Вы спросите: «и зачем здесь запускается поток?». Тут на самом деле не написано newThread, тут этого нет. Здесь какая-то другая история. Давайте разбираться с чем это все связано.

Момент общий на самом деле. Запомните, что любой пользовательский интерфейс является однопотоковым. Это значит, что вы работать с любым элементом управления можете только из одного потока, который его этот элемент создал, скажем так, владелец этого элемента управления. И кстати, это не main. Мы с вами перед первой программой писали, где рисовали мышкой. Что мы в mainделали? Вызывали конструкториз main. Это уже с т.з. архитектуры абсолютно некорректно. Почему? Простите… Какое вы имеете право обращаться к элементу управления из главного потока? Главный поток не является владельцем элемента. А кто? А вот есть специальный EventQueueпоток. Вот он владелец элементов. И вы можете только из этого eventQueueобращаться и работать с элементами AWTи Swing. У вас архитектура AWTи Swing– один поток, который является владельцем и только он один может с ними работать. Поэтому писать newJFrameв main нельзя. Это неправильный поток. И вот эта конструкция, которая здесь в три строчки – она переключает выполнение на поток пользовательского интерфейса. Мы говорим с помощью метода invokeLater: «вот этот код вызови в правильном потоке». И в runпишет то, что нам нужно, поэтому вот этот код будет вызван из EventQueue. Всё. Только так корректно.

Вы скажете: «ну как-то это странно». Это единственный вариант, который работает с пользовательскими интерфейсами. Точно также написано у Microsoft, точно также сделано в JavaFX. Потому что это только один правильный и безопасный вариант. Все пользовательские интерфейсы однопотоковые.

Единственный недостаток в AWTи Swingзаключается в том, что когда вы обращаетесь к элементу управления из неправильного потока, они это не проверяют и не ругаются. А значит вы можете получить трудно устраняемую скрытую ошибку. Потому что если объект начнет работать из разных потоков, а они не потокобезопасны, то вы можете в нем повредить какие-то данные и всё. До свидания.

 

Хорошо, что вы видим на экране?

Мы видим на экране то, что в конструкторе вызывается initComponents(); То, что создал initComponents() –вы видите на экране. А initComponents() состоит из следующих строчек кода.

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

Так вот это код, который вы видите на сером фоне, сгенерирован визуальным дизайнером. Если вы хотите его изменить, то вы пользуетесь визуальным дизайнером. Руками его переписать нельзя. Потому что если бы вам дали возможность его переписать руками, то вы бы такую «отсебятину» написали, что визуальный дизайнер сразу бы рухнул. Конечно, можно сломать визуальный дизайнер, но надо специально этим заниматься. Так что этот файл мы не переписываем. Мы его меняем по кнопочке «ПРОЕКТ».

Открывается такая картинка:

Если вы запускаете F6, то эту формочку вы видите на экране. Вы спросите: «я могу изменить размер формочки?». Конечно, можете.

А теперь самое важное. Ничего не закрывайте, то что находится справа. Здесь надо только свернуть. Видите стоит «минусик»?

Я беру элементы управления Swing

Нахожу JButton. Кстати, надо смотреть на всплывающую подсказку. Дело в том, что в английской версии в этих окошках пишутся имена классов. А наши перевели имена классов. И когда у меня будет написано в какой-то лабораторной работе «добавь текстовое поле» и имя класса. Вы берете первое попавшееся и кидаете. А это не то. Всегда смотрите имена классов.

Значит я беру кнопку и просто переношу сюда. Вот ваша кнопка.

Вот ваш список. Любой элемент управления можно Drag-And-Dropсюда перенести.

Нажимаете F6. Вот пожалуйста. Один в один. Как в дизайнере, так и на экране.

Это визуальное проектирование.


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

Общие условия выбора системы дренажа: Система дренажа выбирается в зависимости от характера защищаемого...

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

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

Таксономические единицы (категории) растений: Каждая система классификации состоит из определённых соподчиненных друг другу...



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

0.013 с.