Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Этап 4. Разработка прикладного окнаСодержание книги
Поиск на нашем сайте
Наступил этап разработки, когда появится прикладное окно приложения с перемещающимися шарами. Наследовав класс Form или Frame, класс Balls существенно расширит свою функциональность. Теперь можно создать прикладное окно (основную форму) и дочернее окно (дочернюю форму). Но дочернее окно будет создано потом в классе User, порождённым из класса Balls. Диаграмма классов и реализация этого этапа представлены на рис. 5.3.4.1 и в примерах 5.3.4.1 и 5.3.4.2.
Рис. 5.3.4.1. Диаграмма классов Balls–приложения четвёртого этапа
Пример 5.3.4.1. Реализация четвёртого этапа разработки Balls–приложения на языке C#. //////////////////// // C# File Balls4Cs.cs // Файл BallsCc4.cs полностью включает файл BallsCs3.cs, дополнив его // данными класса Ball икласса Balls, необходимыми для рисования шаров. // В результате наследования класса Balls из базового класса Form появилось // прикладное окно, свойства которого установлены в конструкторе класса // Balls. Переопределена функция OnPaint перерисовки. Функция HandlerEv, // реагируя на событие ev из потоков, вызывает перерисовку шаров. // Изменения файла BallsCs3.cs выделены жирным шрифтом // using System; using System.Drawing; using System.Windows.Forms; using System.Threading;
delegate void delEv (); class Ball // Класс обычного объекта { public event delEv ev; public int x, y; public int w, h; public int dx, dy; ...
public Ball (int Num, int X, int Y, int Dx, int Dy) // Конструктор { num= Num; life= false; run= false; w= 100; h= 100; x= X; y= Y; dx= Dx; dy= Dy; Start(); } //--------------- ...
void BallFunc () // Выполнить поток { int n= 0; while ((life)) //&&(n<=2)) { Console.Write ("Объект {0}", num.ToString ()); Console.WriteLine (" n= {0}", n.ToString ()); n++; x += dx; y += dy; if (x>w || x<0) dx= -dx; if (y>h || y<0) dy= -dy; if (ev!= null) { Console.WriteLine (" Event"); ev (); } Thread.Sleep (100); } Console.Write ("Объект {0}", num.ToString ()); Console.WriteLine (" завершён"); } } //------------------------------------- class Balls: Form { Ball [] pBall; Color col; public Balls () { col= System.Drawing.Color.FromArgb (0, 0, 255); pBall= new Ball [2]; for (int i= 0; i < 2; i++) { pBall[i]=new Ball (i, i*3+10, 1*3+15, i*3+5, i*3+5); pBall[i].ev+= new delEv(HandlerEv); } Text= "Balls"; Start (); } ...
Protected override void OnPaint (PaintEventArgs arg) { base.OnPaint (arg); for (int i= 0; i < 2; i++) { Arg.Graphics.DrawEllipse (new Pen (col), pBall[i].x, pBall[i].y, 20, 20); pBall[i].w= Width; pBall[i].h= Height; } } void HandlerEv () { Console.WriteLine (" HandlerEv"); Invalidate (); } //------------------------- static void Main() { Application.Run(new Balls ()); } } /* Результат: Появилось прикладное окно с двумя нарисованными шарами. Объект 0 n= 0 Event HandlerEv Объект 1 n= 0 Event HandlerEv Объект 0 n= 1 Event HandlerEv Объект 1 n= 1 Event HandlerEv Объект 0 завершился Объект 1 завершился */ Рис. 5.3.4.1. Прикладное окно с консолью Balls–приложения 4 этапа
Пример 5.3.4.2. Реализация четвёртого этапа разработки Balls–приложения на языке Java. package BallsCj4; //////////////////// //C# File BallsCj4 import java.util.*; import java.awt.*;
class Obs { public int num, n;
public Obs (int num, int n)
{this.num= num; this.n= n;}
int getNumber(){return num;}
int getN(){return n;} } class Ball extends Observable implements Runnable // Класс обычного объекта { int num; Thread thread; boolean run; boolean waiting= false; boolean life; public int x, y; public int w, h; public int dx, dy;
public Ball (int Num, int X, int Y, int Dx, int Dy)// Конструктор { num= Num; life= false; run= false; w= 100; h= 100; x= X; y= Y; dx= Dx; dy= Dy; Start (); }
public void Start () // Стартовать { if (!run) { run= true; life= true; thread= new Thread (this); thread.start (); } } //--------------- synchronized public void Suspend () // Приостановить { if (run) { run= false; waiting=true; } } //--------------- synchronized public void Resume () // Возобновить { if (!run) { run= true; waiting=false; notify(); } } //--------------- public void run () // Выполнить поток { int n= 0; while ((life)) //&&(n<=2)) { System.out.print("object "+num); System.out.println(" n= "+n); n++; x += dx; y += dy; if (x>w || x<0) dx= -dx; if (y>h || y<0) dy= -dy;
// Уведомить setChanged(); notifyObservers(new Obs(num, n)); try { Thread.sleep (10); synchronized(this) { if(waiting) wait(); } } catch(InterruptedException iE){} } System.out.print("object "+num); System.out.println(" finished "); } }
//------------------------------------- class Balls extends Frame implements Observer // Класс объектов { Ball [] pBall; Color col; public Balls () { col= Color.red; pBall= new Ball [2]; for (int i= 0; i < 2; i++) { pBall[i]=new Ball (i, i*3+10, 1*3+15, i*3+5, i*3+5);
pBall[i].addObserver(this); } this.setTitle("Balls"); this.setSize(400, 300); this.show(); Start (); } //--------------- public void Start () // Стартовать { for(int i=0; i < 2; i++) { pBall[i]. Start (); } } //--------------- public void Suspend () // Возобновить { for (int i=0; i < 2; i++) pBall[i].Suspend (); } //--------------- public void Resume () // Приостановить { for (int i= 0; i < 2; i++) pBall[i].Resume (); }
public void update (Observable r, Object ob) // Обработчик события ev { Obs obs= (Obs) ob; System.out.print("object num= "+ obs.num); System.out.println(" n= "+ obs.n); repaint(); }
|
||||
Последнее изменение этой страницы: 2016-08-01; просмотров: 143; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.220.134.161 (0.009 с.) |