| |
Описание исходных текстов
Для выполнения плавного сдвига строк мы в нашем приложении создаем задачу,
которая периодически рисует новые строки в нижней части окна, сдвигая перд этим
старые строки вверх.
Основной класс аплета реализует интерфейс Runnable, поэтому для задачи
рисования и сдвига строк текста мы не создаем свой класс на базе класса Thread.
Поля класса Scroller
В поле m_Scroller записывается ссылка на задачу рисования и сдвига строк
текста.
Шесть полей типа String с именами от m_String1 до m_String6 предназначены
для хранения сдвигаемых строк текста.
Поля с именами от PARAM_String1 до PARAM_String6 хранят имена параметров
аплета.
Метод init
Единственная задача метода init нашего приложения - получение параметров
аплета и запись их в соотвестствующие поля класса. Эта задача решается с
помощью метода getParameter, при этом строка param типа String используется как
рабочая:
String param;
param = getParameter(PARAM_String1);
if (param != null)
m_String1 = param;
Аналогичным образом метод получает значения всех шести параметров.
Метод paint
Метод paint подготавливает окно аплета для рисования - закрашивает его в
желтый цвет и рисует вокруг окна черную рамку.
Метод start
Метод start основного класса аплета вызывается, когда пользователь
отображает страницу сервера Web с аплетом. Наша реализация этого метода создает
новую задачу и сохраняет ссылку на нее в поле m_Scroller.
Метод stop
Метод stop основного класса останавливает работу задачи, когда пользователь
покидает страницу сервера Web с аплетом, вызывая для этого метод stop.
Метод run
Внутри метода run мы определили массив строк, проинициализировав его
значениями, полученными из параметров аплета:
String s[] = new String[6];
s[0] = m_String1;
s[1] = m_String2;
s[2] = m_String3;
s[3] = m_String4;
s[4] = m_String5;
s[5] = m_String6;
Задача, выполняющаяся в рамках метода run одновременно с кодом аплета, будет
по очереди извлекать строки из этого массива и отображать их в нижней части
окна аплета.
Так как для рисования строк текста нужно знать контекст отображения, мы
получаем его при помощи метода getGraphics:
Graphics g = getGraphics();
Мы также определяем размеры окна аплета, знание которых необходимо для
организации сдвига содержимого окна:
Dimension dimAppWndDimension = size();
Перед тем как запустить бесконечный цикл, мы также определяем метрики
текущего шрифта и высоту символов шрифта:
FontMetrics fm = g.getFontMetrics();
yChar = fm.getHeight();
В рамках бесконечного цикла мы подсчитываем количество сдвигов (в счетчике
ShiftsCounter), а также сдвинутые строки (в счетчике CurrentStr). Заметим, что
для обеспечения плавности сдвига мы перемещаем строки по одному пикселу. Когда
величина сдвига достигает высоты символов yChar плюс 5, метод run рисует новую
строку.
Перед рисованием строки мы выбираем в контекст отображения красный или
черный цвет, в зависимости от номера строки:
if(CurrentStr == 0)
g.setColor(Color.red);
else
g.setColor(Color.black);
Вы можете выделять нужные вам строки любым другим способом, например,
наклоном или жирным шрифтом.
Для рисования строки мы вызываем метод dra
|
|