Chương 7 – Giao dien đồ họa – Lập trình hướng đối tượng (Java) – Khoa Công Nghệ Thông Tin – Thư viện trực tuyến Khoa Công Nghệ Thông Tin

Tài liệu chưa được thẩm định)
Nguồn:
Người gửi: Khoa Công Nghệ Thông Tin (trang riêng)
Ngày gửi: 13h:00′ 22-01-2013
Dung lượng: 6.8 MB
Số lượt tải: 37

Số lượt thích:

0 người

13h:00′ 22-01-20136.8 MB37

Chương 7. Giao diện đồ họa
Nội dung
• Giới thiệu về AWT • Lớp Component
• Lớp Container
• Một số thành phần cơ bản • Trình bày các thành phần • Xử lý sự kiện
• Applet
• Vẽ trên giao diện đồ họa
2
1. Giới thiệu về AWT
• Java cung cấp hai gói hỗ trợ cho lập trình giao diện đồ họa là: java.awt và javax.swing.
• AWT (Abstract Windows Toolkit) là bộ công cụ lập trình giao diện đồ họa trên windows.
• SWING là mô hình phát triển của AWT theo xu hướng độc lập với hệ thống.
3
Sơ đồ các lớp trong AWT
AWTEvent
Container
Panel
Applet
Font
Button
Window
Frame
FontMetrics
Label
Dialog
FileDialog
TextField
Object
Color
TextComponent
TextArea
Graphics
List
Component
Choice
CheckBox
LayoutManager
CheckBoxGroup Canvas
MenuComponent
MenuItem
Menu
MenuBar
Scrollbar
4
2. Lớp Component
• Lớp Component: là lớp trừu tượng cơ sở của tất cả các thành phần trong AWT.
• Component cung cấp các chức năng để xử lý các sự kiện, thay đổi kích thước các thành phần, điều khiển font, màu và vẽ lên các thành phần.
• Một số phương thức:
• void setSize(int width, int height): đặt kích thước cho thành phần.
2. Lớp Component (tiếp)
• void setForeground(Color c): đặt màu vẽ cho thành phần đồ họa. • void setBackground(Color c): đặt màu nền cho thành phần đồ họa.
• Font getFont(): trả về đối tượng Font đang sử dụng cho thành phần.
• void setFont(Font f): đặt lại font cho thành phần. • void setEnable(boolean b): quy định một thành phần có được phép làm việc không.
• void setVisible(boolean b): quy định thành phần có hiển thị trên màn hình hay không.
3. Lớp Container
• Lớp Container: kế thừa từ lớp Component, là lớp chứa các thành phần khác để xây dựng những giao diện phức tạp.
• Phương thức của lớp Container kế thừa từ lớp Component, bổ sung thêm phương thức: • void add(Component c): thêm một thành phần vào Container.
• Các lớp con của lớp Container:
• Lớp Panel: là một thành phần chứa kế thừa từ Container.
• Lớp Window: kế thừa từ lớp Container, đại diện cho một cửa sổ nhưng không có tiêu đề, menu.
• Lớp Frame: kế thừa từ lớp Window, là lớp dùng để tạo cửa sổ trong đó chứa thanh tiêu đề, menu và các đường viền.
• Canvas: là cửa sổ trống dùng để vẽ.
3. Lớp Container – Frame
• Phương thức khởi tạo:
• Frame(): tạo một cửa sổ với tiêu đề trống. • Frame(String title): tạo một cửa sổ với tiêu đề.
9
Một số thành phần cơ bản
4.1 Lớp Font và Color
• Lớp Font dùng để tạo font chữ cho các thành phần.
• Phương thức khởi tạo:
• Font(String tenFont, int kieu, int co) • Các hằng xác định kiểu:
• PLAIN
• BOLD
• ITALIC
• Ví dụ: Font fo=new Font(“Arial”,Font.BOLD,20);
Lớp Color
• Lớp Color dùng quy định các màu vẽ cho các thành phần.
• Một số hằng: • red
• RED • blue
• BLUE • …
4.2 Lớp Label
• Dùng để tạo các nhãn trên cửa sổ. • Phương thức khởi tạo:
• Label(): tạo nhãn trống.
• Label(String text): tạo nhãn chứa nội dung.
• Một số phương thức thường dùng:
• String getText(): trả về nội dung của nhãn.
• void setText(String text): đặt nội dung vào nhãn.
• Ví dụ: chương trình hiển thị dòng chữ “Chao Java – AWT” trên màn hình đồ họa.
import java.awt.*; class vdawt1 {
public static void main(String args[]){ Frame f = new Frame(“Chao”);
Label l = new Label(“Chao Java – AWT”); Font fo = new Font(“Arial”,Font.BOLD,20); l.setFont(fo);
l.setForeground(Color.red); f.add(l);
f.setSize(200,100); f.setVisible(true); }
}
1
4.3 Lớp TextField
• Lớp TextField: dùng để tạo các ô nhập dữ liệu. • Phương thức khởi tạo:
• TextField(): tạo một TextField trống.
• TextField(String text): tạo một TextField chứa nội dung text.
• TextField(int n): tạo TextField chứa được n ký tự.
4.3 Lớp TextField (tiếp)
• Các phương thức thường dùng: • String getText()
• void setText(String)
• Ví dụ: chương trình minh họa nhập dữ liệu đơn giản.
import java.awt.*; class vdawt2{
public static void main(String args[]) { Frame f = new Frame(“Nhap du lieu”); Label l = new Label(“Nhap vao ho ten “); TextField tf = new TextField(20); f.setLayout(new FlowLayout());
f.add(l);f.add(tf);
f.setSize(350,150); f.setVisible(true); }
}
4.4 Lớp TextArea
• Dùng để tạo các ô nhập, hiển thị dữ liệu trên nhiều dòng.
• Phương thức khởi tạo: • TextArea()
• TextArea(String text) • TextArea(int m, int n)
4.4 Lớp TextArea (tiếp)
• Các phương thức thường dùng: • String getText()
• void setText()
• void append(String text): thêm dòng text vào cuối TextArea.
4.5 Lớp Button
• Dùng để tạo các nút lệnh. • Phương thức khởi tạo:
• Button()
• Button(String text)
• Một số phương thức thường dùng: • String getLabel()
• void setLabel(String text)
4.6 Lớp Checkbox
• Dùng để tạo các hộp kiểm tra. • Phương thức khởi tạo:
• Checkbox()
• Checkbox(String text)
• Checkbox(String text, CheckboxGroup cg, boolean b)
• Lớp CheckboxGroup dùng để nhóm các đối
tượng Checkbox.
4.6 Lớp Checkbox (tiếp)
• Một số phương thức thường dùng:
• String getLabel()
• void setLabel(String text)
• boolean getState()
• void setState(boolean b) Ví dụ: tạo Checkbox
• Checkbox chk =new Checkbox(“Nam”);
• Tạo nhóm Checkbox:
• CheckboxGroup cbg=new CheckboxGroup();
• Checkbox chk1=new Checkbox(“Màu đỏ”,cbg,true);
• Checkbox chk2=new Checkbox(“Màu xanh”,cbg,false);
• Checkbox chk3=new Checkbox(“Màu vàng”,cbg,false);
4.7 Lớp Choice
• Dùng để tạo các mục chọn kéo xuống. • Phương thức khởi tạo:
• Choice()
• Một số phương thức thường dùng:
• void addItem(String)
• Thêm một mục chọn vào Choice. • int countItems()
• Trả về số mục chọn có trong Choice. • String getItem(int)
• Trả về nội dung của một mục chọn tại vị trí xác định.
• int getSelectedIndex()
• Trả về vị trí của mục được chọn.
4.7 Lớp Choice (tiếp)
• String getSelectedItem()
• Trả về nội dung của mục được chọn.
• void select(int)
• Chọn một mục theo vị trí. • void select(String)
• Chọn một mục theo nội dung.
4.7 Lớp Choice (tiếp)
• Ví dụ: tạo mục chọn môn học trong danh sách các môn.
Choice ch=new Choice(); ch.addItem(“Pascal”); ch.addItem(“Java”); ch.addItem(“Access”); ch.addItem(“Foxpro”); ch.addItem(“Visual Basic”);
4.8 Lớp List
• Lớp List: dùng để tạo danh sách các mục chọn. • Phương thức khởi tạo:
• List()
• List(int n)
• List(int n, boolean multiSelect)
• Các phương thức:
• void addItem(String)
• int clear()
• int countItems()
• void delItem(int)
• void delItems(int first, int last)
• String getItem(int)
• int getSelectedIndex()
• int[] getSelectedIndexes()
•String getSelectedItem()
• String[] getSelectedItems()
4.8 Lớp List (tiếp)
• Ví dụ: tạo List chọn môn học. List lst=new List();
lst.addItem(“Pascal”); lst.addItem(“Java”); lst.addItem(“Access”); lst.addItem(“Foxpro”); lst.addItem(“Visual Basic”);
5. Trình bày các thành phần
• Để quy định cách trình bày cho một lớp chứa dùng phương thức:
setLayout(đối tượng trình bày)
• Các lớp trình bày:
• Lớp FlowLayout: trình bày theo thứ tự từ trái sang phải, từ trên xuống.
• Lớp BorderLayout: trình bày các thành phần
trong 5 vị trí của cửa sổ.
5. Trình bày … (tiếp)
5. Trình bày … (tiếp)
• Khi trình bày bằng BorderLayout, để thêm một thành phần vào lớp chứa dùng phương thức:
• add(Component c, String viTri)
• Vị trí được xác định bởi các hằng:
• BorderLayout.NORTH
• BorderLayout.SOUTH
• BorderLayout.WEST
• BorderLayout.EAST
• BorderLayout.CENTER
import java.awt.*; class vdBorderLayout {
public static void main(String args[]) {
Frame f = new Frame(“BorderLayout”); f.setSize(150,200);
f.setLayout(new BorderLayout()); Button bt1 =new Button(“North”); Button bt2 =new Button(“South”); Button bt3 =new Button(“West”); Button bt4 =new Button(“East”); Button bt5 =new Button(“Center”);
f.add(bt1,BorderLayout.NORTH); f.add(bt2,BorderLayout.SOUTH); f.add(bt3,BorderLayout.WEST); f.add(bt4,BorderLayout.EAST); f.add(bt5,BorderLayout.CENTER); f.setVisible(true);
}
}
5. Trình bày… (tiếp)
• Lớp GridLayout: sắp xếp các thành phần vào một ô lưới gồm nhiều dòng, cột.
• Phương thức khởi tạo:
• GridLayout(int rows, int columns)
• Khi thêm các thành phần vào lớp chứa trình bày bằng GridLayout sẽ thêm lần lượt vào từng ô từ trái qua, từ trên xuống.
• Ví dụ:
import java.awt.*;
class vdGridLayout {
public static void main(String args[]) { Frame f = new Frame(“Chon mot so”);
f.setSize(150,200);
f.setLayout(new GridLayout(3,3)); Button bt[][]=new Button[3][3];
int n=1;
for(int i=0;i<3;i++)
for(int j=0;j<3;j++) {
bt[i][j]=new Button(“”+n);
f.add(bt[i][j]);
n++;
}
f.setVisible(true);
}
}
5. Trình bày … (tiếp)
• Trình bày tự do (Null layout):Cho phép trình bày các đối tượng tùy ý theo tọa độ.
• Gọi phương thức: setLayout(null)
• Xác định vị trí và kích thước của thành phần: setBounds(int left, int top, int width, int height)
Ví dụ:
import java.awt.*; class vdNullLayout{
public static void main(String args[]){ Frame f = new Frame(“Null Layout”); f.setSize(300,100);
f.setLayout(null);
Label l=new Label(“Ho ten “); l.setBounds(20,50,70,20); TextField tf = new TextField(); tf.setBounds(100,50,150,20); f.add(l);f.add(tf);
f.setVisible(true);}
}
Luyện tập
• Xây dựng giao diện giải phương trình bậc hai ax2+bx+c=0.
• Xây dựng giao diện máy tính điện tử.
• Xây dựng giao diện tính tiền điện theo loại.
• Xây dựng giao diện chọn môn học của một học kỳ.
6. Xử lý sự kiện
• Java xử lý sự kiện xảy ra trên các thành phần đồ họa dựa trên mô hình “phát sinh sự kiện – lắng nghe sự kiện”.
• Trong mô hình này có 3 loại đối tượng sau:
• Đối tượng phát sinh sự kiện: đây là đối tượng nhận sự kiện từ thao tác của người dùng.
• Đối tượng lắng nghe: là đối tượng có nhiệm vụ xử lý sự kiện.
• Đối tượng sự kiện: là đối tượng chứa những thông tin về đối tượng phát sinh sự kiện. Đối tượng này được truyền từ đối tượng phát sinh sự kiện đến đối tượng lắng nghe sự kiện để xử lý.
6. Xử lý sự kiện (tiếp)
• Java chia các sự kiện xảy ra trên các đối tượng đồ họa thành các nhóm sự kiện sau:
• Action
• Focus
• Mouse • Key
• Window, …
• Các lớp, giao diện liên quan đến xử lý sự kiện được đặt
trong gói java.awt.event.
6. Xử lý sự kiện (tiếp)
• Để xử lý sự kiện cần thực hiện:
Đăng ký thành phần lắng nghe sự kiện: addListener(<đt xử lý SK>)
Khai báo lớp xử lý sự kiện: Cài đặt giao diện xử lý sự kiện.
3.Tường minh các phương thức xử lý sự kiện.
6.1 Xử lý sự kiện Action
• Sự kiện Action xảy ra khi kích hoạt một Button, List, Menu, TextField.
• Lớp ActionEvent: đối tượng nhận sự kiện.
• Phương thức:
• Object getSource(): trả về đối tượng nhận sự kiện.
• Giao diện ActionListener: dùng để cài đặt đối tượng xử lý sự kiện. Giao diện này chứa phương thức:
• void actionPerformed(ActionEvent)
Phương thức này tự động thực hiện khi có sự kiện xảy ra trên những đối tượng đã đăng ký.
Ví dụ: chương trình minh họa nút lệnh “Thoát”.
import java.awt.*;
import java.awt.event.*; //Lớp xử lý sự kiện
class XLSK1 implements ActionListener {
public void actionPerformed(ActionEvent ae) {
System.exit(0);
}
}
class vdEvent1 {
public static void main(String args[]) {
Frame f = new Frame(“Xu ly su kien”); f.setSize(200,70);
Button bt = new Button(“Thoat”); XLSK1 x = new XLSK1(); bt.addActionListener(x); f.add(bt);
f.setVisible(true);
}
}
• Ví dụ 2: xử lý sự kiện trên nhiều đối tượng. import java.awt.*;
import java.awt.event.*;
class XLSK2 implements ActionListener { Frame f = new Frame(“Xu ly su kien”); Button b1 = new Button(“Dong”); Button b2 = new Button(“Thuc hien”);
Label lb = new Label(”
“);
public XLSK2() {
f.setLayout(new FlowLayout()); f.add(lb);
b1.addActionListener(this); f.add(b1);
b2.addActionListener(this); f.add(b2);
f.setSize(200,100);
f.setVisible(true); }
public void actionPerformed(ActionEvent ae) {
if(ae.getSource()==b1) System.exit(0);
if(ae.getSource()==b2)
lb.setText(“Click chuot nut Thuc hien”);
}
}
class vdEvent2 {
public static void main(String args[]) {
new XLSK2();
}
}
• Ví dụ 3.
Chương trình tính tiền điện. import java.awt.*;
import java.awt.event.*;
class TinhTienDien implements ActionListener {
Frame f = new Frame(“Tinh tien dien”); Label lb = new Label(“So luong “); TextField tf = new TextField(20);
Label tb = new Label(”
“);
Button b1 = new Button(“Tinh tien”); Button b2 = new Button(“Ket thuc”);
48
public TinhTienDien() {
f.setLayout(new FlowLayout()); f.add(lb);
f.add(tf); f.add(tb); f.add(b1); f.add(b2);
b1.addActionListener(this); b2.addActionListener(this); f.setSize(300,150);
f.setVisible(true);
}
public void actionPerformed(ActionEvent ae) {
if(ae.getSource()==b2) System.exit(0);
if(ae.getSource()==b1) {
int sl;long tt;
sl = Integer.parseInt(tf.getText()); if (sl<=100)
tt = sl*600; else
tt=100*600+(sl-100)*1000;
tb.setText(“So tien phai tra la:” + tt);
}
}
}
class vdEvent3 {
public static void main(String args[]) {
new TinhTienDien();
}
}
51
6.2 Xử lý sự kiện Window
• Các lớp và giao diện liên quan:
• Lớp WindowEvent: xử lý các sự kiện trên cửa sổ như phóng to, thu nhỏ, đóng cửa sổ,…
• Giao diện WindowListener: khai báo các phương thức tương ứng với các sự kiện xảy ra trên cửa sổ.
• Các phương thức:
• void windowOpened(WindowEvent): cửa sổ được mở.
• void windowClosing(WindowEvent): đóng cửa sổ.
6.2 Xử lý sự kiện Window (tiếp)
• void windowClosed(WindowEvent): cửa sổ đã được đóng.
• void windowActivated(WindowEvent): cửa sổ được kích hoạt.
• void windowDeactivated(WindowEvent): cửa sổ ngừng kích hoạt.
• void windowIconified(WindowEvent): cửa sổ đã được thu nhỏ thành biểu tượng.
• void windowDeiconified(WindowEvent): cửa sổ đã được phục hồi.
• Ví dụ: chương trình xử lý nút đóng cửa sổ. import java.awt.*;
import java.awt.event.*;
class vdEvent4 extends Frame implements WindowListener {
public vdEvent4() {
super(“WindowEvent”); this.addWindowListener(this); setSize(200,100);
setVisible(true);
}
public void windowClosing(WindowEvent e) {System.exit(0);}
public void windowOpened(WindowEvent e){} public void windowClosed(WindowEvent e){} public void windowActivated(WindowEvent e){} public void windowDeactivated(WindowEvent e){} public void windowIconified(WindowEvent e){} public void windowDeiconified(WindowEvent e){}
public static void main(String args[])
{
new vdEvent4();
}
}
Luyện tập
• Chương trình nhập 2 số, tính tổng 2 số và in lên màn hình.
• Chương trình chọn các môn học từ 1 Choice đưa vào List. Cho phép xóa môn học đã chọn.
Bài thực hành số 8
Bài 1. Xây dựng giao diện và viết chương trình giải phương trình bậc hai.
Bài 2. Xây dựng giao diện và viết chương trình tính tiền điện theo loại đối tượng sử dụng điện.
Bài 3. Xây dựng giao diện và viết chương trình chọn các môn học cho một học kỳ.
Bài 4. Xây dựng giao diện và viết chương trình cho máy tính điện tử.
Bài 5. Viết chương trình trò chơi Tic tac toe.
Bài 6. Viết chương trình từ điển Anh-Việt.
6.3 Xử lý sự kiện trên phím
• Lớp KeyEvent: xử lý các sự kiện bấm phím.
• Phương thức: int getKeyCode() trả về mã của phím được bấm.
• Giao diện KeyListener: định nghĩa các phương thức tương ứng với các sự kiện trên phím. Bao gồm các phương thức:
• public void keyPressed(KeyEvent e): bấm một phím
• public void keyReleased(KeyEvent e): thả phím.
• public void keyTyped(KeyEvent e): gõ phím.
Ví dụ: chương trình minh họa dùng các phím mũi tên để di chuyển một Label trên Frame.
import java.awt.event.*;
import java.awt.*;
class vdev1 implements KeyListener {
private static Label l = new Label(“Press me”); private static int x, y;
public static void main(String args[]) {
Frame f = new Frame(“Key press”); f.setLayout(null);
x = 100;y=100;
l.setBounds(x,y,70,30);
f.addKeyListener(new vdev1());
f.add(l);
f.setSize(300,300); f.setVisible(true);
}
public void keyPressed(KeyEvent e) {
switch (e.getKeyCode()) {
case KeyEvent.VK_DOWN:
y=y+5;break;
case KeyEvent.VK_UP: y=y-5;break; case KeyEvent.VK_LEFT: x=x-5;break;
case KeyEvent.VK_RIGHT:
x=x+5;break;
}
l.setBounds(x,y,70,30);
}
public void keyReleased(KeyEvent e){} public void keyTyped(KeyEvent e){} }
6.4 Xử lý sự kiện trên chuột
• Lớp MouseEvent: xử lý các sự kiện chuột.
• Một số phương thức thường dùng:
• int getX(): trả về tọa độ X của con trỏ chuột tại vị trí hiện hành.
• int getY():trả về tọa độ Y của con trỏ chuột tại vị trí hiện hành.
• int getButton(): cho biết phím chuột nào được bấm: MouseEvent.BUTTON1, MouseEvent.BUTTON2, MouseEvent.BUTTON3.
• int getClickCount(): cho biết số lần bấm phím chuột.
• Giao diện MouseListener: định nghĩa các phương thức xử lý các sự kiện tương ứng trên chuột.
• public void mouseClicked(MouseEvent e): đã nhấn phím chuột (bấm và thả).
• public void mousePressed(MouseEvent e): có phím chuột được bấm.
• public void mouseReleased(MouseEvent e): thả phím chuột.
• public void mouseEntered(MouseEvent e): con trỏ chuột đi vào phạm vi của thành phần.
• public void mouseExited(MouseEvent e): con trỏ chuột chuyển ra khỏi phạm vi thành phần.
• Ví dụ: chương trình minh họa thao tác Click chuột tại một vị trí trên cửa sổ thì dòng chữ được chuyển đến vị trí vừa Click. import java.awt.*;
import java.awt.event.*;
class vdev3 extends Frame implements MouseListener { Label l = new Label(“Press mouse!”);
public vdev3()
{
addMouseListener(this); setLayout(null);
add(l);
l.setBounds(100,100,100,10); setTitle(“Mouse Event”); setSize(300,300);
setVisible(true);
}
public void mouseClicked(MouseEvent e){}
public void mousePressed(MouseEvent e) {
if (e.getButton()==MouseEvent.BUTTON1) {
l.setBounds(e.getX(),e.getY(),100,10);
}
}
public void mouseReleased(MouseEvent e) {} public void mouseEntered(MouseEvent e){} public void mouseExited(MouseEvent e) {} public static void main(String args[]) {
new vdev3();
}
}
7. Menu
• Menu là thành phần thông dụng hiện nay trên các giao diện đồ hoạ.
• Java hỗ trợ tạo Menu trong gói AWT.
• Hệ thống menu có thể đặt trên 1 Frame
• Một số lớp liên quan đến tạo menu:
• MenuBar
• Menu
• MenuItem
Lớp MenuBar
• Dùng để tạo hệ thống menu thanh ngang.
• Phương thức khởi tạo:
• MenuBar()
• Đặt một menu bar vào Frame dùng phương thức:
• setMenuBar(MenuBar)
Lớp Menu
• Dùng để tạo các mục chọn ngang. • Phương thức khởi tạo:
• Menu(“Tiêu đề”)
• Thêm một mục chọn ngang vào menu bar: • .add(Menu)
• Để tạo các mục chọn kéo xuống dùng lớp MenuItem
Lớp MenuItem
• Dùng để tạo các mục chọn kéo xuống. • Phương thức khởi tạo:
• MenuItem(“Tiêu đề”)
• Thêm mục chọn kéo xuống vào menu mục chọn ngang:
• .add(MenuItem)
• Nếu muốn tạo đường ngăn cách thì tiêu đề là “-

Xử lý sự kiện trên menu
• Dùng sự kiện Action
• Thao tác như xử lý sự kiện trên các component của AWT.
• Ví dụ: tạo giao diện
6
import java.awt.*; import java.awt.event.*;
class vdMenu implements ActionListener{ public vdMenu()
{
Frame f = new Frame(“Menu demo”); f.setSize(300,200);
MenuBar mnuBar = new MenuBar(); f.setMenuBar(mnuBar);
Menu mnuFile = new Menu(“File”); mnuBar.add(mnuFile);
MenuItem mnuNew = new MenuItem(“New”);
mnuFile.add(mnuNew);
70
MenuItem mnuOpen = new MenuItem(“Open”); mnuFile.add(mnuOpen);
MenuItem mnuSeperator = new MenuItem(“-“); mnuFile.add(mnuSeperator);
MenuItem mnuExit = new MenuItem(“Exit”); mnuFile.add(mnuExit);
mnuExit.addActionListener(this); f.setVisible(true);}
public void actionPerformed(ActionEvent ae) {if (ae.getActionCommand().equals(“Exit”)) System.exit(0);}
public static void main(String args[]) { new vdMenu();}
}
71
Vẽ trên giao diện đồ họa
Giới thiệu
• Trên giao diện đồ họa ta có thể vẽ các hình đồ họa.
• Để vẽ hình trên giao diện đồ họa ta phải tường minh phương thức:
public void paint(Graphics)
• Graphics là đối tượng mà ta sẽ vẽ lên.
73
• Ví dụ: Chương trình vẽ lên cửa sổ một hình chữ nhật. import java.awt.*;
class Drawing1 extends Frame { public void paint(Graphics g) { g.drawRect(50,50,200,100); } public Drawing1() {
super(“Drawing”); setSize(300,200); setVisible(true);}
public static void main(String args[]) { new Drawing1(); }
}
74
Đối tượng Graphics
• Là một lớp trừu tượng dùng để hiển thị và vẽ trên các đối tượng đồ họa.
• Một số phương thức: • setColor(Color) • setFont(Font)
• setClip(int,int,int,int): giới hạn vùng vẽ. • draw…(): vẽ các hình.
75
Tọa độ trên Graphics
(0, 0)
(x, 0)
x
y
(0, y)
(x, y)
76
Phương thức paint(), repaint(), update()
• Phương thức paint(Graphics): là phương thức định nghĩa trong các lớp đối tượng đồ họa.
• Phương thức này tự động thực hiện khi hiển thị các đối tượng đồ họa.
• Để vẽ lên các đối tượng ta định nghĩa lại phương thức này.
• Phương thức update(Graphics): xóa hình vẽ trên Graphics và gọi phương thức pain.
• Phương thức repaint() gọi phương thức update().
77
• Ví dụ: chương trình vẽ đường tròn có bán kính nhập từ bàn phím.
import java.awt.*; import java.awt.event.*; class Circle extends Canvas { private int radius;
public Circle(int r){
setSize(200,200); radius=r; repaint(); }
public void setRadius(int r) { radius = r; repaint(); }
public void paint(Graphics g) { g.drawOval(0,0,radius,radius); } }
78
class RepaintDemo implements ActionListener { private Frame f = new Frame(“Repaint Demo”); private Label l1 = new Label(“Radius:”); private TextField tf = new TextField(5); private Button bt1 = new Button(“Draw”); private Button bt2 = new Button(“Exit”); private Circle c1 = new Circle(50); public RepaintDemo(){
f.setLayout(new FlowLayout());
f.add(l1); f.add(tf); f.add(bt1); f.add(bt2); f.add(c1); bt1.addActionListener(this);bt2.addActionListener(this); f.setSize(300,250); f.setVisible(true); }
public void actionPerformed(ActionEvent ae){ if(ae.getSource()==bt2) System.exit(0); else { c1.setRadius(Integer.parseInt(tf.getText()));}} public static void main(String args[]) { new RepaintDemo(); } }
79
Vẽ các hình hình học trên Panel
• Vẽ đường thẳng
• Vẽ hình chữ nhật • Vẽ hình bầu dục • Vẽ cung tròn • Vẽ đa giác
80
Vẽ đường thẳng
drawLine(x1, y1, x2, y2);
(x1 , y1)
(x2 , y2)
81
Vẽ hình chữ nhật
• drawRect(x, y, w, h); • fillRect(x, y, w, h);
(x, y)
h
w
82
Vẽ hình chữ nhật góc tròn
• drawRoundRect(x, y, w, h, aw, ah); • fillRoundRect(x, y, w, h, aw, ah);
(x, y)
ah/2
aw/2
h
w
83
Vẽ hình Oval
• drawOval(x, y, w, h); • fillOval(x, y, w, h);
(x, y)
h
w
84
Vẽ cung tròn
• drawArc(x, y, w, h, angle1, angle2); • fillArc(x, y, w, h, angle1, angle2);
85
Vẽ đa giác
int[] x = {40, 70, 60, 45, 20}; int[] y = {20, 40, 80, 45, 60}; g.drawPolygon(x, y, x.length); g.fillPolygon(x, y, x.length);
(x[0], y[0])
(x[1], y[1])
(x[3], y[3])
(x[4], y[4])
(x[2], y[2])
86
Ví dụ: Vẽ chiếc đồng hồ
• Vẽ một chiếc đồng hồ hiển thị giờ, phút, giây hiện tại trong một frame.
87
Luyện tập
• Vẽ một hình chữ nhật nội tiếp trong hình Oval.
88
Ví dụ (tiếp)
xEnd = xCenter + handLength  sin()
yEnd = yCenter – handLength  có60gi
Vì 1 phút
ây, góc của
kim giây là:
second  (2/60)
89
Ví dụ (tiếp)
xEnd = xCenter + handLength  sin()
yEnd = yCenter – handLength  Vị trí của kim phút được xác định bởi phút và giây theo công thức minute + second/60. Ví dụ, nếu thời gian là 3 phút 30 giây. Tổng số phút là 3.5. Vì 1 giờ có 60 phút, góc của kim phút là:
(minute + second/60)  (2/60)
90
Ví dụ (tiếp)
xEnd = xCenter + handLength  sin()
yEnd = yCenter – handLength  cos()
Vì hình tròn được chia thành 12 giờ, góc của kim giờ là:
(hour + minute/60 + second/(60  60)))  (2/12)
9
Vẽ chữ và Font
• Vẽ chữ trên Graphics: drawString(“Xâu”, x, y);
• Font chữ dùng phương thức setFont(…) • Màu chữ dùng phương thức setColor(…)
92
Lớp FontMetrics
• Dùng để lấy thông tin về Font chữ.
• Để nhận đối tượng FontMetrics cho một font xác định, sử dụng phương thức getFontMetrics() của đối tượng Graphics:
FontMetricsgetFontMetrics(Font f); FontMetrics getFontMetrics();
93
Các phương thức lấy thuộc tính chuỗi của lớp FontMetrics
• public int getAscent() • public int getDescent() • public int getLeading() • public int getHeight()
• public int stringWidth(String str)
94
Luyện tập
• Ví dụ: Hiển thị “Welcome to Java” căn giữa trong frame.
95
Frame
stringWidth
getHeight()
Ascent
Welcome to Java
getWidth()
96
import java.awt.*;
class DrawText extends Frame {
public DrawText(){ super(“TestFontMetrics”);} public void paint(Graphics g) {
Font f = new Font(“Arial”,Font.BOLD,20); g.setFont(f); FontMetrics fm = g.getFontMetrics();
int x,y ; String s = “Welcome to Java”; x = (this.getWidth()-fm.stringWidth(s))/2;
y = (this.getHeight() – fm.getHeight())/2 + fm.getAscent() + fm.getLeading();
g.drawString(s,x,y);}
public static void main(String args[]) { DrawText dt= new DrawText(); dt.setSize(300,200);
dt.setVisible(true);}
}
97
Vẽ ảnh
• Lớp Image: dùng để tạo các đối tượng ảnh. • Tạo đối tượng ảnh:
Image getToolkit().getImage(“tên file ảnh”) • Phương thức vẽ ảnh:
boolean drawImage(Image imgObj, int left, int top, ImageObserver imgOb)
• img:ảnh cần vẽ, left, top: vị trí bắt đầu, imgOb đối tượng chứa ảnh.
98
• Ví dụ: chương trình vẽ ảnh trên cửa sổ. import java.awt.*;
class DrawImage extends Frame { Image img;
public DrawImage() {
img = getToolkit().getImage(“Water lilies.jpg”); setSize(500,400); setVisible(true);}
public void paint(Graphics g){ g.drawImage(img,0,0,this); }
public static void main(String args[]){ new DrawImage();
}
}
99
8. Applet
• Applet là chương trình java thực hiện trên trình duyệt web có hỗ trợ java như IE, Netscape,.. • Để viết applet, sun hỗ trợ các lớp và giao diện trong gói: java.applet.
• Lớp Applet: mọi chương trình applet đều kế thừa từ lớp Applet.
100
8. Applet (tiếp)
• Các phương thức của lớp Applet:
• init(): thực hiện khi lần đầu tiên trình duyệt nạp applet.
• start(): thực hiện sau khi phương thức init() thực hiện.
• stop(): tạm dừng applet.
• destroy(): giải phóng tài nguyên và kết thúc applet. • paint(Graphics): vẽ lại màn hình đồ họa.
101
8. Applet (tiếp)
• Chương trình applet được viết tương tự các chương trình đồ họa bằng cách thay lớp Applet bằng cửa sổ.
• Ví dụ: chương trình applet hiển thị dòng chữ “Chào Applet”.
102
import java.awt.*; import java.applet.*;
public class vdApplet1 extends Applet {
public void init() {
Label l = new Label(“Chao Applet”); Font fo = new Font(“Arial”,Font.BOLD,20); l.setFont(fo);
l.setForeground(Color.red); add(l);
}
}
• Tạo file “vdApplet1.html” với nội dung

103
104
• Ví dụ. Applet tính tiền điện. import java.awt.*;
import java.awt.event.*; import java.applet.*;
public class vdApplet2 extends Applet implements ActionListener
{
Label lb = new Label(“So luong “); TextField tf = new TextField(20);
Label tb = new Label(“
“);
Button b1 = new Button(“Tinh tien”);
105
public void init() {
setLayout(new FlowLayout()); add(lb);
add(tf); add(tb); add(b1);
b1.addActionListener(this);
}
106
public void actionPerformed(ActionEvent ae) {
int sl;long tt;
sl = Integer.parseInt(tf.getText()); if (sl<=100)
tt = sl*600; else
tt=100*600+(sl-100)*1000; tb.setText(“So tien phai tra la:” + tt); }
}
107
108
• Ví dụ:vẽ hình đơn giản trên giao diện đồ họa của applet. import java.awt.*;
import java.applet.*;
public class vdApplet3 extends Applet {
String msg;
public void init() {
msg=”Chao Applet”;
}
public void paint(Graphics g) {
g.setFont(new Font(“Arial”,Font.BOLD,20)); g.setColor(Color.red);
g.drawString(msg,50,50); g.drawRect(10,10,200,60); }
}
/* */
109
110
Luyện tập
• Applet cho phép chọn font chữ, kích thước chữ trong các Choice. Sử dụng Font, kích thước vẽ một dòng chữ.
• Vẽ mặt đồng hồ với kim giờ và kim phút với giờ, phút nhập vào 2 TextField.
• Chương trình vẽ hình đơn giản.
111
Bài thực hành số 9
• Bài 1. Xây dựng giao diện cho phép thao tác với tệp chứa danh sách sinh viên.
• Bài 2. Viết chương trình vẽ hình đơn giản. • Bài 3. Viết Applet cho trò chơi xếp số.
• Bài 4. Viết chương trình cho trò chơi caro giữa 2 người trên máy tính.
• Bài 5. Xây dựng giao diện và viết chương trình soạn thảo văn bản đơn giản có chức năng đọc, lưu tệp.
112