Аплет PlayClip
Аплет PlayClip демонстрирует использование
интерфейса AudioClip. В его окне (рис. 1) имеются три
кнопки с названиями Play, Loop и Stop.
Рис. 1. Окно аплета PlayClip
Сразу после запуска аплета кнопка Stop находится
в заблокированном состоянии. Если нажать кнопку
Play или Loop, начнется, соответственно, однократное
проигрывание или проигрывание в цикле файла с
именем kaas.au, распложенного в том же каталоге, что
и двоичный файл аплета PlayClip.
Когда начинается проигрывание звукового файла,
кнопка Stop разблокируется, что позволяет
остановить проигрывание.
Исходные тексты приложения
Основной файл исходных текстов приложения
приведен в листинге 1.
Листинг 1. Файл PlayClip.java
import java.applet.*;
import java.awt.*;
public class PlayClip extends Applet
{
private String m_ClipName = "kaas.au";
private final String
PARAM_ClipName = "ClipName";
AudioClip auClip;
Button btPlay;
Button btLoop;
Button btStop;
boolean fLoopPlay = false;
public String getAppletInfo()
{
return "Name: PlayClip";
}
public String[][] getParameterInfo()
{
String[][] info =
{
{
PARAM_ClipName,
"String",
"Audioclip filename"
},
};
return info;
}
public void init()
{
String param;
param = getParameter(PARAM_ClipName);
if (param != null)
m_ClipName = param;
btPlay = new Button("Play");
btLoop = new Button("Loop");
btStop = new Button("Stop");
btStop.disable();
add(btPlay);
add(btLoop);
add(btStop);
auClip = this.getAudioClip(getCodeBase(),
m_ClipName);
}
public boolean action(Event evt,
Object obj)
{
Button btn;
if(evt.target instanceof Button)
{
btn = (Button)evt.target;
if(evt.target.equals(btPlay))
{
auClip.play();
btStop.enable();
}
else if(evt.target.equals(btLoop))
{
auClip.loop();
fLoopPlay = true;
btStop.enable();
}
else if(evt.target.equals(btStop))
{
auClip.stop();
fLoopPlay = false;
btStop.disable();
}
else
{
return false;
}
return true;
}
return false;
}
public void paint(Graphics g)
{
Dimension 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);
}
public void start()
{
if(fLoopPlay)
auClip.loop();
}
public void stop()
{
if(fLoopPlay)
auClip.stop();
}
}
В листинге 2 вы найдете исходный текст
документа HTML, созданного автоматически для
нашего приложения системой Java WorkShop.
Листинг 2. Файл PlayClip.tmp.html
<applet name="PlayClip"
code="PlayClip"
codebase=
"file:/e:/sun/articles/vol14/src/PlayClip"
width="200"
height="100"
align="Top"
alt="If you had a java-enabled browser,
you would see an applet here.">
<param name="ClipName" value="kaas.au">
<hr>
If your browser recognized the applet tag,
you would see an applet here.
<hr>
</applet>
Описание исходного текста
В главном классе аплета определено несколько
полей и методов. Рассмотрим эти поля и наиболее
важные методы.
Поля класса PlayClip
В поле m_ClipName хранится имя звукового файла,
которое передается через параметр ClipName из
документа HTML. По умолчанию для этого параметра
используется значение kaas.au.
Строка PARAM_ClipName хранит имя указанного выше
параметра.
Ссылка на интерфейс AudioClip хранится в поле auClip:
AudioClip auClip;
Следующие три поля хранят ссылки на кнопки,
предназначенные для управления проигрыванием
звукового файла:
Button btPlay;
Button btLoop;
Button btStop;
Поле fLoopPlay типа boolean используется для флага,
которым отмечается режим проигрывания звукового
файла в цикле.
Метод getParameterInfo
Метод getParameterInfo возвращает описание
единственного параметра нашего аплета, через
который передается имя звукового файла.
Метод init
Сразу после запуска аплета метод init получает
значение параметра - имя звукового файла, и если
этот параметр задан в документе HTML, записывает
полученное имя в поле m_ClipName:
param = getParameter(PARAM_ClipName);
if(param != null)
m_ClipName = param;
Далее создаются три кнопки, управляющие
звучанием аплета:
btPlay = new Button("Play");
btLoop = new Button("Loop");
btStop = new Button("Stop");
Кнопка Stop блокируется, так как на данный момент
проигрывание еще не запущено:
btStop.disable();
Для блокирования вызывается метод disable,
определенный в классе Button.
Подготовленные таким образом кнопки
добавляются в окно аплета:
add(btPlay);
add(btLoop);
add(btStop);
Последнее, что делает метод init перед тем как
возвратить управление, это получение ссылки на
интерфейс AudioClip:
auClip = this.getAudioClip(
getCodeBase(),m_ClipName);
Адрес URL каталога, в котором расположен аплет,
определяется с помощью метода getCodeBase, о котором
мы говорили в предыдущей главе.
Метод action
Метод action получает управление, когда
пользователь нажимает на одну из кнопок,
расположенных в окне аплета. В зависимости от
того, какая именно кнопка была нажата,
выполняются различные действия.
Если пользователь нажал кнопку Play, вызывается
метод play для запуска однократного проигрывания
звукового файла:
auClip.play();
btStop.enable();
Сразу после того как проигрывание будет
запущено, приложение разблокирует кнопку Stop,
предоставляя пользователю возможность прервать
звучание.
В том случае, когда пользователь нажал кнопку
Loop, вызывается метод loop, запусчкающий
проигрывание звукового файла в цикле:
auClip.loop();
fLoopPlay = true;
btStop.enable();
После запуска устанавливается флаг fLoopPlay и
разблокируется кнопка Stop.
И, наконец, если пользователь нажимает кнопку
Stop, выполняется остановка проигрывания методом
stop:
auClip.stop();
fLoopPlay = false;
btStop.disable();
Флаг fLoopPlay сбрасывается, после чего кнопка Stop
блокируется.
Метод start
Метод start получает управление при первом
запуска аплета, а также когда страница документа
появляется вновь после того как пользователь
временно переходил к просмотру другой страницы.
Наша реализация метода start возобновляет
циклическое проигрывание, если оно выполнялось,
когда пользователь покинул страницу с аплетом:
if(fLoopPlay)
auClip.loop();
Метод stop
Если пользователь запустил проигрывание
звукового файла в цикле, а затем перешел к
просмотру другой страницы, метод stop
останавливает циклическое проигрывание:
if(fLoopPlay)
auClip.stop();
Когда пользователь вернется к просмотру нашей
страницы, метод start, описанный выше, возобновит
проигрывание звукового файла.
|