Назад
Вперед
6.6. Бегущая строка с мерцанием
Пример демонстрирует появление эффекта
мерцания при использовании простейшего метода
рисования бегущей строки в приложениях Java.
Исходный текст примера
Архив проекта для Java WorkShop 2.0
Демонстрация
(ваш браузер должен уметь работать с аплетами
Java JDK 1.1)
Немного теории
Один из простейших способов создания строки
бегущего текста заключается в использовании
метода drawString, вызываемого из метода paint. При этом
отдельный специально созданный поток
периодически перерисовывает окно аплета, смещая
начальную позицию для отображения текста влево.
Несмотря на простоту этот способ обладает
одним существенным недостатком: изображение
сильно мерцает.
О том, почему возникает мерцание, вы узнаете из
описания следующего примера. Там же мы покажем
способ устранения мерцания.
Описание примера
На рис. 1 показано окна аплета с бегущей строкой.
Рис. 1. Бегущая строка в окне сильно мерцает
Покажем, как в данном аплете реализован эффект
бегущей строки.
Главный класс аплета
Главный класс нашего аплета создан на базе
класса Applet и реализует интерфейс Runnable:
import java.applet.*;
import java.awt.*;
public class Scroll1 extends Applet
implements Runnable
{
. . .
}
В поле timerThread хранится ссылка на поток,
периодически перерисовывающий окно аплета:
Thread timerThread = null;
В поле szScrolledText находится сдвигаемый текст:
String szScrolledText =
"Welcome to Java applets!";
Следующие три поля хранят, соответственно,
количество символов в строке, текущую позицию
для отображения строки и высоту символов строки:
int nStrLength;
int nPosition;
int nTitleHeight;
Метод init
При инициализации вначале мы получаем ссылку
на контекст отображения, которая будет нужна для
определения метрик шрифта:
Graphics g = getGraphics();
Далее мы устанавливаем начальную позицию для
вывода строки:
nPosition = getSize().width;
Строка будет выводится начиная с правого края
окна аплета.
На следующем этапе мы устанавливаем в
контексте отображения новый шрифт и определяем
метрики шрифта:
g.setFont(new Font(
"Helvetica", Font.BOLD, 50));
FontMetrics fm = getFontMetrics(g.getFont());
Пользуясь метриками, мы определяем полную
длину сдвигаемой строки nStrLength и ее высоту nTitleHeight:
nStrLength = fm.stringWidth(szScrolledText);
nTitleHeight = fm.getHeight();
Метод paint
Во время перерисовки окна метод paint выбирает
нужный шрифт и рисует строку в текущей позиции:
g.setFont(new Font(
"Helvetica", Font.BOLD, 50));
g.drawString(szScrolledText, nPosition,
nTitleHeight + 10);
Эта позиция затем уменьшается на единицу и
сравнивается с полной длиной строки:
nPosition--;
if(nPosition < -nStrLength)
nPosition = getSize().width;
При достижении конца строки текущая позиция
устанавливается в исходное состояние - на правый
край окна аплета.
Методы start и stop
Эти методы управляют работой потока анимации и
не имеют никаких особенностей:
public void start()
{
if (timerThread == null)
{
timerThread = new Thread(this);
timerThread.start();
}
}
public void stop()
{
if (timerThread != null)
{
timerThread.stop();
timerThread = null;
}
}
Метод run
Задача метода run заключается в периодической
перерисовке окна аплета, которая выполняется в
цикле с небольшой задержкой:
public void run()
{
while (true)
{
try
{
repaint();
Thread.sleep(30);
}
catch (InterruptedException ie)
{
stop();
}
}
}
Назад Вперед |