|
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 | | | В каких системах счисления можно записать действительные числа? + десятичной |