Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология Образование Политология Производство Психология Стандартизация Технологии |
Генерирование изображения с использованием цикла
До этого мы в панели MyPanel выводили изображение с заранее просчитанными координатами элементов. Можно сказать, что то изображение было статичным. Сейчас мы создадим панель MyPanel2, в которой будем формировать изображение динамически – во время работы программы. Сейчас мы разберем, как нарисовать такое изображение:
Рис. 2.25. Генерируемый рисунок
Создадим класс MyPanel2, расширяющий JPanel:
Рис. 2.26. Создание класса панели MyPanel2
Добавим в сгенерированный код класса MyPanel2 метод paint() с кодом рисования красной линии:
import javax.swing.JPanel; import java.awt.Graphics;
public class MyPanel2 extends JPanel { @Override public void paint(Graphics g) { // отрисовываем элементы наследуемые от JPanel super . paint ( g ); // Цвет рисования - красный g . setColor ( Color . red ); // рисуем линию от точки (10,50) до точки (200,50) g . drawLine (10, 50, 200, 50); } }
Теперь перейдем в код класса Home и изменим в методе initialize() строку создания панели с JPanel panel = new MyPanel(); на JPanel panel = new MyPanel2();
После этого изменения код initialize() будет выглядеть так:
/** * Initialize the contents of the frame. */ private void initialize() { frame = new JFrame(); frame.setBounds(100, 100, 477, 604); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.getContentPane().setLayout(null);
// Здесь создается наша панель MyPanel2 с линией JPanel panel = new MyPanel2(); panel.setBorder(new BevelBorder(BevelBorder.LOWERED, null, null, null, null)); panel.setBounds(10, 11, 432, 534); frame.getContentPane().add(panel); }
Запустим класс Home на выполнение. Увидим такой рисунок на экране:
Рис. 2.27. Работа приложения Home с панелью MyPanel2
Вернемся в класс MyPanel2. Изменим метод paint() таким образом, чтобы наша линия от точки (10,50) до точки (200,50) рисовалась по-другому. А именно, координаты точки 1 (10,50) и точки 2 (200,50) зададим с использованием переменных:
public void paint(Graphics g) { super.paint(g); g.setColor(Color.red); // координаты первой точки ( x 1, y 1) int x 1 = 10; int y 1 = 50; // координаты второй точки ( x 2, y 2) int x 2 = 200; int y 2 = 50; // Рисуем линию между точками ( x 1, y 1) и ( x 2, y 2) // Фактически рисуется линия между // точками (10, 50) и (200, 50) g.drawLine(x1, y1, x2, y2); // g.drawLine(10, 50, 200, 50); }
Сохраним изменения в коде. Запустим на выполнение Home и увидим то же изображение, что и на рис.2.27. Теперь добавим в код цикл while, внутри которого будем изменять значение переменной y2. При каждом выполнении тела цикла y2 будет увеличиваться на 10. В итоге при каждом выполнении тела цикла точка 2 будет смещаться вниз на 10. Посмотрите код, который получился после добавления while:
public void paint(Graphics g) { super.paint(g); g.setColor(Color.red); // Задаем начальные координаты точки 1 int x1 = 10; int y1 = 50; // Задаем начальные координаты точки 2 int x2 = 200; int y2 = 50;
// линия будет рисоваться до тех пор, пока // вторая точки не опустится до y 2 >= 150 while (y2 < 150) { g.drawLine(x1, y1, x2, y2); // значение y 2 увеличивается // на 10 каждую итерацию // в итоге точка 2 опускается y 2 = y 2 + 10; } }
Запустим класс Home на выполнение сейчас. Вы увидите несколько линий, которые все начинаются в точке 1 с координатами (10,50), но заканчиваются в разных точках 2:
Рис. 2.28. Рисуются линии с общей точкой 1, но с разными точками 2
Добавим в цикл while также изменение координаты y1. Будем уменьшать y1 при каждом выполнении тела цикла на 5. В итоге точка 1 будет подниматься на 5 пикселей при каждом выполнении цикла. Код после изменения будет выглядеть так:
public void paint(Graphics g) { super.paint(g); g.setColor(Color.red); // Задаем начальные координаты точки 1 int x1 = 10; int y1 = 50; // Задаем начальные координаты точки 2 int x2 = 200; int y2 = 50;
// линия будет рисоваться до тех пор, пока // вторая точки не опустится до y2 >= 150 while (y2 < 150) { g.drawLine(x1, y1, x2, y2); // значение y2 увеличивается // на 10 каждую итерацию // в итоге точка 2 опускается y2 = y2 + 10;
// значение y 1 уменьшается // на 5 каждую итерацию // в итоге точка 1 поднимается y 1 = y 1 - 5; } }
Запустим класс Home на выполнение сейчас. Вы увидите несколько линий, которые все начинаются в разных точках 1, и заканчиваются в разных точках 2:
Рис. 2.29. Рисуется узор за счет перемещения точки 1 вверх и одновременное перемещение точки 2 вниз
Полный код программы будет выглядеть так:
import javax.swing.JPanel; import javax.swing.JPanel; import java.awt.Color; import java.awt.Graphics;
public class MyPanel2 extends JPanel { @Override public void paint(Graphics g) { super.paint(g); g.setColor(Color.red);
int x1 = 10; int y1 = 50; int x2 = 200; int y2 = 50; while (y2 < 150) { g.drawLine(x1, y1, x2, y2); y2 = y2 + 10; y1 = y1 - 5; } } } |
Последнее изменение этой страницы: 2019-03-22; Просмотров: 382; Нарушение авторского права страницы