Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АрхитектураБиологияГеографияДругоеИностранные языки
ИнформатикаИсторияКультураЛитератураМатематика
МедицинаМеханикаОбразованиеОхрана трудаПедагогика
ПолитикаПравоПрограммированиеПсихологияРелигия
СоциологияСпортСтроительствоФизикаФилософия
ФинансыХимияЭкологияЭкономикаЭлектроника

import System.Windows.Forms.*;



import System.Windows.Forms.*;

 

import java.util.*;

 

import System.Drawing.*;

 

//интерфейс для обработки событий

public interface HappenListener

 

{

 

//Обработчик

 

void handleEvent();

 

}

 

///класс источника события

 

public class Happen

 

{

 

ArrayList aL;

 

/// <summary>

 

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

 

/// </summary>

 

public Happen()

 

{

 

aL = new ArrayList();

 

}

 

//подписать объект на событие

 

public void addListener(HappenListener l)

 

{

 

aL.add(l);

 

}

 

//отписать объект на событие

 

public void removeListener(HappenListener l)

 

{

 

aL.add(l);

 

}

 

//сгенерировать событие

 

public void fireEvent()

 

{

 

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

 

{

 

HappenListener h = (HappenListener)aL.get(k);

 

h.handleEvent();

 

}

 

}

 

}

 

public class MyForm extends System.Windows.Forms.Form implements HappenListener

 

{

 

private TextBox tbTextEditor;

 

/**

 

* Required designer variable.

 

*/

 

private System.ComponentModel.IContainer components;

 

private TextRunner textRunner; //объект, перемещающий текст

 

private Happen happen;// объект класса источника события

 

/// <summary>

 

/// функция запуска события оповещения объекта о необходимости ускорения

 

/// </summary>

 

private void GenerateEv()

 

{

 

happen.fireEvent();

 

}

 

/// <summary>

 

/// обработчик события перемещения текста

 

/// </summary>

 

public void handleEvent()

 

{

 

//перерисвываем форму

 

Invalidate();

 

}

 

/// <summary>

 

/// обработчик события перерисовки экрана

 

/// </summary>

 

/// <param name="e"></param>

 

protected void OnPaint(PaintEventArgs e)

 

{

 

//если вышли за пределы формы

 

if (textRunner.getX() > this.get_ClientSize().get_Width())

 

{

 

textRunner.setX(0);

 

}

 

e.get_Graphics().RotateTransform(32);

 

//перерисовываем бегущую строку

 

e.get_Graphics().DrawString(tbTextEditor.get_Text(), new Font("Arial", 12, FontStyle.Bold), new SolidBrush(Color.FromArgb(250, 0, 0, 0)), textRunner.getX(), textRunner.getY());

 

}

 

/// <summary>

 

/// обработчик события клика мышкой по форме

 

/// </summary>

 

private void MyForm_MouseClick(Object sender, MouseEventArgs e)

 

{

 

//ускоряем перемещение текста

 

GenerateEv();

 

}

 

/// <summary>

 

/// обработчик события закрытия окна

 

/// </summary>

 

private void MyForm_Closed(Object sender, FormClosedEventArgs e)

 

{

 

textRunner.Finish();

 

}

 

public MyForm()

 

{

 

//

 

// Required for Windows Form Designer support

 

//

 

InitializeComponent();

 

happen = new Happen();

 

textRunner = new TextRunner(0, tbTextEditor.get_Bottom() + 5);

 

//подписываемся на событие перерисовки

 

textRunner.addListener(this);

 

//подписываем объект на событие ускорения

 



happen.addListener(textRunner);

 

}

 

#region Windows Form Designer generated code

 

/**

 

* Clean up any resources being used.

 

*/

 

protected void Dispose(boolean disposing)

 

{

 

if (disposing)

 

{

 

if (components!= null)

 

{

 

components.Dispose();

 

}

 

}

 

super.Dispose(disposing);

 

}

 

/**

 

* Required method for Designer support - do not modify

 

* the contents of this method with the code editor.

 

*/

 

private void InitializeComponent()

 

{

 

this.tbTextEditor = new System.Windows.Forms.TextBox();

 

this.SuspendLayout();

 

//

 

// tbTextEditor

 

//

 

this.tbTextEditor.set_Location(new System.Drawing.Point(2, 2));

 

this.tbTextEditor.set_Name("tbTextEditor");

 

this.tbTextEditor.set_Size(new System.Drawing.Size(550, 20));

 

this.tbTextEditor.set_TabIndex(0);

 

//

 

// MyForm

 

//

 

this.set_AutoScaleDimensions(new System.Drawing.SizeF(6F, 13F));

 

this.set_AutoScaleMode(System.Windows.Forms.AutoScaleMode.Font);

 

this.set_ClientSize(new System.Drawing.Size(554, 386));

 

this.get_Controls().Add(this.tbTextEditor);

 

this.set_FormBorderStyle(System.Windows.Forms.FormBorderStyle.FixedSingle);

 

this.set_Name("MyForm");

 

this.set_Text("Форма");

 

this.add_MouseClick(new System.Windows.Forms.MouseEventHandler(this.MyForm_MouseClick));

 

this.add_FormClosed(new FormClosedEventHandler(this.MyForm_Closed));

 

this.ResumeLayout(false);

 

this.PerformLayout();

 

}

 

#endregion

 

}

 

public class TextRunner implements Runnable, HappenListener

 

{

 

private int speed; //скорость перемещения текста

 

private Point point; //координата левого верхнего угла текста

 

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

 

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

 

private int maxSpeed = 25; //максимальное значение скорости

 

private Happen happen;// объект класса источника события

 

/// <summary>

 

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

 

/// </summary>

 

/// <param name="aX">координата Х</param>

 

/// <param name="aY">координата Y</param>

 

public TextRunner(int aX, int aY)

 

{

 

happen = new Happen();

 

speed = 2;

 

life = true;

 

point = new Point(aX, aY);

 

t = new Thread(this);

 

t.start();

 

}

 

/// <summary>

 

/// добавляет подписчика на событие

 

/// </summary>

 

public void addListener(HappenListener l)

 

{

 

happen.addListener(l);

 

}

 

/// <summary>

 

/// функция перемещения текста

 

/// </summary>

 

public void run()

 

{

 

while (life)

 

{

 

//двигаем текст

 

point.set_X(point.get_X() + speed);

 

//оповещаем форму о необходимости перерисовки

 

GenerateEv();

 

try

 

{

 

Thread.sleep(50);

 

}

 

catch (InterruptedException ex)

 

{ }

 

}

 

}

 

/// <summary>

 

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

 

/// </summary>

 

public void Finish()

 

{

 

life = false;

 

}

 

/// <summary>

 

/// свойство для получения координат

 

/// </summary>

 

public Point getPoint()

 

{

 

return point;

 

}

 

/// <summary>

 

/// свойство для получения координаты Х

 

/// </summary>

 

public int getX()

 

{

 

return point.get_X();

 

}

 

/// <summary>

 

/// свойство для присвоения координаты Х

 

/// </summary>

 

public void setX(int value)

 

{

 

point.set_X(value);

 

}

 

/// <summary>

 

/// свойство для получения координаты Y

 

/// </summary>

 

public int getY()

 

{

 

return point.get_Y();

 

}

 

/// <summary>

 

/// свойство для присвоения координаты Y

 

/// </summary>

 

public void setY(int value)

 

{

 

point.set_X(value);

 

}

 

/// <summary>

 

/// функция запуска события оповещения о необходимости перерисовки экрана

 

/// </summary>

 

private void GenerateEv()

 

{

 

happen.fireEvent();

 

}

 

/// <summary>

 

/// обработчик события ускорения движения текста

 

/// </summary>

 

public void handleEvent()

 

{

 

speed += 2;

 

if (speed >= maxSpeed)

 

{

 

speed = maxSpeed;

 

}

 

}

 

}

 

/**

 

* Summary description for Program

 

*/

 

public class Program

 

{

 

/**

 

* The main entry point for the application.

 

*/

 

/** @attribute System.STAThread() */

 

public static void main(String[] args)

 

{

 

Application.EnableVisualStyles();

 

Application.SetCompatibleTextRenderingDefault(false);

 

Application.Run(new MyForm());

 

}

 

}


Дата добавления: 2015-09-29; просмотров: 23 | Нарушение авторских прав




<== предыдущая лекция | следующая лекция ==>
Таблица 1. Ключевые слова java | В каких системах счисления можно записать действительные числа? + десятичной

mybiblioteka.su - 2015-2024 год. (0.044 сек.)