Информатика и информационные технологии Электротехника История искусства Каталог графических примеров

Аплет PlayClip

Назад

Аплет PlayClip демонстрирует использование интерфейса AudioClip. В его окне (рис. 1) имеются три кнопки с названиями Play, Loop и Stop.

pic01.gif (1685 bytes)

Рис. 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, описанный выше, возобновит проигрывание звукового файла.

Назад
Начертательная геометрия и инженерная графика, перспектива