[Java] Введение в GUI - Swing
Полезные горячие кнопки в IDEA:
- Чтобы быстро создать
main-функцию: напечатать внутри класса вне каких-либо методовpsvmи нажать Enter - Чтобы импортировать класс (когда он красный): поставить каретку для печатанья на класс и нажать
Alt+Enter->Import - Чтобы отформатировать код:
Alt+Ctrl+L - Чтобы запустить редактируемый в данный момент файл:
Ctrl+Shift+F10 - Чтобы IDE подсказала какие методы и поля есть у данного объекта: напечатать
myObject.(можно еще явно нажатьCtrl+Space) - Чтобы посмотреть какие аргументы принимает метод: напечатать
g.drawLine(и нажатьCtrl+P
Вводное задание
Сдача задания: в начале следующего урока вы должны запустить на компьютере то что вы доделали дома и получить оценку за домашнее задание
1) Создайте новый проект
2) Создайте новый класс MyPanel (разверните сверху слева структуру проекта, там src -> правый клик -> New -> Java Class)
3) Укажите что он наследуется от JPanel (import javax.swing.JPanel;)
4) Переопределите метод public void paintComponent(Graphics g) - пусть пока будет без команд внутри
5) Создайте новый класс Main и в нем main-функцию и выполните в ней:
- Создайте объект-окно:
JFrame frame = new JFrame()(import import javax.swing.JFrame;) - Сделайте окно видимым:
frame.setVisible(true); - Проверьте что программа запускается (см. горячую кнопку запуска выше) и создает окошко (пока что очень маленькое)
- Через метод окна
setTitleукажите название окна и запустите вновь, чтобы проверить что название изменилось (может потребоваться его увеличить, чтобы рассмотреть название) - Если вы что-то не понимаете из того что произошло - позовите меня и спросите
6) Улучшите ваше окошко:
- Сделайте его побольше:
frame.setSize(...); - Укажите что при закрытии окошка нужно завершить выполнение программы:
frame.setDefaultCloseOperation(EXIT_ON_CLOSE); - Создайте объект - вашу панель:
MyPanel panel = new MyPanel(); - Добавьте эту панель в окно:
frame.add(panel); - Добавьте в вашем классе
MyPanelв переопределении методаpaintComponentрисование отрезка - через методg.drawLine(...)у объектаGraphics g(из точки(x=10, y=20)в точку(x=200, y=100)) - Проверьте что программа запускается и рисует прямую так, как вы ожидали бы
- Нарисуйте прямоугольник, чья диагональ - это уже нарисованный ранее отрезок (через метод
drawRect(...)у графики) - Нарисуйте что-нибудь красивое, например единорога (в вашем арсенале еще и
drawOval(...), иdrawString(...)для добавления текста) - Если все хорошо работает - скажите мне, если что-то не работает и вы запутались - иподавно скажите
7) Начните рисовать двигающийся отрезок:
- Метод возвращающий текущее время -
System.currentTimeMillis()(измеряется в миллисекундах, т.е. в тысячных секунды) - обратите внимание что он возвращает неint, аlong - Если она не двигается, то добавьте
System.out.println("paint")чтобы проверить как часто происходит отрисовка - Оказывается рисование производится всего лишь один раз на старте. Чтобы оно происходило чаще - сделайте в конце
main-Функции циклwhile (true) { frame.repaint(); } - Сделайте так, чтобы отрезок вращалась вокруг своей оси (используйте
Math.sinиMath.cos)
8) Добавьте цвета:
- Перед вызовом
drawLineвызовите методg.setColor(Color.green); - Или вы можете передавать произвольный цвет, созданный через конструктор
new Color(r, g, b) - И обратите внимание что если вы хотите залить объект - то к вашим услугам например
fillRectиfillOval.
9) Можете попробовать заглянуть вперед и начать использовать картинки чтобы собрать интересную анимацию из них.
10) Нарисуйте что-нибудь красивое, например изобразите дождь (по сути отрезки которые в зависимости от времени двигаются сверху вниз):

Или дождь падающий наискосок (с помощью косинусов и синусов):

Или полет сквозь звезды (точки или отрезки удаляющиеся от центра от времени, тоже с помощью косинусов и синусов):
Записи с доски
