Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Медведев_С++_CLI_C#_Java_J#.doc
Скачиваний:
3
Добавлен:
01.07.2025
Размер:
5 Мб
Скачать
☆

Invalidate ( );

Thread.Sleep (150);

>

>

// Завершить поток перерисовки

public void Finish ( )

{

life= false; thread.Join ( );

>

// Обработать кнопку закрытия окна

protected override void OnClosed (EventArgs e)

{

base.OnClosed (e);

IEnumerator inum= aL.GetEnumerator ( );

while (inum.MoveNext ( ))

{

Lorry lorry= (Lorry) inum.Current;

lorry.Finish ( );

lorry= null; >

Finish ( );

>

// Перерисовать область клиента прикладного окна

protected override void OnPaint (PaintEventArgs e)

{

base.OnPaint (e);

IEnumerator inum= aL.GetEnumerator ();

while (inum.MoveNext ( ))

{

Lorry lorry= (Lorry) Inum.Current;

e.Graphics.DrawElllpse (new Pen(Color.Blue, 2),

lorry.Point.X - 10, lorry.Point.Y - 10, 20, 20);

e.Graphlcs.DrawStrlng (lorry.Number.ToString ( ), Font,

new SolidBrush (Color.Blue), lorry.Point.X + 10,

iorry.Point.Y + 10);

>

>

// обработать событие склада

public void EvFromWarehouseHandler (object sender,

WarehouseEventArgs args)

{

leftRight= !leftRight;

IEnumerator inum= aL.GetEnumerator ();

{w hile (inum.MoveNext ( ))

Lorry lorry= (Lorry) inum.Current;

lorry.LeftRlght= leftRight;

>

>

// Основная функция

static void Main ( )

{

Application.Run (new LorryAndWarhouses ());

>

>

}

///////////////

// Java и C# Flle cjLorryAndWarehouse класс LorryAndWarhouses

importjava.awt.*;

importjava.utll.*;

import java,awt.event.*;

import cJContrlReglon_DII.*;

import <jWarehouse_DII.* ;

import cjLorry.*;

class LorryAndWarehouses extends Frame implements Runnable, Observer

{

Lorry lorry; // Ссылка на объект грузовика

Warehouse leftWH; // Ссылка на объект левого склада

Warehouse rlghtWH; // Ссылка на объект правого склада

ContrlRegion region; // Ссылка на объект зоны контроля

Button butRun, butStop; // Ссылки на интерфейсные кнопки

Button butAdd, butDel; // Ссылки на интерфейсные кнопки

Choice choice; // Ссылка на элемент списока

Thread thread; // Ссылка но объект потока перерисовки

boolean life; // Признак жизни потока перерисовки

int numLorry= 0; // Номер грузовика

boolean leftRight; // Признак направления перемещения грузовиков

int Y= 20; // Координата Y пути грузовика

Random rand; // Ссылка на случайное число

ArrayList aL; // Ссылка на список объектов грузовиков

// Конструктор

LorryAndWarehouses ( )

{

this.setTltle ("Test"); // Установить заголовок окна

this.setSlze (350, 180); // Установить размер окна

this.setLayout (null); // Установить отсутствие

// менеджера расстановки

thls.setBackground(Color.lightGray);

aL= new ArrayList (); // Создать объект списка грузовиков

rand= new Random ( ); // Создать случайное число

leftRight= true; // Установить направление "слева направо"

// Создать кнопки

// Создать кнопку "Add" добавления шара

butAdd= new Button ("Add"); // Создать объект кнопки

butAdd.setLocation (240,85); // Разместить в окне

butAdd.setSlze (65, 20); // Установить размер кнопки

butAdd.setBackground (Color.lightGray);

this.add (butAdd); // Добавить кнопку в коллекцию окна

// Подписать обработчик на событие кнопки ""Add"

butAdd.addActionListener (new ActionListener ( )

{

public void actionPerformed (ActionEvent aE)

{

numLorry++;

Y += 20;

lnt dX = rand.nextInt (5) + 5;

If (leftRight) dX= dX;

else dX= -dX;

// Создать объект грузовика

lorry= new Lorry (numLorry, Y, dX, leftWH, rightWH,

region);

aL.add (lorry); // Включить объект в список грузовиков

//lorry.Start (); // Стартовать поток грузовика

// Добавить номер грузовика в элемент списка номеров

choice.addItem (Integer.toStrlng(numLorry));

>

});

// Создать кнопку "Del" удаления

butDel= new Button ("Del"); // Создать объект кнопки

butDel.setLocation (240,115); // Разместить в окне

butDel.setSlze (65, 20); // Установить размер кнопки

butDel,setBackground (Color.llghtGray);

thls.add (butDel); // Добавить кнопку в коллекцию окна

// Подписать обработчик на событие кнопки "Del"

butDei.addActionListener (new ActionListener ()

{

public void actionPerformed (ActionEvent aE)

{

// Если есть элементы в списке, то удалить грузовик с

// наименьшим номером или выбранным номером из

// списка

lf(choice.getItemCount()!=0)

{

String s= choice.getSelectedItem();

int num= Integer.parseInt(s);

for (int i= 0; i<aL.size(); i++)

<

Lorry lorry= (Lorry) aL.get(i);

lf(lorry.number== num)

{

lorry.Finish ();

aL.remove (i);

choice.remove(s);

return;

>

>

>

>

»;

// Создать кнопку "Run" пуска

butRun= new Button ("Run"); // Создать объект кнопки

butRun.setLocatlon (240,25); // Разместить в окне

butRun.setSize (45, 20); // Установить размер кнопки

butRun.setBackground (Color,lightGray);

thls.add (butRun); // Добавить кнопку в коллекцию окна

// Подписать обработчик на событие кнопки "Run"

butRun.addActionLlstener (new ActionListener ( )

{

public void actlonPerformed (ActionEvent aE)

{

for (int 1= 0; l<aL,size(); i++)

{

Lorry lorry= (Lorry) aL.get(i);

lorry.Run ();

>

>

»;

Ц Создать кнопку "Stop" останова

butStop= new Button ("Stop"); // Создать объект кнопки

butStop.setLocation (240,55); // Разместить в окне

butStop.setSize (45, 20); // Установить размер кнопки

butStop.setBackground (Color.llghtGray);

thls.add (butStop); // Добавить кнопку в коллекцию окна

// Подписать обработчик на событие кнопки "Stop"

butStop.addActionListener (new ActionListener ( )

{

public void actlonPerformed (ActionEvent aE)

{

for (int i= 0; l<aL.slze(); i++)

{

Lorry lorry= (Lorry) aL.get(l);

lorry-Stop ();

>

> »;

// Создать элемент списка номеров грузовиков

choice= new Choice (); // Создать объект элемента списка

cholce.setLocatlon (240, 145); Ц Разместить в окне

cholce.setSize (60, 20); // Установить размер элемента

thls.add (choice); // Добавить элемент в коллекцию окна

// Создать склады

// Создать объект leftWH левого склада

leftWH= new Warehouse (true, true); // Создать объект склада

leftWH.setLocation (10, 10); // Разместить в окне

leftWH.setSlze (30, 100); // Установить размер склада

leftWH,setBackground (Color.white);

leftWH, bW,addObserver(this);

thls.add (leftWH); // Добавить склад в коллекцию окна

leftWH,show ( );

// Создать объект rightWH правого склада

rlghtWH= new Warehouse (false, false); // Создать объект склада

rlghtWH.setLocatIon (200, 10); // Разместить в окне

rightWH.setSize (30, 100); // Установить размер склада

rightWH.setBackground (Color.white);

rightWH.bW.addObserver(thls);

this.add (rightWH); // Добавить склад в коллекцию окна

rightWH.show ();

// Создать область region контроля

region= new ContrlRegion ( ); // Создать объект области контроля

region.setLocation (100, 0); // Разместить в окне

region.setSize (30, 200); // Установить размер области

region.setBackground (Color.green);

this.add (region); // Добавить область в коллекцию окна

// Создать поток thread перерисовки и запустить его

life= true;

thread= new Thread (this,"controlThread");

thread.start();

// Потоковая функция run перерисовки

public void run ( )

{

while (life)

{

repaint ( ); // Перерисовать окно

try

{

Thread.sleep (150);

>

catch (InterruptedException e){}

>

>

// Завершить поток перерисовки

public vold Flnlsh ()

{

f11i 1f 4e.—— fi aul ur Aw>, >

// Завершить все потоки при закрытии прикладного скна

public boolean handleEvent (Event e)

{

If (e,ld == Event,WINDOW_DESTROY)

{

// Завершить потоки грузовиков

for (lnt 1= 0; l<aL,size(); !++)

{

Lorry lorry= (Lorry) aL.get(l);

lorry,Finish ();

>

// Завершить поток перерисовки

Finish ();

// Завершить основной поток

System.exit(0);

>

return (super.handleEvent(e));

>

// Перерисовать область клиента прикладного окна

public vold paint (Graphics g)

{

// Нарисовать каждый грузовик с номером

for (int 1= 0; l<aL.size(); i++)

{

Lorry lorry= (Lorry) aL.get(i);

g.setColor (Color.blue);

g.drawOval (lorry.p.x - 10, iorry.p.y - 10, 20, 20);