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

Invalidate ();

// Поспать

Thread.Sleep (50);

>

>

protected override vold OnPaint (PaintEventArgs e)

{

base,OnPaint (e);

// Нарисовать случайный эллипс в области упр.элемента

e.Graphlcs.FIIIEIIIpse (new SolidBrush(Color.FromArgb(rand.Next(255),

rand.Next (255),rand.Next(255))),

rand.Next (thls.Width),

rand.Next (this.Height),

rand.Next (this.Wldth<thls.Height?this.Width:thls.Helght),

rand.Next (this.Width<this.Height?this.Width:thls.Height));

>

>

// Класс прикладного окна

class W: Form

{

User u; // Ссылка на объект управляющего элемента

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

public W ( )

{

u= new User (); // Создать объект управляющего элемента

u.Location= new Point (50, 40);// Разместить,

u.Size =new Size (140, 130); // установить размер

u.BackColor=Color.UghtGray; // и фон управляющего элемента

Controls.Add (u); // Включить управляющий элемент в

// коллекцию

}

// Выполнить основной поток

static void Main ( )

{

Appllcation.Run (new W());

Пример 10.8.6. Программа с управляющим элементом типа Panel на

языке Java с применением потока и функции paint()

Как и в программе примера 10.8.5 в данной программе рисование случайных

эллипсов в пределах управляющего элемента типа Panel осуществляется

функцией paint(), вызываемой посредством функции repaint() из потока. В

области клиента управляющего элемента рисуются эллипсы со случайными

координатами, размерами и цветами.

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

/ / J #

Importjava.Awt.*;

Import java.Awt.Event.*;

Importjava.Util.*;

// Класс управляющего элемента типа UserControl

class User extends Panel implements Runnable

{

Thread t; // Ссылка на поток

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

Graphics g; // Ссылка на графический объект

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

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

public User ( )

{

show();

this.setVisible (true); // Показать управляющий элемент

g= this.getGraphics (); // Создать графический объект

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

// Создать и запустить поток рисования

life= true; // Пусть поток живёт

t= new Thread (this); // Создать объект потока

t.start (); // Запустить поток

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

public void Finish ( )

{

life= false;

try

<

t.join ();

>

catch (InterruptedException e) { >

>

// Выполнить рабочий поток

public void run ()

{

while (life)

{

System.out.println (" I'm working");

repaint ( );

// Поспать

try

{

Thread.sleep (50);

>

catch (InterruptedException e) { >

>

public void paint (Graphics g)

{

g.setColor (new Color (rand.nextInt(255),

rand,nextInt(255), rand.nextInt(255)));

// Нарисовать случайный эллипс в области упр.элемента

g.fillOval (

rand,nextInt (this.getSlze().width),

rand.nextInt (this.getSize().height),

rand.nextInt (this.getSize().width<this.getSize().height?

this.getSize().wldth:this.getSize().height),

rand.nextInt (this.getSize().wldth<this.getSize().helght?

thls.getSizeQ.width:this.getSizeQ.height));

// Класс прикладного окна

class W extends Frame

{

User u; // Ссылка на объект управляющего элемента

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

public W ( )

{

setLayout(null);

setSize (340, 230); // Установить размер

u= new User(); // Создать объект управл. элемента

u.setLocation(50, 40); // Разместить,

u.setSize (140, 130); // установить размер

u.setBackground (Color.lightGray); // и фон управляющего

// элемента

add(u); // Включить управляющий элемент в

// коллекцию

// Применить внутренний анонимный класс

// для закрытия окна

this.addWindowListener (new WindowAdapter ()

{

public vold windowClosing (WindowEvent wE)

{

System.exlt (0);

»;

show();

// Выполнить основной поток

static public void main ( )

i

W w= new W ();

>

>