Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология Образование Политология Производство Психология Стандартизация Технологии |
Создание сложного изображения из повторяющегося простого
Создадим изображение из множества логотипов Мерседеса:
Рис. 2.30. Множество логотипов Мерседес
Для этого сначала создадим класс MyPanel3, расширяющий JPanel. Затем добавим в сгенерированный код класса MyPanel3 метод paint() с кодом рисования одного логотипа Мерседеса:
import java.awt.Color; import java.awt.Graphics; import javax.swing.JPanel;
public class MyPanel3 extends JPanel {
public void paint(Graphics g) { super.paint(g); g.setColor(Color.red); // координаты центра логотипа ( x = 100, y = 100) int x = 100; int y = 100; // окружность вокруг центра логотипа g . drawOval ( x - 10, y - 10, 21, 21);
// рисуем три линии внутри окружности // линия, идущая от верхней части окружности до центра g.drawLine(x, y, x, y - 10); // линия, идущая от левой части окружности до центра g.drawLine(x, y, x - 9, y + 6); // линия, идущая от правой части окружности до центра g.drawLine(x, y, x + 9, y + 6); } }
Обратите внимание на то, что элементы логотипа рисуются, используя относительные координаты: y–10, x–9, y+6 и т.д. Это позволяет нам легко нарисовать изображение логотипа в любом месте экрана. Для этого достаточно изменить координаты x и y. В классе Home изменим в методе initialize() строку создания панели с JPanel panel = new MyPanel2(); на JPanel panel = new MyPanel3();
После чего запустим Home на выполнение. Мы увидим такой вид запустившегося приложения:
Рис. 2.31. Рисуется один логотип Чтобы вывести изображение в виде строки из логотипов, нам понадобится цикл. Будем использовать while. В начале зададим начальные координаты центра логотипа и будем продвигать центр вправо, рисуя логотипы один за другим:
import java.awt.Color; import java.awt.Graphics; import javax.swing.JPanel;
public class MyPanel3 extends JPanel {
public void paint(Graphics g) { super.paint(g); g.setColor(Color.red); // начальные координаты центра логотипа ( x = 100, y = 30) int y = 100; int x = 30; // будем рисовать, пока x не достигнет 400 while (x < 400) { g.drawOval(x - 10, y - 10, 21, 21); g.drawLine(x, y, x, y - 10); g.drawLine(x, y, x - 9, y + 6); g.drawLine(x, y, x + 9, y + 6); // увеличиваем значение x на 30 каждую итерацию // т.е. следующий логотип будет // нарисован правее на 30 пикселей x = x + 30; } } }
Теперь запустим класс Home на выполнение. Мы увидим такой вид запустившегося приложения:
Рис. 2.32. Рисование логотипов вдоль оси x
Чтобы вывести несколько строк логотипов нам понадобится второй цикл. Также будем использовать while. Ранее созданный цикл теперь окажется внутри вновь созданного. В новом цикле мы будем менять переменную y, вначале задав ей минимальное значение, и с каждым шагом увеличивая ее, тем самым продвигая логотипы ниже и ниже:
import java.awt.Color; import java.awt.Graphics; import javax.swing.JPanel;
public class MyPanel3 extends JPanel {
public void paint(Graphics g) { super.paint(g); g.setColor(Color.red); // начальные координаты центра логотипа ( x = 100, y = 30) int y = 50; // будем рисовать строки логотипов пока // не опустимся до 450 while ( y <= 450) {
// x нужно инициализировать при КАЖДОМ // новом проходе тела цикла по y int x = 30;
// будем рисовать, пока x не достигнет 400 while (x < 400) { g.drawOval(x - 10, y - 10, 21, 21); g.drawLine(x, y, x, y - 10); g.drawLine(x, y, x - 9, y + 6); g.drawLine(x, y, x + 9, y + 6); // увеличиваем значение x на 30 каждую итерацию // т.е. следующий логотип будет // нарисован правее на 30 пикселей x = x + 30; } // увеличиваем значение y на 50 каждую итерацию y = y + 50; } } }
Теперь запустим класс Home на выполнение. Мы увидим такой вид запустившегося приложения:
Рис. 2.33. Рисование логотипов вдоль оси x и оси y
Это именно тот вид, который мы хотели получить.
Поздравляем Вас! Вы добрались до самого интересного! Все примеры разобраны, вся информация получена! Теперь Вам стоит приступить к выполнению задач, которые приведены далее. Удачи Вам в освоении программирования GUI приложений на Java!
ЗАДАНИЯ ДЛЯ ЛАБОРАТОРНЫХ РАБОТ
|
Последнее изменение этой страницы: 2019-03-22; Просмотров: 397; Нарушение авторского права страницы