Tải bản đầy đủ (.docx) (28 trang)

tự học java cơ bản

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (161.79 KB, 28 trang )

Phần I : Một số khái niệm.
I - Một số khái niệm:
Lập trình hướng đối tượng (OOP)
Trừu tượng hóa dữ liệu (Data Abstraction)
Lớp và Đối tượng (Class & Object)
Khởi dựng và Huỷ diệt (Construction & Destruction)
Che dấu dữ liệu (Data Encapsulation)
Thừa kế, Đa thừa kế (Inheritance & Multiple Inheritence)
Đa hình thái (Polymorphism)
II - Cách dịch trong Java:
III - Các thể loại ứng dụng Java:
Applets: nhúng vào trang web để chạy
Command Line: Ứng dụng này giao tiếp thông qua chế độ dòng lệnh (màn hình DOS).
GUI (Graphics User Interface): Như command line nhưng người dùng giao tiếp với ứng dụng thông qua
form nhập liệu (thân thiện với người dùng)
Servlets/JSP: Thuộc thể loại ứng dụng web, phối hợp với web server để thực hiện.
Database: Cho phép quản lý CSDL quan hệ (SQL Server, Oracle, )
RMI: Xây dựng các ứng dụng phân tán.
EJB: Thể loại ứng dụng được thực hiện theo mô hình đa tầng trên nền của J2EE.
IV - Khai thác Java:
java.lang : Các lớp cơ bản của ngôn ngữ
java.util : Các lớp tiện ích trong java java
java.awt : Các lớp hỗ trợ xây dựng GUI
java.awt.event : Các lớp giúp xử lý sự kiện
java.applet : Các lớp hỗ trợ xây dựng applet
java.io : Các lớp hỗ trợ xử lý vào ra
java.net : Các lớp giúp lập trình TCP/IP
java.rmi : Các lớp giúp lập trình phân tán
java.sql : Các lớp giúp lập trình quản lý CSDL
java.security : Các lớp hỗ trợ lập trình an toàn hệ thống
V - Công cụ phát triển Java - JDK:


javac : dịch byte code (*.class)
javah : dịch header (*.h) để sử dụng trong C
javadoc : tạo tài liệu API (*.html)
java : chạy ứng dụng java
appletviewer : chạy applet trên trang web
VI - Ví dụ và cách dịch một file java.
- Ví dụ:
package lessons.java.test;
import java.lang.*;
public class HelloWorld{
/**
This is my first java program. The main method is entry point of an application.
*/
public static void main(String[] args){
System.out.println(“Hello World !”);
}
}
- Các cách dịch: (từ cửa sổ Command Prompt)
Javac –d c:\java HelloWorld.java
Javah HelloWorld.java
Javadoc HelloWorld.java
Java lessons.java.test.HelloWorld
===============
Phần II : Khái niệm về Package – Import – Class – Modifier và Interface.
I - Cấu trúc mã nguồn của Java:
package : Định nghĩa gói
imports : Chỉ định các gói sử dụng
classes : Định nghĩa các lớp
interfaces : Định nghĩa các Interface
Comments : Các loại ghi chú

- Chỉ có một class hay một Interface được định nghĩa là public. Khi đó, tên của class hay interface đó
phải trùng với tên của file java. (Nói dễ hiểu là tên của file java phải cùng tên với class chứa hàm
main() ).
- Mỗi class hay interface khi dịch ra sẽ sinh ra file *.class thuộc vào thư mục của gói.
VD:

package lessons.java;
import java.util.*;
import java.io.*;
class C1
{
// variables, methods, inner class
}
public class C2
{
// variables, methods, inner class
}
interface I
{
// Khai báo variables, methods
}

Khi biên dịch, sẽ sinh ra file C1.class, C2.class, I.class và cách file này sẽ được chứa trong Folder
lessons\java (Nghĩa là nếu file java lưu ớ ổ D: thì khi biên dịch chương trình sẽ tạo ra Folder
C:\lesson\java và lưu các file *.class vào. Vì ở trên bạn đã định nghĩa "package lessons.java;")
II - package và import:
- Mỗi package chứa các class và interface.
- Dùng package để tránh trùng tên class hay interface trong các gói.
- Khi ta muốn sủ dụng một class nào đó trong 1 package thì ta phải import vào.
- Các class trong java.lang được import tự động.

VD:

package lessons.java.test;
import java.lang.*; // không cần thiết
import java.io.File; // chỉ class File trong gói java.io
import lessons.java.*; // tất cả các class trong lessons.java

III - Class - Khai báo lớp:
Cú pháp:

<modifiers> class <ClassName> [extends <SuperClass>] [implements <Interface1>[,<Interface2>]…]
{
// Khai báo biến thành viên
// Khai báo phương thức khởi dựng
// Khai báo phương thức thành viên
// Khai báo Inner classes
}

Ghi chú: Khai báo lớp với tên <ClassName>, thừa kế từ lớp cha <SuperClass> và thực hiện theo các
interface <Interface1>, <Interface2>,…
Mặc định của SuperClass là Object
VI - Khai báo các lớp thành viên:
1. Cú pháp:

<modifiers> <datatype> <var1>[=val1][, <var2>[=val2]];

2. VD:

String x, y = “ABC”;
private static final int c = 55; // c là hằng số


x, y, c : các biến
private, static, final, {} : modifier
“ABC”, 55 : giá trị khởi tạo
V - Constructor - Khai báo Constructor:
1. Là phương thức được gọi để xây dựng nên đối tượng của class.
2. Khai báo:

<modifiers> <ClassName>([arguments]) [throws Exception1[, Exception2]]{…}

3. Đặc điểm:
- Trong một class có thể có nhiều constructor khác nhau nhưng phải khác nhau về kiểu danh sách các
tham số
- Nếu class không khai báo constructor nào thì constructor mặc định là constructor không tham số.
Ngược bắt buộc phải dùng constructor đã khai báo.
- Để gọi một constructor từ một constructor khác ta sử dụng this(tham số phù hợp)
4. Thừa kế:
- Constructor không được thừa kế. Hãy sử dụng super(tham số phù hợp) để gọi constructor của lớp cha.
- Trong một constructor nếu gọi super(…) hay this(…) thì lời gọi này phải xuất hiện đầu tiên trong
constructor đó.
- Khi gọi phương thức khởi dựng của lớp con, nếu constructor đó không gọi this(…) hay super(…) thì
constructor không tham số của lớp cha tự động được kích hoạt.
5. Ví dụ
public class C1{
int index = 0;
public C1(int index) {this.index = index;}
public void print() {
System.out.println(this.index);}
}
Khởi dựng : C1 c = new C1(15); c.print();

VI - method - Khai báo method:
1. Cú pháp:
<modifiers> <datatype> <method>([arguments]) [throws Exception1[, Exception2]]{…}
2. Ví dụ:

public static long add(int x, int y)
public void readFile(String file) throws FileNotFoundException

<modifiers> : public, static
<datatype> : long, void
<method> : add, readFile
[arguments] : int x, int y, String file
[Exceptions] : FileNotFoundException
VII - Inner class:
1. Inner class bao gồm:
Member class : Các inner class ngang cấp với phương thức, biến thành viên
Anonymous class : Các class nặc danh (không tên)
Local class : các class được định nghĩa trong khồi.
2. Member class được chia thành 2 loại:
- Static inner class
- Non-static inner class
3. Ví dụ:
Class C
{
class IC1{}
static class IC2{}
public void method()
{
IC1 ic1 = new IC1();
}

}
VIII - VD về cấu trúc của 1 class:
class Test
{
public static void main(String[] args)
{
// Khởi dựng để tạo object c
C c = new C(“LT-Aptech”);
// Gọi phương thức add()
System.out.println(c.add(5, 2));
// Tạo object của inner class IC
C.IC ic = c.new IC();
// Gọi phương thức của inner class
ic.display(“Hello”);
}
}
IX - Danh sách các Modifier:
1. Dach sách.
2. Cách Modifier truy xuất :
- Modifier truy xuất là các modifier dùng để định nghĩa tính chất truy xuất của class, variable, method.
- Chúng gồm: public , protected , {default} , private.
- Khả năng che dấu tăng dần theo : public -> protected -> {default} ->private
3. Modifier - final:
- final có thể dùng để định nghĩa:
Class : không cho thừa kế class này
Variable : hằng số
Method : không cho phép override ở subclass
- Ví dụ:
final class C{
final int x = 5;

final void method() {
// statements
}
}
4. Modifier - abstract:
- abstract có thể dùng để định nghĩa:
Class : phải được thừa kế mới có thể sử dụng các thành viên của nó.
Method : bắt buộc phải override ở subclass. Method này chỉ định nghĩa mà không viết đầy đủ thân.
- Nếu trong class có một phương thức abstract thì class đó buộc phải là abstract
- Ví dụ:
abstract class C{
abstract void method();

}
5. Modifier - static:
- static có thể dùng để định nghĩa :
Variable : tài nguyên chung cho các instance của cùng 1 process.
Method và Variable : được truy xuất trực tiệp thông qua tên class mà không cần khởi dựng đối tượng.
Block : chứa các biểu thức tác động lên biến static
- Ví dụ:
class C{
static int x = 5, y = 7;
static void method() {
}
static{
x += y+5;
}

}
6. Một số Modifier khác:

- native : định nghĩa cho phương thức được viết mã lệnh trong một ngôn ngữ khác (C chẳn hạn)
- transient : định nghĩa biến không cho phép tuần tự hóa.
- volatile : định nghĩa biến cho phép thay đổi dị bộ trong quá trình thực hiện chương trình, được quan tâm
trong môi trường nhiều bộ vi xử lý.
- synchronized : định nghĩa phương thức, khối lệnh cái mà được thực hiện duy nhất tại một thời điểm
trong các chương trình đa luồng xử lý (được xét sau).
- Ví dụ
Class C{
native void method();
transient String x = “PHANTOM_NDK”;
synchronized void method1(){…}
C1 c1 = new C1();
synchronized(c1){…}
}
=====================
Phần III – Khái niệm về Overloading – Overriding – Interface - Exception
I – Overloading
- Trong một class có thể có nhiều phương thức cùng tên nhưng khác nhau về danh sách tham số (kiểu,
số lượng) được gọi là overload.
- Ví dụ:
public void method(int x) {}
public void method(float x) {}
public int method(int y) {} // không hợp lệ
Các lời gọi method(5), method(5f) là khác nhau
II – Overriding
- Nếu lớp con có phương thức giống (tham số và kiểu trả về) phương thức lớp cha được gọi là verride.
- Phương thức override phải có quyền truy xuất >= phương thức bị override
- Phương thức override không được phép quăng loại trừ không hợp lệ đối với phương thức bị override
- Để gọi phương thức bị override của lớp cha ta dùng super.xxx(…) trong đó xxx(…) là tên phương thức.
- Ví dụ:

Class C
{
protected int add(int x, int y) throws IOException{}
}
Class C1 extends C
{
protected int add(int x, int y) throws IOException{} //?
public int add(int x, int y) throws FileNotFoundException{} //? public int add(int x, int y) throws
Exception{} //? private int add(int x, int y) throws IOException{} //?
}
III – Interface
- Là bản khai báo các phương thức, biến để class nào thực hiện thì phải viết đầy đủ các phương thức
này cũng như trong super interface.
- Khai báo interface:
<modifiers> interface <InterfaceName> [extends SuperInterface]
{
// Các khai báo phương thức và biến
}
- Thực hiện : sử dụng [implements <InterfaceName>]
- Ví dụ 1: class C implements Runnable, Serializable{…}
Runnable, Serializable : là các interface
- Các phương thức trong interface chỉ được phép dùng modifier public để định nghĩa.
- Không như abstract class, interface không cho phép viết một phương thức đầy đủ.
- Một class chỉ thừa kế một class duy nhất nhưng có thể thực hiện nhiều interface khác nhau.
- Nếu bỏ qua một số phương thức nào đó của interface thì class thực hiện phải được khai báo abstract
- Ví dụ 2:
interface ISecurity{
public boolean login(String account, String passworld);
}
interface IBAcount extends ISecurity{

public void guiTien(int money);
public void rutTien(int money);
}
class BankAccount implements IBAccount, Runnable{
public boolean login(String acc, String pass){…} // của ISecurity
public void guiTien(int money){…} // của IBAcount
public void rutTien(int money){…} // của IBAcount public void run(){…} // của Runnable
public void rutTienUSD(int usdMoney){…} // Phương thức mới
}
IV – Exception (LoạI trừ)
- Là lỗi xuất hiện trong quá trình chương trình thực hiện của đoạn code. Nếu không xử lý thì chương trình
có thể bị dừng.
- Sau đây là một số loại trừ:
FileNotFoundException : Mở file không có
NullPointerException : Gọi phương thức khi đối tượng null
NumberFormatException : Chuyển chuỗi không phải số sang số
ArrayIndexOutOfBounds : Truy xuất phần tử ngoài phạm vi mảng,…
- Cơ chế bắt loại trừ như sau:
try{
// Code có khả năng xảy ra loại trừ [T]
}
catch(Exception1 e1){
// Xử lý loại trừ Exception1 [E1]
}

catch(ExceptionN eN){
// Xử lý loại trừ ExceptionN [EN]
}
finally{
// Xử lý bất chấp có loại trừ hay không [F]

}
// Xử lý sau loại trừ [S]
- Quy trình hoạt động:
+ Thực hiện:
. Có loại trừ xảy ra
Có bắt : -> [Ei] -> [F] -> [S]
lKhông bắt : -> [F]
. Không có loại trừ : -> [F] -> [S]
+ Có thể chia loại trừ thành 2 loạI:
Các loại trừ con cháu của RuntimeException chỉ xảy ra trong khi chạy. Vì vậy không yêu cầu phải bắt mà
vẫn dịch tốt.
Còn lại : yêu cầu phải bắt mới dịch được
- Ví dụ:
String[] numbers = {“abc”, “123”, “cdf”};
int i = 2;
try{
FileInputStream fis = new FileInputStream(“aaa.txt”);
Integer.parseInt(numbers[i]);
}catch(IOException ioe){
System.out.println(“Lỗi mở file !”);
}catch(NumberFormatException nfe){
System.out.println(“Numbers[“+i+”] không phải số !”);
}finally{
System.out.println(“Xong try-catch rồi !”);
}
System.out.println(“Biến number là số !”);
- Dùng throw new Exception để quăng ra loại trừ
pubic void method(String file) throws IOException{

throw new IOException(“Noi dung exception !”);


}
- Tạo lớp loại trừ mới
class InvalidException extends IOException{
public InvalidException(){
super(“Khong hop le !”);
}
public InvalidException(String msg){
super(msg);
}
}

Phần IV – Giao tiếp lập trình ứng dụng tron nền Java2
I – Java2API
- Là tập thư viên được xây dựng sẳn hỗ trợ người lập trình java tạo ra ứng dụng với các chức năng
phong phú một cách dễ dàng.
- Nghiên cứu class/interface trong các gói
java.lang : phổ dụng trong ngôn ngữ lập trình java
java.util : tiện ích có tính năng mạnh
java.awt : hỗ trợ lập trình GUI
java.awt.event : xử lý sự kiện xảy ra trong GUI
java.applet : giúp tạo dựng và quản lý Applet
java.io : xử lý các luồng dữ liệu vào ra
java.util.zip : nén và giải nén dữ liệu
II – Các class trong java.lang
Object : Class cha của tất cả các class
Runtime : Class quản lý môi trường
System : Quản lý thông tin hệ thống
Math : Cung cấp hệ thống hàm toán học
Integer : Class số nguyên

String ,StringBuffer : Classes chuỗi
Class, Field, Method : Quản lý thành viên trong class
II – Các class trong java.util
StringTokenizer : Hỗ trợ rời rạc hóa chuỗi
Date : Quản lý ngày tháng
Vector : Quản lý danh sách
Hashtable : Quản lý từ điển (ánh xạ)
Arrays : Hỗ trợ xử lý mảng
Interface : Collection, List, Set, MapqInterface : SortedMap, SortedSet, ComparatorqInterface :
Enumeration, Iterator, IteratorListqClass Collections : Hỗ trợ xử lý tập hợp
More Classes

Có thể sau khi đọc, bạn sẽ cảm thấy khó hiểu. Điều đó là tất nhiên vì học lập trình thì không thể chỉ học lý
thuyết mà điều quan trọng là bạn phải thực hành thật nhiều, phải có niềm say mê và sự tìm tòi.
Nếu bạn chưa nắm nhiều thì cũng không sao, khi qua tới phần thiết kế giao diện (GUI) và sử dụng Frame
thì các bạn sẽ thấy nó thực tế hơn và dễ hiểu hơn.
Lúc đó, mình sẽ cho các bạn một số đoạn Code mẫu và mình sẽ giải thích chi tiết tưng dòng lệnh trong
đoạn Code, khi ấy các bạn chỉ cần bỏ chút thời gian đọc lại bài có liên quan đến dòng lệnh đó thì các bạn
sẽ hiểu thôi.
Thân !
Phần V: GUI – Graphic User Interface
Phần này có lẽ sẽ hấp dẫn hơn các phần trên, đây là phần hướng dẫn các bạn tạo giao diện. Tuy nhiên,
sau phần này các bạn chỉ có thể tạo giao diện tương đốI thui, để có một giao diện sắc sảo thì các bạn
phảI học Advance Java. Advance Java chắc phảI nhờ BabyWolf thui hi hi.
Để có thể xây dựng được ứng dụng với giao diện thân thiện, trong java bạn cần phải tìm hiểu gói
java.awt với các nội dung chính:
- Các phần tử (Component)
- Phần tử chứa (Container)
- Chế độ hiển thị (Layout)
- Hệ thống menu (Menu)

- Điều khiển sự kiện (Event)
I - Các phần tử (Component)
Các phần tử tham gia vào quá trình xây dựng ứng dụng GUI gồm :
Label : Nhãn
TextField : Ô nhập 1 dòng
TextArea : Ô nhập nhiều dòng
Button : Nút nhấn
Choice : Combo Box – chỉ cho phép chọn 1
List : List Box – có thể chọn nhiều
Checkbox : Check Box hoặc radio
ScrollBar : Thanh cuộn
Canvas : Phần tử trống dùng tuỳ biến
CheckboxGroup : Cùng với Checkbox để tạo radio group
1. Phần tử Label (Nhãn).
- Là phần tử chứa nhãn, thường đi kèm với 1 phần tử khác để làm rõ nghĩa phần tử đó.
- Phương thức khởi dựng:
Label()
Label(String text)
Label(String text, int align)
Với align=Label.LEFT|Label.RIGHT|Label.CENTER
- Phương thức:
String getText() : Nhận chuỗi nhãn
void setText(String text) : Thay đổi chuỗi nhãn
2. Phần tử TextField
- TextField là phần tử thể hiện ô nhập 1 dòng
- Phương thức khởi dựng:
TextField(), TextField(int cols), TextField(String text), TextField(String text, int cols)
- Phương thức:
void setEchoChar(char c)
char getEchoChar()

void addActionListener(ActionListener l)
void removeActionListener(ActionListener l)
3. Phần tử TextArea
- TextArea là phần tử thể hiện ô nhập nhiều dòng
- Phương thức khởi dựng:
TextArea()
TextArea(int rows, int cols)
TextArea(String text)
TextArea(String text, int rows, int cols)
- Phương thức:
void append(String str)
void insert(String str, int pos)
void replaceRange(String str, int start, int end)
4. Phần tử Button
- Là phần tử được sử dụng để tạo các nút nhấn.
- Phương thức khởi dựng:
Button()
Button(String text)
- Phương thức:
String getLabel()
void setLabel(String label)
void addActionListener(ActionListener l)
void removeActionListener(ActionListener l)
void setActionCommand(String command)
String getActionCommand()
5. Phần tử Choice
- Là phần tử chỉ cho phép lựa chọn 1.
- Phương thức khởi dựng: Choice()
- Phương thức:
void insert(String item, int index)

void addItem(String item)
String getItem(int index)
int getItemCount()
void select(int pos), select(String str)
int getSelectedIndex(), String getSelectedItem()
void remove(int index), remove(String item),removeAll()
void addItemListener(ItemListener l)
void removeItemListener(ItemListener l)
6. Phần tử List
- Là phần tử chỉ cho phép lựa chọn 1.
- Phương thức khởi dựng:
List()
List(int rows)
List(int rows, boolean multiple)
- Phương thức:
void setMultipleMode(boolean
void add(String item), add(String item, int index)
String getItem(int index), int getItemCount()
void select(int index), deselect(int index)
boolean isIndexSelected(int index)
int[] getSelectedIndexes(), String[] getSelectedItems()
void remove(int index), remove(String item), removeAll()
7. Phần tử Checkbox
- Là phần tử được sử dụng trong việc đánh dấu trạng thái.
- Phương thức khởi dựng:
Checkbox()
Checkbox(String label)
Checkbox(String label, boolean state)
Checkbox(String label, boolean state, CheckboxGroup group)
Checkbox(String label, CheckboxGroup, boolean state)

- Phương thức
void setLabel(String label), String getLabel()
boolean getState(), void setState(boolean state)
void setCheckboxGroup(CheckboxGroup g)
CheckboxGroup getCheckboxGroup()
void addItemListener(ItemListener l)
void removeItemListener(ItemListener l)
8. Phần tử CheckboxGroup
- Là class được sử dụng kết hợp cùng checkbox để tạo nhóm radio button.
- Phương thức khởi dựng: CheckboxGroup()
- Phương thức:
Checkbox getSelectedCheckbox()
void setSelectedCheckbox(Checkbox box)
9. Phần tử Canvas
- Là phần tử trống chỉ cung cấp môi trường đồ hoạ để bạn có thể tuỳ biến sinh ra các phần tử có mức độ
đồ họa tuỳ thích.
- Phương thức khởi dựng: Canvas ()
- Phương thức : thường sử dụng các phương thức thừa kế từ Component sau:
void setSize(int width, int height)
void addMouseListener(MouseEvent e)
void addMouseMotionListener(MouseEvent e)
Gửi lên vào 19 July 2003 - 01:50 PM
• Trung Úy

• Nhóm:Thành Viên Ưu Tú
• Bài viết:386
• Gia nhập:25-June 03
Gửi lên vào 20 July 2003 - 04:47 PM
Qua các phần trên, để các bạn có thể hiểu rõ hơn mình đã viết một chương trình nhỏ nhỏ và Post Source
của nó lên để các bạn "mổ xẻ". Đây là Source của chương trình Soan Thảo (giống như Notepad nhưng

tất nhiên là không nhiều chức năng như Notepad):
Bạn chép đoạn code và nhớ lưu với tên là "TextEditor.java" (Nhắc lại: Tại sao phải lưu với tên đó?. Vì
mình đã nói ở bài trước, tên của file Java phải trùng với tên của Class chứa hàm main() ).

CODE
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import java.io.*;
class thongTin extends Frame
{
String[] lbl = {"Trinh Soan Thao Van Ban",
" ",
"Editor:",
"Nhom:",
"Forum:",
"URL:",
"PHANTOM_NDK",
"Thiet Ke Phan Mem",
"Ky Thuat Cong Nghe",
" />
Label[] l = new Label[lbl.length];
Panel p1 = new Panel();
Panel p2 = new Panel();
GridBagLayout gbl = new GridBagLayout();
GridBagConstraints gbc = new GridBagConstraints();
public thongTin()
{
setTitle("Information");
setSize(250,200);

setResizable(false);
setLayout(gbl);
setBackground(Color.pink);
setForeground(Color.red);

for(int i=0;i<lbl.length;i++)
{
l[i] = new Label(lbl[i]);

if(i>=6)
l[i].setForeground(Color.blue);
}
l[0].setFont(new Font("Tahoma",Font.BOLD,16));
l[0].setForeground(Color.black);
p1.add(l[0]);
p2.add(l[1]);
gbc.fill=GridBagConstraints.BOTH;
addComponents(p1,0,0,1,2);
gbc.fill=GridBagConstraints.BOTH;
addComponents(p2,1,0,1,2);
gbc.fill=GridBagConstraints.BOTH;
addComponents(l[2],2,0,1,1);
gbc.fill=GridBagConstraints.BOTH;
addComponents(l[3],3,0,1,1);
gbc.fill=GridBagConstraints.BOTH;
addComponents(l[4],4,0,1,1);
gbc.fill=GridBagConstraints.BOTH;
addComponents(l[5],5,0,1,1);
gbc.fill=GridBagConstraints.BOTH;
addComponents(l[6],2,1,1,1);

gbc.fill=GridBagConstraints.BOTH;
addComponents(l[7],3,1,1,1);
gbc.fill=GridBagConstraints.BOTH;
addComponents(l[8],4,1,1,1);
gbc.fill=GridBagConstraints.BOTH;
addComponents(l[9],5,1,1,1);
show();

addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
dispose();
}
});
}
public void addComponents(Component c,int row,int col,int nrow,int ncol)
{
gbc.gridy = row;
gbc.gridx = col;
gbc.gridheight = nrow;
gbc.gridwidth = ncol;
gbl.setConstraints(c,gbc);
add©;
}
}
public class TextEditor extends MenuBar implements ActionListener
{
// cua so chua menu nay
private Frame frame;

TextArea txa;
// Cac menu trong thanh menu cua frame
static String[] menus = {"File","Format","Info"};
// Cac menu trong menu Format
static String[] format_menus = {"Size","Color"};
// Cac muc trong menu File
static String[] file_MenuItems = {"New","Open","-","Save","Save As ","-","Exit"};
// Cac muc trong menu Size
static String[] size_MenuItems = {"10","12","16","20","24","30","40","50" };
// Cac muc trong menu Color
static String[] color_MenuItems = {"Black","Blue","Cyan","DarkGray","Green","Orange","
Pink","Yellow"};
public TextEditor(Frame frame)
{
// Cua so chua thanh menu nay
this.frame = frame;

// Tao thanh menu
Menu[] mn = new Menu[menus.length];

for(int i=0;i<menus.length;i++)
{
mn[i] = new Menu(menus[i]);
add(mn[i]);
}

//Tao menu Info va dang ky su kien
MenuItem inf = new MenuItem("Information");
mn[2].add(inf);
inf.addActionListener(this);


// Them cac menu vao menu Format
Menu[] mnf = new Menu[format_menus.length];
for(int i=0;i<format_menus.length;i++)
{
mnf[i] = new Menu(format_menus[i]);
mn[1].add(mnf[i]);
}

// Them cac muc vao menu File
addMenuItems(mn[0], file_MenuItems);
// Them cac muc vao menu Size
addMenuItems(mnf[0], size_MenuItems);

// Them cac muc vao menu Color
addMenuItems(mnf[1], color_MenuItems);
frame.add(txa = new TextArea());

}
// Phuong thuc them cac muc (MenuItem) vao menu (Menu)
void addMenuItems(Menu menu, String[] items)
{
for(int i=0;i<items.length;i++)
{
MenuItem mi = new MenuItem(items[i]);
if(items[i].equals("-"))
{
menu.addSeparator();
}
else

{
menu.add(mi);
}

// Dang ky xu ly su kien cho muc trong menu nay
mi.addActionListener(this);
}
}
//Xay dung phuong thuc save
void save(String s, String FileName )
{
try
{
FileOutputStream os = new FileOutputStream(FileName);
for(int i=0;i<s.length();++i)
{
os.write(s.charAt(i));
}
os.close();
}
catch(IOException e)
{
}
}
//Xay dung phuong thuc load
void load(String FileName)
{
try
{
FileInputStream is = new FileInputStream(FileName);

int n=is.available();
byte ibuf[] = new byte[n];
is.read(ibuf,0,n);
is.close();
txa.setText(new String(ibuf));
}
catch(IOException e)
{
}
}
//Xay dung phuong thuc theo yeu cau cua ActionListener
public void actionPerformed(ActionEvent e)
{
String ac = e.getActionCommand();
if(ac.equals("Open"))
{
FileDialog f= new FileDialog(frame, "Mo File" ,FileDialog.LOAD);
f.show();
if(f.getFile() != null)
{
load(f.getDirectory() + "" + f.getFile());
}
}
else if(ac.equals("Save")||ac.equals("Save As "))
{
FileDialog f= new FileDialog(frame, "Luu File" ,FileDialog.SAVE);
f.show();
if(f.getFile() != null)
{
save(txa.getText(),f.getDirectory() + "" + f.getFile());

}
}
else if(ac.equals("New"))
{
txa.setText("");
txa.setFont(new Font("Tahoma",Font.PLAIN,12));
txa.setForeground(Color.black);
}
else if(ac.equals("Exit"))
System.exit(0);
else if(ac.equals("Information"))
{
thongTin ttn = new thongTin();
}
else if(ac.equals("10"))
txa.setFont(new Font("Tahoma",Font.PLAIN,10));
else if(ac.equals("12"))
txa.setFont(new Font("Tahoma",Font.PLAIN,12));
else if(ac.equals("16"))
txa.setFont(new Font("Tahoma",Font.PLAIN,16));
else if(ac.equals("20"))
txa.setFont(new Font("Tahoma",Font.PLAIN,20));
else if(ac.equals("24"))
txa.setFont(new Font("Tahoma",Font.PLAIN,24));
else if(ac.equals("30"))
txa.setFont(new Font("Tahoma",Font.PLAIN,30));
else if(ac.equals("40"))
txa.setFont(new Font("Tahoma",Font.PLAIN,40));
else if(ac.equals("50"))
txa.setFont(new Font("Tahoma",Font.PLAIN,50));

else if(ac.equals("Black"))
txa.setForeground(Color.black);
else if(ac.equals("Blue"))
txa.setForeground(Color.blue);
else if(ac.equals("Cyan"))
txa.setForeground(Color.cyan);
else if(ac.equals("DarkGray"))
txa.setForeground(Color.blue);
else if(ac.equals("Green"))
txa.setForeground(Color.green);
else if(ac.equals("Orange"))
txa.setForeground(Color.orange);
else if(ac.equals("Pink"))
txa.setForeground(Color.pink);
else if(ac.equals("Yellow"))
txa.setForeground(Color.yellow);
}
public static void main(String[] args)
{
Frame f = new Frame("Java Text Editor Application");
f.setMenuBar(new TextEditor(f));
f.setSize(500,400);
f.setFont(new Font("Tahoma",Font.PLAIN,12));
f.show();

// Dang ky xu ly su kien dong cua so Frame
f.addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{

System.exit(0);
}
});
}
}

Mọi thắc mắc xin cứ nói, mình sẽ giải thích ngay.
Thân !
(Lưu ý: Vì ở đây không canh lề được như trong trình soạn Java nên các bạn sẽ nhìn thấy lộn xôn, các
bạn Copy về rùi chỉnh ra vô cho hợp lý).
Phần V: GUI – Graphic User Interface (Tiếp Theo)
II – Phần Tử Chứa (Container)
Container là các component có thể chứa các phần tử khác. Chúng còn cung cấp một môi trường đồ hoạ
để bạn có thể vẽ lên đó. Java cung cấp các container các mục đích khác nhau sau:
Frame : Cửa sổ gồm tiêu đề, icon và border
Panel : Chỉ để nhóm các component khác
Applet : Chứa các phần tử hiển thị trên trang web
Dialog : Cửa sổ đàm thoại
FileDialog : Cửa sổ giao tiếp file trên đĩa
ScrollPane : Chứa phần tử có kích thước lớn
1. Frame
Khái niệm:
Là các cửa sổ độc lập gồm tiêu đề, icon và border. Là container duy nhất cho phép chứa menu. Layout
mặc định là BorderLayout.
Phương thức khởi dựng:
Frame( )
Frame(String title)
Phương thức:
Image getIconImage(), void setIconImage(Image image)
String getTitle(), void setTitle(String title)

MenuBar getMenuBar(), void setMenuBar(MenuBar mb)
void remove(MenuComponent m)
boolean isResizable(), void setResizable(boolean resizable)
2. Panel
Khai niem:
Là một container với mục địch chỉ để nhóm các component. Bạn không thể nhìn thấy container này một
cách trực tiếp.
Phương thức khởi dựng : Panel()
Phương thức : sử dụng lại các phương thức của lớp cha (Container).
add(Component)
remove(Component)
validate(),…
3. Dialog
Khai niem:
Là của sổ đàm thoại không chứa menu, được sinh ra từ một của sổ chủ.
Phương thức khởi dựng:
Dialog(Frame owner)
Dialog(Frame owner, boolean modal)
Dialog(Frame owner, String title)
Dialog(Frame owner, String title, boolean modal)
Phương thức:
void setTitle(String title), String getTitle()
void show(), void hide()
void setModal(boolean b), boolean isModal()
void setResizable(boolean resizable), boolean isResizable()
4. FileDialog
Khai niem: Là của sổ giao tiếp file trên đĩa, con của class Dialog.
Phương thức khởi dựng :
FileDialog(Frame owner)
FileDialog(Frame owner, String title)

FileDialog(Frame owner, String title, int mode)
Trong đó mode = FileDialog.LOAD|FileDialog.SAVE
Phương thức:
void setMode(int mode), int getMode()
void setDirectory(String dir), String getDirectory()
String getFile(), void setFile(String file)
[b]5. CrollPane
Khai niem:
Là container với các thanh cuộn nó cho phép chứa được các phần tử lớn hơn phạm vi của nó.
Phương thức khởi dựng: ScrollPane()
Phương thức:
void setScrollPosition(int x, int y)
void setScrollPosition(Point p)
Point getScrollPosition()
Phần V: GUI – Graphic User Interface (Tiếp Theo)
III – Các Chế Độ Hiện Thị
Bao gồm các chế độ hiện thị sau:
- FlowLayout
- BorderLayout
- GridLayout
- GridBagLayout (*)
- CardLayout
(*) : Tương đốI khó so vớI các chế độ khác.
1. FlowLayout
Khái niệm: Các component được thêm vào nối tiếp nhau khi container dùng chế độ hiển thị này.
Khởi dựng :
FlowLayout(int align, int hgap, int vgap)
FlowLayout(int align)
FlowLayout()
Các tham số :

align : canh lề (mặc định FlowLayout.CENTER) . Có giá trị : FlowLayout.LEFT, FlowLayout.RIGHT,
FlowLayout.CENTER
vgap : k/c đứng giữa các component (mặc định 5)
hgap : k/c ngang giữa các component (mặc định 5)
Ví dụ : new FlowLayout(FlowLayout.LEFT, 8, 8)
2. BorderLayout

Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Tải bản đầy đủ ngay
×