JAVA Applet
Khái niệm có bản về Applet Chương trình ứng dụng <-> phưong thức main() . Applet không có phương thức main(). Các sự kiện cần xử lí. - applet được nạp xuống - có ...
Khái niệm có bản về Applet
Chương trình ứng dụng <-> phưong thức main() .
Applet không có phương thức main().
Các sự kiện cần xử lí.
- applet được nạp xuống
- có thay đổi trong nội dung cần hiển thị.
- browser dừng chương trình.
- chương trình khỏi động lại sau khi dừng.
- applet kết thúc và được giải phóng.
Khung cấu trúc
Khung cấu trúc của applet
import java.applet.*;
import java.awt.*;
public class <tên Applet> extends Applet {
// các biến thành phần.
// các phương thức.
public void paint(Graphics g) { ... }
public void init();
...
}
Lớp Applet có các phương thức
init(), paint(), start(), stop(), destroy() : chỉ có tên mà chưa thực hiện bất cứ việc gì.
Ta cần phải viết đè để bổ xung các nội dung xử lí cần thiết.
Hai phương thức thường phải phát triển bổ xung nhất là paint() và init().
Phương thức paint và init.
Mỗi khi cần hiển thị nội dung mới.
Khi thu nhỏ cửa sổ rồi lại phóng to lên.
Cần gọi paint() để hiển thị lại nội dung.
Paint () có tham đối Graphics
Graphics có các phưong thức đồ hoạ để vẽ các hình hình hoc, hiển thị xâu kí tự ...
Lưu ý : - phương thức paint() phải được mô tả là public vì browser gọi nó khi cần vẽ lại nội dung.
- Các phương thức khác đều được gọi (sử dụng) nhưng paint() thì chỉ được xây dựng, không có câu lệnh gọi nó trực tiếp.
- Từ trong các phương thức khác muốn vẽ lại nội dung hiển thị ta gọi repaint(). Repaint() sẽ gọi paint().
Phương thức init() được thực hiện một lần và chỉ một lần ngay sau khi applet bắt đầu chạy.
Để thực hiện mọi phép khởi trị cho các biến, các đối tượng, để thiết đặt màu sắc, phông chữ..
Một applet đơn giản.
Hiển thị dòng chữ Text bắt đầu tại điểm có toạ độ x,y.
SampleApplet.java.
import java.applet.*;
import java.awt.*;
public class SampleApplet extends Applet {
String text = "error";
int x = 0;
int +y = 20;
public void init() {
text = getParameter("text");
try {
x = Integer.parseInt(getParameter("x"));
y = Integer.parseInt(getParameter("y"));
}catch(NumberFormatException ex){
}
}
public void paint(Graphics g) {
g.setFont(new Font("TimesRoman",Font.BOLD+Font.ITALIC,36));
g.drawString(text,x,y);
}
}
Để cho chạy applet trên ta sử dụng trang Web sau.
sample.htm.
<HTML>
<HEAD>
<TITLE>Using the Applet Tag</TITLE>
</HEAD>
<BODY>
<H1>An Applet that Displays Text at a Designated Location</H1>
<APPLET CODE="SampleApplet.class" HEIGHT=300 WIDTH=300>
<PARAM NAME="text" VALUE="Applets are fun!">
<PARAM NAME="x" VALUE="50">
<PARAM NAME="y" VALUE="50">
Text displayed by browsers that are not Java-enabled.
</APPLET>
</BODY>
</HTML>
Thẻ <applet> để hiển thị SampleApplet
Vùng hiển thị là khung hình chữ nhật 300 * 300.
Param: để gán giá trị cho ba tham số Text, x, y của applet
Trong văn bản mã nguồn của applet, các tham số Text, x,y được gán sẵn các giá trị mặc định. Đây là các giá trị sẽ dùng khi gọi applet mà không chỉ ra tham số.
init() dùng getParameter() để nhận các gía trị của text, x, y.
paint() được Java gọi để cập nhật vùng hiển thị.
Thẻ <APPLET>
Để chèn applet vào môt trang Web.
Thẻ <APPLET> có 11 thuộc tính: ALIGN, ALT, ARCHIVES, CODE, CODEBASE, HEIGHT, HSPACE, NAME, OBJECT, VSPACE, và WIDTH.
3 thuộc tính bắt buộc : CODE, HEIGHT, WIDTH.
- Thuộc tính CODE xác định địa chỉ URL của tệp mã bytecode của applet.
- Thuộc tính WIDTH xác định chiều rộng của vùng hiển thị applet.
- Thuộc tính HEIGHT xác định chiều cao của vùng hiển thị.
- Thuộc tính ALIGN căn vị trí hiển thị của applet.
có thể nhận các gía trị TOP, TEXTTOP, BOTTOM, ABSBOTTOM, BASELINE, MIDDLE, ABSMIDDLE, LEFT, RIGHT.
- Thuộc tính ALT để hiển thị dòng chữ thông báo khi browser hỗ trợ thẻ <APPLET> , nhưng không hỗ trợ Java applets hoặc chức năng applet bị tắt.
- Thuộc tính ARCHIVES để nạp và sử dụng các class archives.
- Thông thường tệp mã của applet nói trong thuộc tính CODE, nằm trong URL của trang tài liệu Web chứa nó. Nếu khác đi thì phải dùng thuộc tính CODEBASE để thay đổi địa chỉ này.
- Thuộc tính HSPACE xác định lề trái và phải (theo số pixels) của vùng hiển thị .
- Thuộc tính NAME dùng để gán một tên cho applet. Tên này sẽ dùng trong giao tiếp giữa các applet.
- Thuộc tính VSPACE xác định lề trên và dưới của vùng hiển thị (theo số pixels).
Truyền tham số cho applet.
Thẻ <APPLET> là thẻ bao bọc ngoài.
Thẻ <param> có hai thuộc tính NAME và VALUE.
Ví dụ
<PARAM NAME="speed" VALUE="slow">
<PARAM NAME="duration" VALUE="long">
<PARAM NAME="delay" VALUE="short">
Khi trang Web được mở, applet sẽ dùng getParameter() để nhận các tham số.
2.3 Hoạt động của Applet
Vòng đời của một Applet
Applet được tự động khởi tạo bởi Web browser hay applet viewer.
init() thực hiện việc nạp các tham số của applet và hoàn thành mọi khởi tạo cần thiết
start() bắt đầu việc thực hiện hay tái thực hiện lại khi người sử dụng quay trở lại trang Web có applet.
stop() dể dừng applet khi trang Web có chứa nó không còn hiển thị nữa
destroy() để chấm dứt sự tồn tại.
Đáp ứng các sự kiện
Applet là lớp con của Panel.
Applet xử lí các sự kiện giống như các thành phần window khác.
Các phương thức init(), start(), stop(), destroy() là của môi trường Java. Chúng chỉ áp dụng cho applet không dùng đựoc cho các thành phần window khác.
java.applet package
Panel -> Applet
Sử dụng được hầu hết các GUI components.
xử lí sự kiện tưong tự như một chương trình Java độc lập.
java.applet package là packages nhỏ nhất trong Java API.
Nó chứa một lớp : Applet
3 interfaces : AppletContext, AppletStub, AudioClip.
Các thành phần.
Applet có 23 phương thức
init(), start(), stop(), destroy().
isActive() để xác định một applet còn sống không
getImage(), getAudioClip().
play() để phát tệp âm thanh chỉ định bởi URL.
getAppletContext() để lấy đối tượng AppletContext gắn với applet.
getAppletInfo() trả lại một String, cung cấp các thông tin về applet : version, copyright, thông tin về tác giả và các số liệu khác.
getAppletInfo() sẽ được viết đè.
getCodeBase() để lấy URL xác định địa chỉ của applet.
getDocumentBase() để lấy URL của tài liệu chứa applet.
getParameter() để lấy các tham số từ tệp HTML để truyền cho applet. getParameterInfo() để lấy một mảng mô tả mọi tham số của applet. Nó sẽ được viết đè.
resize() để định lại kích thước
showStatus() để hiển thị một thông báo về trạng thái.
AppletContext interface xác định các phương thức để applet thâm nhập môi trường thi hành : thường là bộ duyệt Web : Netscape Navigator hay Microsoft Internet Explorer, nhưng cũng có thể là applet viewer.
Lấy AppletContext bằng getAppletContext().
AppletContext cung cấp 7 phương thức, cho phép applet nhận thông tin và tác động lên môi trường :
getApplets() trả về một đối tưọng liệt kê, chứa mọi applet có thể thâm nhập được trong môi trường.
getApplet() trả về một đối tượng Applet có tên đã chỉ ra bởi tham sô.
getAudioClip() trả về đối tượng AudioClip tạI URL đã cho
getImage() trả về đối tượng Image tại URL đã cho.
showDocument() báo cho Web browser hiển thị tài liệu Web tại URL.
showStatus() để hiển thị thông báo về status qua Web browser .
AudioClip interface định nghĩa 3 phương thức:
Play() để phát lại,
stop() để kết thúc,
loop() để bắt đầu và phát lại nhiều lần.
Sử dụng các thành phần Window
Applet có thể sử dụng hầu hết các thành phần GUI giống như một chương trình window, gồm :
labels, buttons, checkboxes, radio buttons, lists, text components, canvases, scrollbars.
Thành phần GUI duy nhất mà applet không sử dụng được là menu.
Menu gắn với Frame, Frame gắn với ứng dụng window.
Applet có thể tạo ra một ứng dụng window tách biệt dưới dạng một Frame object, nhưng một ứng dụng như thế phải được tin cậy để có thể chạy trên hệ thống của NSD.
Khả năng hỗ trợ
Applet có thể hiển thị hình ảnh và phát tệp âm thanh.
Hình ảnh được hiển thị trên đối tượng Canvas gắn với vùng hiển thị của applet. JAVA cung cấp cơ chế mới để phát tệp âm thanh trong applet và trong ứng dụng. Nó hỗ trợ các dạng tệp sau
- MIDI (type 0 và type 1)-- Musical Instrument Digital Interface.
- RMF--Rich Music Format.
- WAVE--tệp âm thanh Microsoft Windows.
- AIFF--Audio Interchange File Format (Macintosh, Silicon Graphics).
- AU-- tệp âm thanh Sun.
Play() để phát một tệp âm thanh tại địa chỉ URL đã cho.
Một cách linh hoạt hơn là nạp đối tưọng với AudioClip và sau đó gọi các phương thức play(), loop(), stop()
getAudioClip() dùng để nạp tệp tại địa chỉ URL.
Ví dụ : Applet Audio Player
Dưới đây sẽ trình bày applet AudioPlayer, mã nguồn của AudioPlayer như sau
AudioPlayer.
import java.applet.*;
import java.awt.*;
import java.awt.event.*;
import java.net.*;
public class AudioPlayer extends Applet {
AudioClip music;
Image background;
public void init() {
URL codeBase = getCodeBase();
music = getAudioClip(codeBase,"spacemusic.au");
background = getImage(codeBase,"space.gif");
setLayout(new BorderLayout());
Panel buttons = new Panel();
Button playButton = new Button("Play");
Button stopButton = new Button("Stop");
Button loopButton = new Button("Loop");
playButton.addActionListener(new ButtonHandler());
stopButton.addActionListener(new ButtonHandler());
loopButton.addActionListener(new ButtonHandler());
buttons.add(playButton);
buttons.add(stopButton);
buttons.add(loopButton);
add("South",buttons);
}
public void stop() {
music.stop();
}
public void paint(Graphics g) {
g.drawImage(background,0,0,this);
}
class ButtonHandler implements ActionListener {
public void actionPerformed(ActionEvent e){
String s = e.getActionCommand();
if("Play".equals(s)) music.play();
else if("Stop".equals(s)) music.stop();
else if("Loop".equals(s)) music.loop();
}
}
}
Tệp HTML để chạy applet.
audio.htm
<HTML>
<HEAD>
<TITLE>Audio Player</TITLE>
</HEAD>
<BODY>
<APPLET CODE="AudioPlayer.class" WIDTH=300 HEIGHT=350>
[AudioPlayer applet]
</APPLET>
</BODY>
</HTML>
AudioPlayer khai báo hai biến, music và background, dùng để ghi địa chỉ tệp âm thanh và ảnh nền.
Biến music có kiểu là AudioClip.
AudioPlayer chứa 3 phương thức: init(), stop(), paint().
init() sẽ được browser gọi để nạp applet lần đầu tiên, thực hiện các khởi tạo cần thiết để thực hiện applet.
stop() để kết thúc applet, nó được gọi khi trang Web không còn hiển thị nữa.
Ta không phải gọi trực tiếp các phương thức init(), stop().
Khi applet không còn đựoc hiển thị nữa, phương thức stop() của AudioPlayer sẽ gọi stop() của AudioClip để dừng phát âm nhạc.
paint() vẽ hình ảnh đã cho trong biến background.
actionPerformed() của ButtonHandler sẽ sử lí 3 sự kiện tiềm năng gắn với applet : đó là khi nhấn vào các nút Play, Stop, Loop.
Nhấn Play : sẽ gọi phương thức play() của AudioClip để phát audio clip.
Nhấn Stop : sẽ gọi stop() để dừng âm nhạc.
Nhấn Loop : sẽ gọi thì loop() để phát liên tục không dừng.