Java Language
Апплеты
Поиск…
Вступление
Апплеты были частью Java с момента его официального выпуска и были использованы для обучения Java и программирования в течение ряда лет.
В последние годы наблюдается активный толчок к удалению от апплетов и других плагинов браузеров, причем некоторые браузеры блокируют их или активно не поддерживают их.
В 2016 году Oracle объявила о своих планах отказаться от плагина, перейдя в плагиновую сеть
Теперь доступны новые и лучшие API-интерфейсы
замечания
Апплет - это приложение Java, которое обычно запускается внутри веб-браузера. Основная идея заключается в том, чтобы взаимодействовать с пользователем без необходимости взаимодействия с сервером и передачи информации. Эта концепция была очень успешной в 2000 году, когда интернет-общение было медленным и дорогостоящим.
Апплет предлагает пять методов контроля жизненного цикла.
имя метода | описание |
---|---|
init() | вызывается один раз при загрузке апплета |
destroy() | вызывается один раз, когда апплет удаляется из памяти |
start() | вызывается всякий раз, когда апплет становится видимым |
stop() | вызывается всякий раз, когда апплет накладывается другими окнами |
paint() | вызывается при необходимости или вручную запускается вызовом repaint() |
Минимальный апплет
Очень простой апплет рисует прямоугольник и печатает строку на экране.
public class MyApplet extends JApplet{
private String str = "StackOverflow";
@Override
public void init() {
setBackground(Color.gray);
}
@Override
public void destroy() {}
@Override
public void start() {}
@Override
public void stop() {}
@Override
public void paint(Graphics g) {
g.setColor(Color.yellow);
g.fillRect(1,1,300,150);
g.setColor(Color.red);
g.setFont(new Font("TimesRoman", Font.PLAIN, 48));
g.drawString(str, 10, 80);
}
}
Основной класс апплета простирается от javax.swing.JApplet
.
До появления Java 1.2 и внедрения апплетов swing API были расширены из java.applet.Applet
.
Апплеты не требуют основного метода. Точка входа контролируется жизненным циклом. Чтобы использовать их, они должны быть встроены в HTML-документ. Это также точка, в которой определяется их размер.
<html>
<head></head>
<body>
<applet code="MyApplet.class" width="400" height="200"></applet>
</body>
</html>
Создание графического интерфейса
Апплеры могут быть легко использованы для создания графического интерфейса. Они действуют как Container
и имеют метод add()
который принимает любой компонент awt
или swing
.
public class MyGUIApplet extends JApplet{
private JPanel panel;
private JButton button;
private JComboBox<String> cmbBox;
private JTextField textField;
@Override
public void init(){
panel = new JPanel();
button = new JButton("ClickMe!");
button.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent ae) {
if(((String)cmbBox.getSelectedItem()).equals("greet")) {
JOptionPane.showMessageDialog(null,"Hello " + textField.getText());
} else {
JOptionPane.showMessageDialog(null,textField.getText() + " stinks!");
}
}
});
cmbBox = new JComboBox<>(new String[]{"greet", "offend"});
textField = new JTextField("John Doe");
panel.add(cmbBox);
panel.add(textField);
panel.add(button);
add(panel);
}
}
Открытые ссылки из апплета
Вы можете использовать метод getAppletContext()
чтобы получить объект AppletContext
который позволяет запросить браузер, чтобы открыть ссылку. Для этого вы используете метод showDocument()
. Второй параметр указывает браузеру использовать новое окно _blank
или тот, который показывает апплет _self
.
public class MyLinkApplet extends JApplet{
@Override
public void init(){
JButton button = new JButton("ClickMe!");
button.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent ae) {
AppletContext a = getAppletContext();
try {
URL url = new URL("http://stackoverflow.com/");
a.showDocument(url,"_blank");
} catch (Exception e) { /* omitted for brevity */ }
}
});
add(button);
}
}
Загрузка изображений, аудио и других ресурсов
Java-апплеты могут загружать разные ресурсы. Но поскольку они работают в веб-браузере клиента, вам необходимо убедиться, что эти ресурсы доступны. Апплеты не могут обращаться к клиентским ресурсам как к локальной файловой системе.
Если вы хотите загружать ресурсы с одного и того же URL-адреса, Applet хранится, вы можете использовать метод getCodeBase()
для извлечения базового URL-адреса. Для загрузки ресурсов апплеты предлагают методы getImage()
и getAudioClip()
для загрузки изображений или аудиофайлов.
Загрузите и покажите изображение
public class MyImgApplet extends JApplet{
private Image img;
@Override
public void init(){
try {
img = getImage(new URL("http://cdn.sstatic.net/stackexchange/img/logos/so/so-logo.png"));
} catch (MalformedURLException e) { /* omitted for brevity */ }
}
@Override
public void paint(Graphics g) {
g.drawImage(img, 0, 0, this);
}
}
Загрузка и воспроизведение аудиофайла
public class MyAudioApplet extends JApplet{
private AudioClip audioClip;
@Override
public void init(){
try {
audioClip = getAudioClip(new URL("URL/TO/AN/AUDIO/FILE.WAV"));
} catch (MalformedURLException e) { /* omitted for brevity */ }
}
@Override
public void start() {
audioClip.play();
}
@Override
public void stop(){
audioClip.stop();
}
}
Загрузка и отображение текстового файла
public class MyTextApplet extends JApplet{
@Override
public void init(){
JTextArea textArea = new JTextArea();
JScrollPane sp = new JScrollPane(textArea);
add(sp);
// load text
try {
URL url = new URL("http://www.textfiles.com/fun/quotes.txt");
InputStream in = url.openStream();
BufferedReader bf = new BufferedReader(new InputStreamReader(in));
String line = "";
while((line = bf.readLine()) != null) {
textArea.append(line + "\n");
}
} catch(Exception e) { /* omitted for brevity */ }
}
}