CASE STUDY III

Một phần của tài liệu Lập trình hướng đối tượng Java PTIT (Trang 111)

Trong ph n này, ta s s d ng các l p đ i t ng đã đ c cài đ t trong ch ng này: ng n x p, hàng đ i, danh sách liên k t, cây nh phân và đ th .

Ch ng trình 5.8 cài đ t m t ch ng trình t ng h p, s d ng menu cho các đ i t ng: stack, queue, list. V i m i đ i t ng, có m t menu con t ng ng v i các thao tác trên đ i t ng đó. V i các đ i t ng còn l i, đ c coi nh bài t p m r ng c a ph n này.

Ch ng trình 5.8

package vidu.chuong5; public class CaseStudy3{

public static void main(String[] args) { try {

BufferedReader br =

while (true) {

System.out.println("**********************************"); System.out.println(" CASE STUDY 3 ");

System.out.println(" ---o0o--- "); System.out.println(" 1. Thao tac voi ngan xep "); System.out.println(" 2. Thao tac voi hang doi "); System.out.println(" 3. Thao tac voi danh sach "); System.out.println(" 10.Thoat! "); System.out.println("**********************************"); System.out.print(" |==> Chon chuc nang: ");

int function = Integer.parseInt(br.readLine()); CaseStudy3 ob3 = new CaseStudy3();

switch(function){ case 1: // Thao tác v i ng n x p ob3.stack(br); break; case 2: // Thao tác v i hàng đ i ob3.queue(br); break;

case 3: // Thao tác v i danh sách ob3.list(br); break; case 10: // Thoát kh i ch ng trình System.exit(1); } } } catch(Exception ex) {

System.out.println("Loi o ham 'main': "); ex.printStackTrace();

} }

/* Thao tác v i ng n x p */

public void stack(BufferedReader br){ MyStack stack = new MyStack(); try {

while (true) {

System.out.println("**********************************"); System.out.println(" THAO TAC VOI NGAN XEP ");

System.out.println(" ---o0o--- "); System.out.println(" 1. Them mot phan tu vao stack "); System.out.println(" 2. Lay mot phan tu ra khoi stack "); System.out.println(" 3. Lay het cac phan tu cua stack "); System.out.println(" 10.Thoat! "); System.out.println("**********************************"); System.out.print(" |==> Chon chuc nang: ");

int function = Integer.parseInt(br.readLine()); switch(function){

case 1: // Thêm m t ph n t vào ng n x p System.out.print(“Gia tri phan tu them vao:”); int phantu = Integer.parseInt(br.readLine());

stack.push(new Node(phantu)); break;

case 2: // L y m t ph n t ra kh i ng n x p Node node = stack.pop();

if(node != null)

System.out.println(“Phan tu lay ra: ” + node.getValue());

else

System.out.println(“Stack da rong!”); break;

case 3: // L y t t c các ph n t c a ng n x p System.out.println(“Cac phan tu cua ngan xep:”);

while(true){

Node node = stack.pop(); if(node == null)

break;

System.out.print(“ ” + node.getValue()); }

break;

case 10: // Thoát kh i ch ng trình con return; } } } catch(Exception ex) { ex.printStackTrace(); } }

/* Thao tác v i hàng đ i */

public void queue(BufferedReader br){ MyQueue queue = new MyQueue(); try {

while (true) {

System.out.println("**********************************"); System.out.println(" THAO TAC VOI HANG DOI "); System.out.println(" ---o0o--- "); System.out.println(" 1. Them mot phan tu vao queue "); System.out.println(" 2. Lay mot phan tu ra khoi queue "); System.out.println(" 3. Lay het cac phan tu cua queue "); System.out.println(" 10.Thoat! "); System.out.println("**********************************"); System.out.print(" |==> Chon chuc nang: ");

int function = Integer.parseInt(br.readLine()); switch(function){

case 1: // Thêm m t ph n t vào hàng đ i System.out.print(“Gia tri phan tu them vao:”); int phantu = Integer.parseInt(br.readLine());

queue.insert(new Node(phantu)); break;

case 2: // L y m t ph n t ra kh i hàng đ i Node node = queue.remove();

if(node != null)

System.out.println(“Phan tu lay ra: ” + node.getValue());

else

System.out.println(“Khong co phan tu nao!”); break;

case 3: // L y t t c các ph n t c a hàng đ i System.out.println(“Cac phan tu cua hang doi:”);

while(true){

Node node = queue.remove(); if(node == null)

break;

System.out.print(“ ” + node.getValue()); }

break;

case 10: // Thoát kh i ch ng trình con return;

} }

} catch(Exception ex) { ex.printStackTrace(); } }

/* Thao tác v i danh sách liên k t đ n */ public void list(BufferedReader br){

SimpleList list = new SimpleList(); try {

while (true) {

System.out.println("**********************************"); System.out.println(" THAO TAC VOI DANH SACH DON "); System.out.println(" ---o0o--- "); System.out.println(" 1. Them mot phan tu vao list "); System.out.println(" 2. Lay mot phan tu ra khoi list "); System.out.println(" 3. Duyet cac phan tu cua list "); System.out.println(" 10.Thoat! "); System.out.println("**********************************"); System.out.print(" |==> Chon chuc nang: ");

int function = Integer.parseInt(br.readLine()); switch(function){

case 1: // Thêm m t ph n t vào danh sách

System.out.print(“Gia tri phan tu them vao:”); int phantu = Integer.parseInt(br.readLine());

System.out.print(“Vi tri chen phan tu:”); int vitri = Integer.parseInt(br.readLine());

list.insert(new Node(phantu), vitri); break;

case 2: // L y m t ph n t ra kh i danh sách System.out.print(“Vi tri phan tu lay ra:”); int vitri = Integer.parseInt(br.readLine());

SimpleNode node = list.remove(vitri); if(node != null)

System.out.println(“Phan tu lay ra: ” + node.getValue());

else

System.out.println(“Khong co phan tu nao!”); break;

case 3: // L y t t c các ph n t c a danh sách System.out.println(“Cac phan tu cua danh sach:”);

Node[] nodes = list.travese(); for(int i=0; i<nodes.length; i++)

System.out.print(“ ” + nodes[i].getValue()); break;

case 10: // Thoát kh i ch ng trình con return; } } } catch(Exception ex) { ex.printStackTrace(); } } } T NG K T CH NG 5

N i dung ch ng 5 đã trình bày vi c bi u di n và cài đ t m t s c u trúc d li u tr u t ng trên Java, bao g m các gi i thu t:

• Ph ng pháp duy t • Ph ng pháp đ qui • Ph ng pháp s p x p • Ph ng pháp tìm ki m. Và các c u trúc d li u tr u t ng: • Ng n x p (stack) • Hàng đ i (queue)

• Danh sách liên k t (list): danh sách liên k t đ n và danh sách liên k t kép. • Cây nh phân (binary tree)

• th (graph): đ th không tr ng s và đ th có tr ng s .

H n n a, ch ng này c ng đã trình bày và minh ho cách s d ng các đ i t ng tr u t ng trong các ng d ng.

CÂU H I VÀ BÀI T P CH NG 5

1. Cài đ t b sung các ph ng th c s p x p khác vào l p Array trong m c 5.2.1: a. S p x p n i b t

b. S p x p ch n. c. S p x p vun đ ng d. S p x p tr n

2. Chuy n l p MyStack trong m c 5.3.1 thành m t ng n x p c a các kí t . Sau đó, dùng l p ng n x p m i đó đ đ o ng c m t xâu kí t do ng i dùng nh p vào t bàn phím.

3. Dùng l p MyQueue đ mô ph ng ch ng trình qu n lí ti n trình đ n gi n c a h đi u hành:

• M i ti n trình đ c mã hoá b ng m t kí hi u có ki u int. • Khi m t ti n trình xu t hi n, nó s đ c đ a vào m t hàng đ i. • Khi CPU r i, m t ti n trình trong hàng đ i s đ c l y ra th c hi n. Yêu c u vi t menu th c hi n ch ng trình:

• Thêm m t ti n trình • L y m t ti n trình ra

• Xem t t c các ti n trình đang có m t trong hàng đ i.

4. Thay đ i c u trúc l p Node c a danh sách liên k t, sao cho value có ki u là l p Employee

đã đ c đnh ngh a trong ch ng 4.

5. Dùng danh sách liên k t đ n v i c u trúc m i trong bài 4 đ qu n lí nhân viên c a m t công ty: Thêm vào m t nhân viên, xoá đi m t nhân viên, tìm ki m m t nhân viên theo m t tiêu chí c th (ti n l ng, tu i…), duy t t t c các nhân viên.

6. Dùng danh sách liên k t kép đ th c hi n bài s 5.

7. Vi t ch ng trình (d ng menu) đ áp d ng th c hi n các thao tác trên cây nh phân, s d ng l p BinaryTree trong m c 5.5.

8. Vi t ch ng trình (d ng menu) đ áp d ng th c hi n các thao tác trên đ th không tr ng s , s d ng l p Graph trong m c 5.6.1.

9. Vi t ch ng trình (d ng menu) đ áp d ng th c hi n các thao tác trên đ th có tr ng s , s d ng l p WeightedGraph trong m c 5.6.2.

CH NG 6

L P TRÌNH GIAO DI N TRÊN JAVA

N i dung ch ng này t p trung trình bày các v n đ liên quan đ n l p trình giao di n, v i s h tr c a m t s đ i t ng đ c cung c p s n b i Java:

• L p trình giao di n v i các đ i t ng c b n và v i các đ i t ng multimedia. • L p trình giao di n v i HTML&Applet

• L p trình giao di n v i SWING

6.1 GIAO DI N V I CÁC I T NG C B N

Trong m c này, chúng ta s tìm hi u và s d ng các đ i t ng c b n c a l p trình giao di n trong Java:

• Các đ i t ng khung ch a (container) c b n: Frame, Panel, Dialog.

• Các đ i t ng thành ph n (component) c b n: Button, Label, TextField, TextArea • Các s ki n c b n c a các đ i t ng.

Mu n s d ng các đ i t ng này, c n thêm l nh s d ng th vi n awt c a Java: import java.awt.*;

6.1.1 Các đ i t ng container c b n

Các đ i t ng container đ c dùng đ ch a các đ i t ng thành ph n khác. Các l p đ i t ng này có m t s ph ng th c chung nh sau:

• add(Object): Thêm m t đ i t ng (ki u component) vào container. • remove(Object): Lo i b m t đ i t ng ra kh i container.

• removeAll(): Lo i b t t c các đ i t ng mà container đang ch a.

• getComponent(int): Tr v đ i t ng thành ph n có ch s là tham s đ u vào. Container qu n lí các đ i t ng ch a trong nó d i d ng m ng. Ch s c a các thành ph n là s th t khi thành ph n đó đ c thêm vào container.

• getComponents(): Tr v m ng t t c các đ i t ng mà container đang ch a. • countComponents(): Tr v s l ng các đ i t ng mà container đang ch a.

Frame

Frame là m t đ i t ng có th dùng m t cách đ c l p, ho c đ c g n vào m t đ i t ng khác nh m t đ i t ng conponent bình th ng. Thông th ng, Frame đ c dùng nh m t c a s c a m t ch ng trình đ c l p. Các ph ng th c c b n c a l p Frame:

• Frame(): Kh i t o không tham s .

• Frame(String): Kh i t o v i tham s là dòng tiêu đ c a frame.

• setSize(int, int): nh kích c c a frame, tham s t ng ng là chi u r ng và chi u cao c a frame.

• setVisible(boolean): Cho phép frame xu t hi n hay n đi trên màn hình. • setTitle(String)/getTitle(): Truy nh p thu c tính dòng tiêu đ c a frame. • setResizable(boolean): Thi t l p thu c tính cho phép thay đ i kích c frame. • setIconImage(Image): Thi t l p nh icon góc trên (bi u t ng) c a frame. Ch ng trình 6.1 minh ho vi c s d ng m t đ i t ng c a l p Frame.

Ch ng trình 6.1

package vidu.chuong6; import java.awt.*; public class FrameDemo{

public static void main(String[] args) { // Khai báo và kh i t o frame có tiêu đ

Frame myFrame = new Frame(“This is my Frame!”); myFrame.setSize(300,150); // nh kích c frame myFrame.setVisible(true); // Hi n th frame } } Hình 6.1: K t qu demo Frame Panel

Panel c ng là m t dang khung ch a, nh ng khá đ n gi n. Panel ch dùng đ nhóm các đ i t ng giao di n v i nhau. Thông th ng, panel đ c dùng trong m t c a s c a Frame ho c m t ng d ng khác. Các ph ng th c c b n c a l p Panel, ngoài các ph ng th c chung c a container:

• Panel(): Kh i t o không tham s .

Ch ng trình 6.2 minh ho vi c s d ng m t Panel trong m t Frame.

Ch ng trình 6.2

package vidu.chuong6; import java.awt.*; public class PanelDemo{

public static void main(String[] args) { // Khai báo và kh i t o frame có tiêu đ

Frame myFrame = new Frame(“Frame has a panel!”); myFrame.setSize(300,150); // nh kích c frame

Panel myPanel = new Panel();// Khai báo panel myFrame.add(myPanel); // Thêm panel vào frame myFrame.setVisible(true); // Hi n th frame

} }

Hình 6.2: K t qu demo Panel

Dialog

Dialog là m t đ i t ng c a s con c a m t c a s ch ng trình chính. Do v y, Dialog ch đ c s d ng kèm v i m t Frame. Có hai d ng Dialog:

• Modal: Khi hi n c a s dialog, các c a s khác c a ch ng trình s b khoá l i, không thao tác đ c, ch thao tác đ c trên c a s dialog.

• Non-modal: Không khoá các c a s khác. Khi dialog xu t hi n, ng i dùng v n có th chuy n sang thao tác trên các c a s khác, n u c n.

Các ph ng th c c b n c a l p Dialog:

• Dialog(Frame, boolean): Kh i t o dialog, tham s th nh t là frame ch a dialog, tham s th hai xác đnh dialog có là modal hay không.

• Dialog(Frame, String, boolean): Kh i t o dialog, thêm tham s th hai là dòng tiêu đ c a dialog.

• setVisible(boolean): Thi t l p tr ng thái hi n th ho c n dialog trên màn hình. • setSize(int, int): nh kích c cho dialog, các tham s t ng ng là chi u r ng

và chi u cao c a dialog.

• setTitle(String)/getTitle(): Truy nh p thu c tính dòng tiêu đ c a dialog.

• setResizable(boolean): Thi t l p thu c tính cho phép thay đ i kích c c a dialog. • setLayout(Layout): Thi t l p ch đ hi n th các đ i t ng ch a trong dialog. Ch ng trình 6.3 minh ho vi c thêm m t dialog (đang r ng, ch a có đ i t ng thành ph n nào) vào m t frame.

Ch ng trình 6.3

package vidu.chuong6; import java.awt.*;

public class DialogDemo{

public static void main(String[] args) { // Khai báo và kh i t o frame có tiêu đ

Frame myFrame = new Frame(“Frame has a dialog!”); myFrame.setSize(300,150); // nh kích c frame

// Khai báo và kh i t o dialog

Dialog myDialog = new Dialog(myFrame, “An empty dialog!”, true); myDialog.setSize(300,150); // nh kích c dialog

myDialog.setVisible(true); // Hi n th dialog } } Hình 6.3: K t qu demo Dialog 6.1.2 Các đ i t ng component c b n Các đ i t ng component đ c dùng đ làm thành ph n c a các đ i t ng khung ch a, chúng không th dùng đ c l p, mà luôn ph i g n vào trong m t đ i t ng khung ch a container.

Label

Label (nhãn) là m t đ i t ng đ hi n th v n b n t nh, nh ng v n b n mà ng i dùng không th thay đ i tr c ti p đ c. Các ph ng th c c b n c a Label:

• Label(): Kh i t o m t nhãn r ng.

• Label(String): Kh i t o m t nhãn v i n i dung v n b n là tham s đ u vào. • Label(String, int): Kh i t o m t nhãn có n i dung s n, tham s th hai xác đnh cách

c n l c a nhãn so v i khung ch a, bao g m {Label.CENTER, Label.LEFT, Label.RIGHT}.

• setText(String)/getText(): Truy nh p n i dung v n b n c a nhãn.

• setAlignment(int)/getAlignment(): Truy nh p thu c tính c n l c a nhãn. • setFont(Font): nh d ng phông ch c a nhãn.

Ch ng trình 6.4 minh ho vi c s d ng nhãn trong m t frame.

Ch ng trình 6.4

package vidu.chuong6; import java.awt.*; public class LabelDemo{

public static void main(String[] args) { // Khai báo và kh i t o frame có tiêu đ

Frame myFrame = new Frame(“Frame has a label!”);

myFrame.setSize(300,150); // nh kích c frame

// Khai báo và kh i t o label Label myLabel = new Label();

myLabel.setText(“This is a label!”);//Gán n i dung v n b n myLabel.setAlignment(Label.CENTER);// C n l gi a

myFrame.setVisible(true); // Hi n th frame }

}

Hình 6.4: K t qu demo Label

TextField và TextArea

ây là hai đ i t ng dùng đ bi u di n v n b n và ng i dùng có th thay đ i n i dung v n b n ch a trong chúng. i m khác bi t là TextField ch cho phép m t dòng v n b n, trong khi TextArea cho phép ch a nhi u dòng v n b n. Các ph ng th c chung c a hai l p này:

• setText(String)/getText(): Truy nh p thu c tính n i dung v n b n ch a trong ô. • getSelectedText(): Tr v chu i v n b n đ c bôi đen (đánh d u ch n) trong ô. • getSelectedStart(): Tr v v trí kí t đ u trong vùng đ c đánh d u ch n (tính t 0). • getSelectedEnd(): Tr v v trí kí t cu i trong vùng đ c đánh d u ch n (tính t 0). • selectAll(): ánh d u ch n toàn v n b n.

• setEditable(boolean): Xác đnh vùng v n b n có th edit đ c hay không. Các ph ng th c khác c a l p TextField:

• TextField(): Kh i t o m t ô v n b n r ng.

• TextField(int): Kh i t o m t ô v n b n r ng, đ r ng xác đnh b i tham s vào. • TextField(String): Kh i t o m t ô v n b n có n i dung xác đnh b i tham s đ u vào. • TextField(String, int): Kh i t o v i n i dung có s n, đ r ng xác đnh.

• setEchoChar(char)/getEchoChar(): Truy nh p thu c tính là kí t thay th v n b n trong ô. Thu c tính này đ c dùng khi ta c n che d u thông tin v n b n, ví d , ô gõ m t kh u c a ch ng trình. • getColums(): Tr v đ r ng c a ô v n b n. Các ph ng th c khác c a l p TextArea: • TextArea(): Kh i t o m t vùng v n b n r ng. • TextArea(int, int): Kh i t o m t vùng v n b n r ng, kích c (s dòng, s c t) xác đnh b i tham s vào.

• TextArea(String): Kh i t o m t vùng v n b n có n i dung xác đnh b i tham s đ u vào.

• TextArea(String, int, int): Kh i t o vùng v n b n v i n i dung có s n, đ r ng xác đnh. • appendText(String): Thêm m t đo n v n b n vào cu i đo n v n b n trong vùng.

• insertText(String, int): Chèn m t đo n v n b n vào v trí xác đnh (tham s th hai) c a vùng v n b n.

• replaceText(String, int, int): Thay th m t đo n v n b n trong vùng, đánh d u b ng v trí b t đ u và v trí k t thúc (tham s th hai và th ba), b ng m t

đo n v n b n m i (tham s th nh t). • getRows()/getColums(): Tr v s dòng/c t c a vùng v n b n.

Ch ng trình 6.5 minh ho vi c đ t các đ i t ng ô v n b n và vùng v n b n vào m t frame.

Ch ng trình 6.5

package vidu.chuong6; import java.awt.*; public class TextDemo{

public static void main(String[] args) { // Khai báo và kh i t o frame có tiêu đ

Frame myFrame = new Frame(“Frame has some texts!”);

myFrame.setSize(300,150); // nh kích c frame

// Khai báo và kh i t o textField

TextField myTextField = new TextField(“A text field!”); myFrame.add(myTextField); // G n vào frame

Một phần của tài liệu Lập trình hướng đối tượng Java PTIT (Trang 111)

Tải bản đầy đủ (PDF)

(173 trang)