Метод вызывается, когда курсор мыши
// Рисуем прямоугольник
g.fillRect(x, y, width, height);
// Выполняем задержку на 50 миллисекунд
try
{
Thread.sleep(50);
}
catch (InterruptedException e)
{
stop();
}
}
}
// -------------------------------------------------------
// mouseEnter
// Метод вызывается, когда курсор мыши оказывается над
// окном аплета
// -------------------------------------------------------
public boolean mouseEnter(Event evt, int x, int y)
{
if (m_Rectangles != null)
{
// Когда курсор мыши оказывается над поверхностью
// окна аплета, временно приостанавливаем
// задачу рисования прямоугольников
m_Rectangles.suspend();
}
return true;
}
// -------------------------------------------------------
// mouseExit
// Метод вызывается, когда курсор мыши покидает
// окно аплета
// -------------------------------------------------------
public boolean mouseExit(Event evt, int x, int y)
{
if (m_Rectangles != null)
{
// Когда курсор мыши покидает окно аплета,
// возобновляем работу задачи рисования
// прямоугольников
m_Rectangles.resume();
}
return true;
}
}
В листинге 1.4 находится исходный текст документа HTML, созданного автоматически для нашего аплета.
Листинг 1.4. Файл Rectangles\Rectangles.html
<html>
<head>
<title>Rectangles</title>
</head>
<body>
<hr>
<applet
code=Rectangles.class
id=Rectangles
width=320
height=240 >
</applet>
<hr>
<a href="Rectangles.java">The source.</a>
</body>
</html>
// run
// Метод, который работает в рамках отдельной задачи
// Он рисует в окне аплета прямоугольники случайного
// цвета, размера и расположения
// -------------------------------------------------------
public void run()
{
while (true)
{
int x, y, width, height;
int rColor, gColor, bColor;
// Выбираем случайным образом размеры
// и расположение рисуемого прямоугольника
x = (int)(dimAppWndDimension.width *
Math.random());
y = (int)(dimAppWndDimension.height *
Math.random());
width = (int)(dimAppWndDimension.width *
Math.random()) / 2;
height = (int)(dimAppWndDimension.height *
Math.random()) / 2;
// Выбираем случайный цвет для
// рисования прямоугольника
rColor = (int)(255 * Math.random());
gColor = (int)(255 * Math.random());
bColor = (int)(255 * Math.random());
// Устанавливаем выбранный цвет
// в контексте отображения
g.setColor(new Color(rColor, gColor, bColor));
// Рисуем прямоугольник
g.fillRect(x, y, width, height);
// Выполняем задержку на 50 миллисекунд
try
{
Thread.sleep(50);
}
catch (InterruptedException e)
{
stop();
}
}
}
}
// =========================================================
// Класс задачи для рисования эллипсов
// =========================================================
class DrawEllipse extends Thread
{
// Контекст отображения окна аплета
Graphics g;
// Размеры окна аплета
Dimension dimAppWndDimension;
// -------------------------------------------------------
// DrawEllipse
// Конструктор класса DrawEllipse
// -------------------------------------------------------
public DrawEllipse(Applet Appl)
{
g = Appl.getGraphics();
// Определяем текущие размеры окна аплета
public void paint(Graphics g)
{
// Определяем текущие размеры окна аплета
Dimension dimAppWndDimension = size();
// Определяем текущие размеры окна аплета
dimAppWndDimension = size();
// Выбираем в контекст отображения желтый цвет
g.setColor(Color.yellow);
// Закрашиваем внутреннюю область окна аплета
g.fillRect(0, 0,
dimAppWndDimension.width - 1,
dimAppWndDimension.height - 1);
// Выбираем в контекст отображения черный цвет
g.setColor(Color.black);
// Рисуем рамку вокруг окна аплета
g.drawRect(0, 0,
dimAppWndDimension.width - 1,
dimAppWndDimension.height - 1);
}
// -------------------------------------------------------
// start
// Метод вызывается при первом отображении окна аплета
// -------------------------------------------------------
public void start()
{
if (m_Scroller == null)
{
m_Scroller = new Thread(this);
m_Scroller.start();
}
}
// -------------------------------------------------------
// stop
// Метод вызывается, когда окно аплета исчезает с экрана
// -------------------------------------------------------
public void stop()
{
if (m_Scroller != null)
{
m_Scroller.stop();
m_Scroller = null;
}
}
// -------------------------------------------------------
// run
// Метод, который работает в рамках отдельной задачи
// Он выполняет динамическую свертку строк текста
// -------------------------------------------------------
public void run()
{
// Счетчик сдвинутых строк
int ShiftsCounter = 0;
// Размер сдвига по вертикали
int yShift;
// Высота символов текста
int yChar;
// Номер текущей рисуемой строки
int CurrentStr = 0;
// Массив сдвигаемых строк
String s[] = new String[6];
// Инициализация массива строк
g.fillRect(0, 0,
dimAppWndDimension.width - 1,
dimAppWndDimension.height - 1);
// Выбираем в контекст отображения черный цвет
g.setColor(Color.black);
// Рисуем рамку вокруг окна аплета
g.drawRect(0, 0,
dimAppWndDimension.width - 1,
dimAppWndDimension.height - 1);
}
// -------------------------------------------------------
// start
// Метод вызывается при первом отображении окна аплета
// -------------------------------------------------------
public void start()
{
if (m_HorzScroll == null)
{
m_HorzScroll = new Thread(this);
m_HorzScroll.start();
}
}
// -------------------------------------------------------
// stop
// Метод вызывается, когда окно аплета исчезает с экрана
// -------------------------------------------------------
public void stop()
{
if (m_HorzScroll != null)
{
m_HorzScroll.stop();
m_HorzScroll = null;
}
}
// -------------------------------------------------------
// run
// Метод, который работает в рамках отдельной задачи
// Он выполняет рисование текстовой строки по буквам
// -------------------------------------------------------
public void run()
{
// Получаем контекст отображения
Graphics g = getGraphics();
// Выбираем шрифт в контекст отображения
if(m_style.equals("BOLD"))
g.setFont(new Font(m_Fnt, Font.BOLD, m_size));
else if(m_style.equals("ITALIC"))
g.setFont(new Font(m_Fnt, Font.ITALIC, m_size));
else
g.setFont(new Font(m_Fnt, Font.PLAIN, m_size));
// Выбираем цвет в контекст отображения
if(m_color.equals("red"))
g.setColor(Color.red);
else if(m_color.equals("green"))
g.setColor(Color.green);
else
g.setColor(Color.black);
// Определяем размеры окна аплета
g = Appl.getGraphics();
// Определяем текущие размеры окна аплета
dimAppWndDimension = Appl.size();
}
// -------------------------------------------------------
// run
// Метод, который работает в рамках отдельной задачи
// Он рисует в окне аплета прямоугольники случайного
// цвета, размера и расположения
//
// Этот метод должен быть определен как synchronized
// -------------------------------------------------------
public synchronized void run()
{
while (true)
{
int x, y, width, height;
int rColor, gColor, bColor;
// Выбираем случайным образом размеры
// и расположение рисуемого прямоугольника
x = (int)(dimAppWndDimension.width *
Math.random());
y = (int)(dimAppWndDimension.height *
Math.random());
width = (int)(dimAppWndDimension.width *
Math.random()) / 2;
height = (int)(dimAppWndDimension.height *
Math.random()) / 2;
// Выбираем случайный цвет для рисования
// прямоугольника
rColor = (int)(255 * Math.random());
gColor = (int)(255 * Math.random());
bColor = (int)(255 * Math.random());
// Устанавливаем выбранный цвет в контексте
// отображения
g.setColor(new Color(rColor, gColor, bColor));
// Рисуем прямоугольник
g.fillRect(x, y, width, height);
// Переводим задачу в сотояние ожидания, в котором
// она будет находиться до тех пор, пока не будет
// разблокирована задачей класса NotifyTask
try
{
Thread.wait();
}
catch (InterruptedException e)
{
}
}
}
}
// =========================================================
// Класс задачи для периодического разблокирования
// задачи рисования прямоугольников
// =========================================================
class NotifyTask extends Thread
{
// Ссылка на задачу, которую необходимо разблокировать
idx.writeLong(idxFilePointer);
// Сохраняем в файле дайнных два поля новой записи
dat.writeBytes(name + "\r\n");
dat.writeInt(account);
}
catch(Exception ioe)
{
System.out.println(ioe.toString());
}
}
// -------------------------------------------------------
// GetRecordByNumber
// Извлечение записи по ее порядковому номеру
// -------------------------------------------------------
public String GetRecordByNumber(long nRec)
{
// Строка, в которой будет сохранена извлеченная запись
String sRecord = "<empty>";
try
{
// Значение поля account
Integer account;
// Значение поля name
String str = null;
// Вычисляем смещение в файле индексов по порядковому
// номеру записи
idx.seek(nRec * 8);
// Извлекаем из файла индексов смещение записи
// в файле данных
idxFilePointer = idx.readLong();
// Выполняем позиционирование на нужную запись
// в файле данных
dat.seek(idxFilePointer);
// Извлекаем поля записи
str = dat.readLine();
account = new Integer(dat.readInt());
// Объединяем значения полей в текстовую строку
sRecord = new String("> " + account + ", " + str);
}
catch(Exception ioe)
{
System.out.println(ioe.toString());
}
// Возвращаем извлеченную запись
return sRecord;
}
}
// Если ошибки нет, отображаем полученные данные
else
showStatus(sChart);
// Создаем разборщик текстовой строки для
// выделения значений углов в принятом файле данных
StringTokenizer st =
new StringTokenizer(sChart, ",\r\n");
// Цикл по всем значениям
while(st.hasMoreElements())
{
// Выбираем случайный цвет для рисования
rColor = (int)(255 * Math.random());
gColor = (int)(255 * Math.random());
bColor = (int)(255 * Math.random());
// Устанавливаем выбранный цвет в контексте
// отображения
g.setColor(new Color(rColor, gColor, bColor));
// Получаем значение угла
String angle = (String)st.nextElement();
// Преобразуем его в численное значение
AngleFromChart = new Integer(angle) ;
// Рисуем сектор диаграммы
g.fillArc(0, 0, 200, 200,
PrevAngle, AngleFromChart.intValue());
// Увеличиваем текущее значение угла
PrevAngle += AngleFromChart.intValue();
}
}
}
Исходный текст документа HTML, созданного автоматически для нашего аплета, представлен в листинге 3.4.
Листинг 3.4. Файл ShowChart\ShowChart.html
<html>
<head>
<title>ShowChart</title>
</head>
<body>
<hr>
<applet
code=ShowChart.class
id=ShowChart
width=200
height=200 >
</applet>
<hr>
<a href="ShowChart.java">The source.</a>
</body>
</html>
Содержание раздела