Java Language
Aplety
Szukaj…
Wprowadzenie
Aplety są częścią Javy od czasu jej oficjalnego wydania i od wielu lat są używane do nauczania języka Java oraz programowania.
W ostatnich latach nastąpił czynny nacisk na odejście od apletów i innych wtyczek do przeglądarek, przy czym niektóre przeglądarki blokują je lub aktywnie nie obsługują.
W 2016 r. Oracle ogłosiło plany wycofania wtyczki, przechodząc do sieci bez wtyczek
Dostępne są nowsze i lepsze interfejsy API
Uwagi
Aplet to aplikacja Java, która zwykle działa w przeglądarce internetowej. Podstawową ideą jest interakcja z użytkownikiem bez konieczności interakcji z serwerem i przesyłania informacji. Ta koncepcja była bardzo udana około 2000 roku, kiedy komunikacja internetowa była powolna i droga.
Aplet oferuje pięć metod kontrolowania ich cyklu życia.
nazwa metody | opis |
---|---|
init() | jest wywoływany raz, gdy aplet jest ładowany |
destroy() | jest wywoływany raz, gdy aplet zostanie usunięty z pamięci |
start() | jest wywoływany za każdym razem, gdy aplet staje się widoczny |
stop() | jest wywoływany za każdym razem, gdy aplet nakłada się na inne okna |
paint() | jest wywoływany w razie potrzeby lub uruchamiany ręcznie przez wywołanie repaint() |
Minimalny aplet
Bardzo prosty aplet rysuje prostokąt i drukuje coś na ekranie.
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);
}
}
Główna klasa apletu pochodzi z javax.swing.JApplet
.
Przed Javą 1.2 i wprowadzeniem swingowych apletów API rozszerzono z java.applet.Applet
.
Aplety nie wymagają głównej metody. Punkt wejścia jest kontrolowany przez cykl życia. Aby z nich skorzystać, muszą być osadzone w dokumencie HTML. Jest to także punkt, w którym określa się ich rozmiar.
<html>
<head></head>
<body>
<applet code="MyApplet.class" width="400" height="200"></applet>
</body>
</html>
Tworzenie GUI
Apletów można łatwo użyć do utworzenia GUI. Działają jak Container
i mają metodę add()
, która pobiera dowolny komponent awt
lub 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);
}
}
Otwórz linki z poziomu apletu
Możesz użyć metody getAppletContext()
aby uzyskać obiekt AppletContext
który pozwala poprosić przeglądarkę o otwarcie łącza. W tym celu używasz metody showDocument()
. Drugi parametr mówi przeglądarce, aby używała nowego okna _blank
lub tego, który pokazuje aplet _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);
}
}
Ładowanie zdjęć, audio i innych zasobów
Aplety Java mogą ładować różne zasoby. Ale ponieważ działają one w przeglądarce internetowej klienta, musisz upewnić się, że te zasoby są dostępne. Aplety nie mają dostępu do zasobów klienta jako lokalny system plików.
Jeśli chcesz załadować zasoby z tego samego adresu URL, w którym przechowywany jest aplet, możesz użyć metody getCodeBase()
aby pobrać podstawowy adres URL. Aby załadować zasoby, aplety oferują metody getImage()
i getAudioClip()
do ładowania obrazów lub plików audio.
Załaduj i pokaż obraz
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);
}
}
Załaduj i odtwórz plik audio
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();
}
}
Załaduj i wyświetl plik tekstowy
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 */ }
}
}