![]() Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
Start ( );
}
void BallFunc () // Выполнить поток { Thread.Sleep (2000); d= 1; run= false; } } //------------------------------------- class Balls: Form // Класс потоковых объектов { public Ball [] pBall; // Массив потоковых объектов Public SpecialBall pSpecialBall; bool run; // Признак выполнения потоковых объектов Color col; // Цвет шаров public Balls () // Конструктор { run= true; col= System.Drawing.Color.FromArgb (0, 0, 255); pSpecialBall= new SpecialBall (30, 30); pBall= new Ball [2]; for (int i= 0; i < 2; i++) { pBall[i]=new Ball (i*3+10, 1*3+15, i*3+5, i*3+5); pBall[i].ev += new delEv (HandlerEv); pBall[i].evSpecial += new delEv ( PSpecialBall.HandlerEvSpecial); } Text= " Balls"; // Заголовок прикладного окна Start (); // Стартовать обычные объекты } ... //--------------- protected override void OnPaint (PaintEventArgs 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; } Arg.Graphics.DrawEllipse (new Pen (Color.Yellow, pSpecialBall.d), PSpecialBall.x, pSpecialBall.y, 20, 20); } ... } ... /* Результат: Появились прикладное окно с перемещающимися шарами и дочернее окно с кнопкой и со списком. При нажатии на кнопку можно приостанавливать или возобновлять движение шаров. Используя список, можно изменить цвет шаров. В левом верхнем углу прикладного окна находится круг желтого цвета, толщина которого утолщается при отскакивании кругов обычных объектов от краёв прикладного окна. */ Рис. 5.3.7.1. Прикладное и дочернее окна Balls–приложения 7 этапа
Пример 5.3.7.2. Реализация седьмого этапа разработки Balls–приложения на языке Java. package BallsCj7; //////////////////// //C# File BallsCj7 import java.util.*; import java.awt.*; import java.awt.event.*;
class Obs { private int num, n; private boolean special; //
public Obs (int num, int n, boolean special) //
{this.num= num; this.n= n; this.special= special; }
int getNumber(){return num; }
int getN(){return n; }
boolean getSpecial(){return special; } // } 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) { System.out.print(" object " +num); System.out.println(" n= " +n); n++; x += dx; y += dy; if (x> w || x< 0) { setChanged(); // notifyObservers(new Obs(num, n, true)); // dx= -dx; } if (y> h || y< 0) { setChanged(); // notifyObservers(new Obs(num, n, true)); // dy= -dy; }
// Уведомить setChanged(); notifyObservers(new Obs(num, n, false)); // try { Thread.sleep (100); synchronized(this) { if(waiting) wait(); } } catch(InterruptedException iE){} } System.out.print(" object " +num); System.out.println(" finished "); } }
class SpecialBall implements Runnable, // Класс специального объекта//
|