Chương 3: CÁC APPLET
3.1.2 Tạo một Applet đơn giản
Để tạo một Applet bạn phải tìm hiểu thêm môt số vấn đề khác, cụ thể:
Phải bổ sung các câu lệnh import Các Method Applet
Các keyword extends Và một số vấn đề khác
Các Applet chứa tối thiểu hai câu lệnh:
import java.applet.* và import java.awt.*
Gói (package) java.applet chứa một class có tên Applet, mỗi class do bạn tự tạo
phải dựa trên class này.
Gói java.awt (Abstract Windows Toolkit) chứa các thành phần Windows như
nhãn, menu, nút, v.v..Nhãn là một class chứa text mà ta có thể dùng để hiển thị
trong Applet.
Trong trình ứng dụng thì method main() sẽ lần lượt gọi các method khác, nh ưng
trong Applet thì bộ trình duyệt sẽ gọi nhiều method một cách tự động, mỗi applet
bao gồm 4 method sau:
public void init() public void start() public void stop() public void destroy()
Nếu không có các method này thì java sẽ tạo chúng và chúng chỉ có các nối kết đóng mở mà không có nội dung. Method init() l à method đầu tiên được gọi trong
một appletl, bạn sử dụng nó để khởi tạo các biến hoặc đặt các applet l ên màn hình v.v..Ví dụ sau là một lớp có tên Vidu để hiển thị “Chào bạn!” lên màn hình:
import java.applet.*; import java.awt.*;
public class Vidu extends Applet {
Label Label1=new Label(“Chao ban ”);
public void init() {
add(Label1); }
}
Để tạo và chạy một applet bạn theo các b ước sau:
Chọn Emply Project và gõ Vidu vao hộp Name, chọn Open ta có hộp thoại
tiếp và tiếp theo chọn tiếp Project /Add Class ta có:
Gõ Vidu.java vào hộp Name và chọn Open ta có mã sau:
public class Vidu {
}
Bỏ mã đó và gõ vào như sau:
import java.applet.*; import java.awt.*;
public class Vidu extends Applet {
Label Label1=new Label(“Chao ban ”);
public void init() {
add(Label1); }
}
Tiếp theo chọn Project / Add Web Page ta có:
Gõ Vidu.htm vào hộp Name và chọn Open, ta có:
Sửa các thẻ để trở thành: <HTML>
<META NAME="GENERATOR" Content="Microsoft Visual Studio 6.0"> </HEAD> <BODY> <P> </P> <APPLET CODE=Vidu.class NAME=Vidu WIDTH=320 HEIGHT=200 >
<PARAM NAME=background value="008080"> <PARAM NAME=foreground value="FFFFFF"> </APPLET>
</BODY> </HTML>
Chọn Project /Vidu Properties v à đặt Vidu.htm vào hộp When projects
runs, load như sau
Chọn OK
3.2 Cửa sổ
Java có rất nhiều lớp khác nhau nh ư Frame, Panel, Button, TextField, TextArea
v.v.. nhờ nó bạn có thể xây dựng đ ược các ứng dụng riêng của mình. Các lớp này là một phần của lớp AWT (Abstract Window Tooolkit).
AWT chứa nhiều nội dung phong phú, tr ước hết ta làm quen với lớp Frame trong đó.
3.2.1 Tạo cửa sổ bằng lớp Frame
Để tạo một cửa sổ ta dùng lớp Frame. Bạn xem đoạn mã sau: import java.applet.*;
import java.awt.*;
public class Vidu extends Applet {
Frame WinFrame; public void init()
{
WinFrame=new Frame("Cua so Frame”);
WinFrame.setSize(400,400); WinFrame.setVisible(true); }
}
Bạn hãy chú ý các dòng lệnh trên:
Frame WinFrame; (khai báo biến WinFrame)
WinFrame=new Frame("Cua so Frame”); (Đây là m ột constructor: Tạo
WinFrame.setSize(400,400); (Đặt kích cỡ cửa sổ 400 x 400 WinFrame.setVisible(true); (Đ ặt true ứng với lộ diện cửa sổ)
Biên dịch (Build/Build) và chạy (Debug/Starrt) ta có cửa sổ sau:
Để cửa sổ trên có thể chỉnh sửa kích cỡ được, bạn nên đưa vào dòng lệnh:
WinFrame.setResizable(true);
còn nếu WinFrame.setResizable (false); thì không chỉnh cỡ được.
Nếu bạn cần thay đổi tiêu đề cửa sổ hãy dùng phương thức: WinFrame.setTitle("Day la tieu de moi”);
Bạn cũng có thể tạo màu bằng:
WinFrame.setBackground(Color.red);
Đoạn mã trên có thể thêm để trở thành: import java.applet.*;
import java.awt.*;
public class Vidu extends Applet {
Frame WinFrame; public void init()
{
WinFrame=new Frame("Cua so Frame”);
WinFrame.setSize(400,400); WinFrame.setVisible(true); WinFrame.setResizeable(true);
WinFrame.setBackground(Color.red); }
}
Sau khi chạy ta có cửa sổ mới như sau:
3.2.2 Tính kế thừa trong Applet
Đoạn mã sau dùng để vẽ một hình chữ nhật và một hình ellipse nội tiếp trong
hình chữ nhật đó. Bạn quan sát lớp Shape xem nó hoạt động thế nào! import java.applet.*;
import java.awt.*;
public class Vidu extends Applet {
Shape m_Shape=new Shape(); public void paint(Graphics g)
{
m_Shape.draw(g); }
public class Shape {
int x1=40,y1=40;
public void draw(Graphics g) {
g.setColor(Color.red); g.drawRect(x1,y1,60,70);
g.setColor(Color.blue); g.drawOval(x1,y1,60,70); }
public void setPosition(int x, int y) {
x1=x; y1=y; }
public void movePosition(int dx, int dy) { x1=x1+dx; y1=y1+dy; } } }
Khi chạy ta có kết quả sau:
Bây giờ ta kế thừa và thêm một số lệnh (phần bôi đen) để có lớp mới nh ư đoạn
mã sau:
import java.applet.*; import java.awt.*;
{
// Tạo m _Shape từ lớp kế thừa KeThuaShape
KeThuaShape m_Shape=new KeThuaShape();
public void paint(Graphics g) {
// Gọi TrungTamShape ()từ lớp kế thừat
m_Shape.TrungTamShape(); m_Shape.draw(g);
}
public class Shape {
int x1=40,y1=40;
public void draw(Graphics g) { g.setColor(Color.red); g.drawRect(x1,y1,60,70); g.setColor(Color.blue); g.drawOval(x1,y1,60,70); }
public void setPosition(int x, int y) {
x1=x; y1=y; }
public void movePosition(int dx, int dy) { x1=x1+dx; y1=y1+dy; } } //Kế thừa
public class KeThuaShape extends Shape {
public void TrungTamShape() {
Dimension Size=getSize(); int newx, newy;
newx=(Size.width/2)-30; newy=(Size.height/2)-35; setPosition(newx,newy); }
}
Sau khi chạy ta có kết quả sau:
Lớp KeThuaShape có mọi tính năng của Shape, chúng ta chỉ thêm phương thức TrungTamShape() để đưa hình được tạo ra nằm giữa cửa sổ Applet mà thôi.
3.3 Menu
Trong Java có khái niệm siêu lớp - super, một lớp đã tồn lại gọi là siêu lớp, lớp
kế thừa từ nó gọi là lớp con, có khi siêu lớp còn gọi là lớp cha và cũng có thể là lớp con nếu nó đã được kế thừa (tuỳ ngữ cảnh). Ph ương thức super() có thể được
sử dụng theo hai cách: để gọi ph ương thức của một siêu lớp, thứ hai để gọi
constructor của một siêu lớp.
Ta có thể đưa Menu vào Applet. Trư ớc hết phải tạo một cửa sổ bằng lớp
Frame, sau đó đưa Menu vào cửa sổ đó. Hãyđọc đoạn mã sau: import java.applet.*;
import java.awt.*;
import java.awt.event.*;
public class Vidu extends Applet {
MyFrame m_Frame=new MyFrame("Vi du ve Menu"); Label m_1Label=new Label("Ban chua chon");
public void init() {
m_Frame.add(m_1Label);
MyListener Listener=new MyListene r(); MenuBar menu=new MenuBar();
menu.add(file); file.add("Open"); file.add("Close");
file.addActionListener(Listener); Menu options=new Menu("Option"); menu.add(options);
options.add("set to red"); options.add("set to Green"); options.add("set to blue");
options.addActionListener(Listener); Menu actions=new Menu("Actions"); menu.add(actions); actions.add("go home"); actions.add("go to Work"); options.addActionListener(Listener); m_Frame.setMenuBar(menu); m_Frame.setSize(300,200); m_Frame.setVisible(true); }
public class MyListener implements ActionListener {
public void actionPerformed(ActionEvent ae) {
if (ae.getSource() instanceof MenuComponent) {
m_1Label.setText("Ban da chon "+ae.getActionCommand()); }
} }
public class MyFrame extends Frame { MyFrame(String s) { super(s); addWindowListener(new WL()); }
public class WL extends WindowAdapter {
public void WindowClosing(WindowEven t e) {
setVisible(false); m_Frame=null;
} } } }
Sau khi chạy ta có kết quả:
Nếu bạn chọn Option sẽ có:
Sau đây là ví dụ về tạo Menu Popup:
import java.applet.*; import java.awt.*;
import java.awt.event.MouseListener; import java.awt.event.*;
public class Vidu extends Applet {
PopupMenu m_Popup=new PopupMenu(); public void init()
{
m_Popup.add("Thit"); m_Popup.add("Ca"); m_Popup.add("Rau");
MyButton button=new MyButton("Mon an"); button.add(m_Popup);
add(button); }
public class MyButton extends Button { MyButton(String s) { super(s); enableEvents(AWTEvent.ACTION_EVENT_MASK); }
public void processActionEvent(ActionEvent ae) {
m_Popup.show(this,0,0); }
} }
Sau khi chạy ta có kết quả: