Microsoft Visual J++. Создание приложений и аплетов на языке Java


Метод 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);

Вы можете выделять нужные вам строки любым другим способом, например, наклоном или жирным шрифтом.

Для рисования строки мы вызываем метод drawString:

g.drawString(s[CurrentStr],

  10, dimAppWndDimension.height - 10);

Строка будет нарисована на десять пикселов выше нижней границы окна аплета.

После рисования строки мы проверяем, последняя она, или нет:

CurrentStr++;

if(CurrentStr > 5)

  CurrentStr = 0;

Если строка последняя, мы сбрасываем счетчик текущей строки, после чего перебор строк начнется с самого начала.

Для выполнения свертки мы вызываем метод copyArea, знакомый вам по 30 тому “Библиотеки системного программиста”:

yShift = 1;

g.copyArea(0, yShift + 1,

  dimAppWndDimension.width  - 1,

  dimAppWndDimension.height - 1,

  0, -yShift);

Этот метод сдвигает содержимое прямоугольной области экрана, заданной первыми четырьмя параметрами. Величина сдвига определяются двумя последними параметрами метода. В нашем случае сдвиг выполняется по вертикальной оси на значение -1, то есть на один пиксел вверх.

После сдвига освободившаяся область закрашивается желтым цветом:

g.setColor(Color.yellow);

g.fillRect(1, dimAppWndDimension.height - yShift - 1,

  dimAppWndDimension.width  - 2,

  dimAppWndDimension.height - 1);

Далее выполняется задержка на 50 миллисекунд, после чего работа бесконечного цикла возобновляется с самого начала:

Thread.sleep(50);




Начало  Назад  Вперед