Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

Пример 2. 4. Приложение Timer.




import java.util.Timer;

 

public class MainApplet extends JApplet {

private Timer m_timer = new Timer();

private boolean m_runViaFrame = false;

private double m_time = 0;

 

private class Updater extends TimerTask {

private MainApplet m_applet = null;

// Первый ли запуск метода run()?

private boolean m_firstRun = true;

// Время начала

private long m_startTime = 0;

// Время последнего обновления

private long m_lastTime = 0;

 

public Updater(MainApplet applet) {

m_applet = applet;

}

@Override

public void run() {

if (m_firstRun) {

m_startTime = System.currentTimeMillis();

m_lastTime = m_startTime;

m_firstRun = false;

}

long currentTime = System.currentTimeMillis();

// Время, прошедшее от начала, в секундах

double elapsed = (currentTime - m_startTime) / 1000.0;

// Время, прошедшее с последнего обновления, в секундах

double frameTime = (m_lastTime - m_startTime) / 1000.0;

// Вызываем обновление

m_applet.Update(elapsed, frameTime);

m_lastTime = currentTime;

}

}

public MainApplet() { Init(); }

public MainApplet(boolean viaFrame) {

m_runViaFrame = viaFrame;

Init();

}

private void Init() {

// таймер будет вызываться каждые 100 мс

m_timer.schedule(new Updater(this), 0, 100);

}

public void Update(double elapsedTime, double frameTime) {

m_time = elapsedTime;

this.repaint();

}

@Override

public void paint(Graphics g) {

g.setColor(Color.WHITE);

g.fillRect(0, 0, this.getWidth(), this.getHeight());

g.setColor(Color.BLACK);

String str = "Time = " + Double.toString(m_time);

g.drawString(str, 15, 15);

}

public static void main(String[] args) {

JFrame frame = new JFrame("Timer example");

MainApplet applet = new MainApplet(true);

frame.add(applet);

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

frame.setSize(800, 600);

frame.setLocationRelativeTo(null);

frame.setVisible(true);

}

}

Графика 2D

 

На базе Java реализован пакет Java2D, который позволяет создавать мощную графику. Использование этого пакета возможно только в Java2-приложениях, построенных на основе Java Foundation Classes. Вместо типа Graphics здесь возможно использование типа Graphics2D и всех методов, предоставляемых классом Graphics2D.

Ниже приводен пример апплета двойного назначения, наследующего от Japplet, рисующий окружность с градиентной заливкой.

Пример 2.5. Использование Graphics2D.

import java.awt.geom.Ellipse2D;

 

public class DrawFig extends JApplet {

public void init() { }

public void paint(Graphics g) {

Graphics2D g2d = (Graphics2D)g;

GradientPaint gradient =

new GradientPaint(0,0,Color.red,175,175,Color.yellow,true);

g2d.setPaint(gradient);

Ellipse2D.Double circle =

new Ellipse2D.Double(10,10,350,350);

g2d.fill(circle);

g2d.setPaint(Color.black);

g2d.draw(circle);

}

public static void main(String[] args) {

JFrame frame = new JFrame ("Пример");

DrawFig appl = new DrawFig();

appl.init(); appl.start();

frame.getContentPane().add(appl);

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

frame.setSize(400, 400);

frame.setVisible(true);

}

}

Вероятностный подход

 

Вероятность события можно запрограммировать очень просто. Допустим, необходимо определить выполнится ли событие c вероятностью P (от 0.0 до 1.0). Для этого генерируем случайное число (float)Math.random(). Оно как раз будет лежать в диапазоне от 0.0 до 1.0. Если это число меньше либо равно P, то событие исполняется, в противном случае – нет. При такой схеме отдельно нужно учитывать только нижний предел (0.0). Если P = 0.0, то событие не исполняется никогда.

 

Практические задания

 

1. Изучить основные понятия и термины обработки событий по модели делегирования событий на Java.

2. Разобрать приведенные примеры FontsList, LinesDraw, KeyCodes, Timer, DrawFig.

3. Разработать программу. Основная задача – разработка упрощенной имитации поведения объектов (все последующие лабораторные работы будут расширять это задание). Объекты реализуются через наследование: абстрактный класс, интерфейс → наследники.

Рабочий цикл программы:

- запускается процесс симуляции, генерируются объекты классов согласно заданию;

- симуляция завершается, выводится статистическая информация.

Для решения задачи:

- Создать интерфейс IBehaviour, задающий поведение объекта;

- Создать иерархию классов, определяющие объекты по варианту и реализующие интерфейс IBehaviour.

- Создать класс Habitat, определяющий размер рабочей области и хранящий список объектов, с параметрами заданными вариантом. Предусмотреть в классе метод Update, вызывающийся по таймеру и получающий на вход время, прошедшее от начала симуляции. В данном методе должны генерироваться новые объекты и помещаться в поле визуализации в случайном месте. Визуализация объекта – схематично, плюсом будет, если объект будет похож на оригинал;

Рабочее окно программы – область визуализации среды обитания объектов;

4. Симуляция должна запускаться по клавише B и останавливаться по клавише E. При остановке симуляции список уничтожается. Время симуляции должно отображаться текстом в области визуализации и скрываться/показываться по клавише T;

5. По завершению симуляции в поле визуализации должна выводиться информация о количестве и типе сгенерированных объектов, а также время симуляции. Текст должен быть форматирован, т.е. выводиться с использованием разных шрифтов и цветов.

6. Параметры симуляции задаются в классе Habitat.

 

Вариант 1

Объект – муравей. Бывают 2 видов: рабочий и воин. Рабочие рождаются каждые N1 секунд с вероятностью P1. Воины рождаются каждые N2 секунд с вероятностью P2.

Вариант 2

Объект – пчела. Бывают 2 видов: трутень и рабочий. Трутни рождаются каждые N1 секунд, если их количество менее K% от общего числа пчел, в противном случае – не рождаются вовсе. Рабочие рождаются каждые N2 секунд с вероятностью P.

Вариант 3

Объект – аквариумная рыбка. Бывают 2 видов: золотая и гуппи. Золотые рыбки рождаются каждые N1 секунд с вероятностью P1. Гуппи рождаются каждые N2 секунд с вероятностью P2.

Вариант 4

Объект – кролик. Бывают 2 видов: обыкновенный и альбинос. Обыкновенные кролики рождаются каждые N1 секунд с вероятностью P1. Альбиносы рождаются каждые N2 секунд, при условии, что их количество менее K% от общего числа кроликов, в противном случае – не рождаются вовсе.

Вариант 5

Список объектов продажи на автомобильном рынке состоит из 2-х видов машин: грузовые и легковые. Грузовые машины генерируются каждые N1 секунд с вероятностью P1. Легковые генерируются каждые N2 секунд с вероятностью P2.

Вариант 6

Рабочий коллектив компании состоит из разработчиков и менеджеров. Разработчики генерируются каждые N1 секунд с вероятностью P1. Менеджеры генерируются каждые N2 секунд при условии, что их количество менее K% от общего числа разработчиков, в противном случае – не генерируются.

Вариант 7

Список жилых домов города состоит из двух типов: капитальный, деревянный. Капитальные дома генерируются каждые N1 секунд с вероятностью P1. Деревянные дома генерируются каждые N2 секунд с вероятностью P2.

Вариант 8

Список транспортных средств на дороге состоит из двух категорий: автомобили и мотоциклы. Автомобили генерируются каждые N1 секунд с вероятностью P1. Мотоциклы генерируются каждые N2 секунд с вероятностью P2.

Вариант 9

Объект обучающийся. Бывает 2 видов: студент (муж. пола) и студентка (жен. пола). Студенты генерируются каждые N1 секунд с вероятностью P1. Студентки генерируются каждые N2 секунд с вероятностью P2.

Вариант 10

Картотека налоговой инспекции состоит из записей двух типов: физические и юридические лица. Физические лица генерируются каждые N1 секунд с вероятностью P1. Юридические лица генерируются каждые N2 секунд с вероятностью P2.

 

Вопросы для самопроверки

 

1. Что такое апплет двойного назначения?

2. Над объектом какого типа выполняются все графические операции?

3. Почему рекомендуется использовать ограниченный набор цветов?

4. Почему рекомендуется использовать ограниченный набор шрифтов?

5. Как получить список всех доступных шрифтов?

6. Что такое событие? Когда возникают события?

7. Какой метод какого класса получает управление при возникновении события? Что передается ему в качестве параметра?

8. Какие методы отвечают за обработку простых событий от мыши?

9. Какие методы отвечают за обработку простых событий от клавиатуры?

10. Что такое модель делегирования событий?

11. Какие существуют способы задания обработчиков событий?

12. Как подключиться к прослушиванию события?

13. Что такое вложенные классы?

14. Что такое анонимные классы?

15. Как выполнять рисование не в методе paint?

 

 

Поделиться:





Воспользуйтесь поиском по сайту:



©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...