1. Trang chủ
  2. » Công Nghệ Thông Tin

Mô hình ứng dụng hướng sự kiện event based program

48 222 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 48
Dung lượng 1,64 MB

Nội dung

Distributed Computing in Java Hướng dẫn chungMô hình Ứng dụng hướng sự kiện- Event-based Program Sự kiện- Event, còn gọi là biến cố: Một tình huống xẩy ra, thí dụ: người dùng gõ thêm một

Trang 1

Distributed Computing in Java Hướng dẫn chung

Mô hình Ứng dụng hướng sự kiện- Event-based Program

Sự kiện- Event, còn gọi là biến cố: Một tình huống xẩy ra, thí dụ: người dùng gõ thêm một ký tự vào một textbox làm nội dung trong textbox này bị đổi, user kích vào một nút lệnh để chọn một tác vụ

Event object: Chứa thông tin về một biến cố đã xẩy ra

Thí dụ về sự kiện chuột : vị trí kích chuột (x,y), đối tượng bị chuột đè lên và kích vào, số lần kích

mà người dùng đã bấm (1,2,3 lần kích), phím bị kích (trái,giữa, phải)…

Các ứng dụng này có được khi người lập trình sử dụng các ngôn ngữ Visual C++, Visual Basic, Java, C Sharp- Những ngôn ngữ mạnh hiện nay

Ứng dụng loại này là các ứng dụng có GUI (Graphical User Interface) Cơ chế vận hành (frame work) của loại ứng dụng này như sau:

1 Khi chạy ứng dụng, GUI được xuất ra để user tương tác.

2 Lặp

- Chờ user tương tác với GUI để có đối tượng sự kiện

- Xử lý sự kiện

- Xuất kết qủa xử lý lên GUI

Khi user còn tương tác.

Trang 2

Như vậy, các bước lập trình ứng dụng như sau:

1- Viết code tạo GUI (nhiều công cụ có công cụ trực quan để user tạo GUI)

2- Dự kiến các sự kiện cần được quản lý.

3- Viết code xử lý từng sự kiện.

4- Biên dịch Việc đưa code quản lý sự kiện vào ứng dụng do trình biên dịch thực hiện tự động.

Thiết kế GUI với NetBeans

1) Tạo Project: General/ Java Application – Đặt tên và chọn thư mục

2) Thêm 1 file: New File/ Java GUI Forms/ Jframe Form/ Đặt tên

NetBeans sẽ tự động tạo cho chúng ta một Form để thiết kế GUI

3) Chọn cách bố trí các phần tử (Kích phải chuột vào form, nênchọn Null Layout)

4) Đưa vào 1 phần tử

Trang 3

5) Đặt tên biến

Cách đặt tên nên dùng: Thêm tiếp đầu ngữ:

txt cho textbox, textarea

TextArea cho address : txtArea Radiobutton cho giới tính male: rbMale Radiobutton cho giới tính female: rbFemale

6)Thiết lập thuộc tính

Đặt kích thước cửa sổ: Mở code, gọi hành vi thiết lập kích thước cửa sổ vào trong constructor, dưới lời gọi nitComponents Nhờ tác vụ này, khi chương trình được chạy, cửa sổ sẽ có ngay kjích thước ban đầu Nếu không làm điều này, cửa sổ chỉ có tiêu đề, user phải kéo cửa sổ cho lớn ra.

Trang 4

7) Viết code quản lý sự kiện

Assigment 1: Introduction to Swimg

Assignment

Tạo form nhập thông tin về sinh viên theo hình thức ở hình dưới

Nút Validate:

Sẽ kiểm tra tính hợp lệ của dữ liệu nhập (mọi field đề phải có dữ liệu)

Nút Reset: Xóa trống các ô nhập liệu để user có thể nhập lại thông tin.

Trang 5

Một số gợi ý

- Ấn định tiêu đề cho cửa sổ: Chọn form/ Properties/ Title

- Vẽ khung trên GUI: Thêm 1 JPanel/ chọn JPanel này/ Properties/ Border/ Kích nút bên phải của sổ Properties/ chọn loại border.

- Tạo nhóm cho 2 Radiobutton:

o Trước khi đưa JradioButton vào Form, hãy thêm 1 JButtonGroup vào form.

o Thêm 2 JRadioButton vào form, vào Properties của các radio button này, cho thuộc tính ButtonGroup là JbuttonGroup vừa đưa vào ở bước trên.

- Thêm chuỗi vào JComboBox: Chọn JComboBox, vào properties/ Chọn model/ Kích nút bên

phải của sổ Properties để sửa nội dung.

- Truy xuất thuộc tính text của textbox, textarea:

this.txtName.setText(“”); // xóa trống ô name

this.txtAddress.setText(“123 Le Loi”); // sửa nội dung textarea address

string s= txtAddress.getText(); // lấy nội dung của text area address đưa vào biến s

Assignment 2: Swing Components and DialogBox

Trang 6

Mặc định, nhãn sẽ xuất cùng với JSlider là số Muốn xuất chữ, chúng ta cần phải tạo một bảng ánh xạ các

số với các JLabel Đoạn code sau (đặt trong constructor) sẽ giúp xuất chữ cùng với JSlider:

Gợi ý

Dùng các JSlider

- Can thiệp các thuộc tính: minimum, maximum, paintLabel, paintTick, paintTrack, majorTickSpacing, value

Trang 7

Assignment 3: Layout Managers

Trường kinh doanh Norman là một học viện hàng đầu đào tạo sau đại học về quản trị kinh doanh MỖi năm có hơn

1000 sinh viên đăng ký vào các khóa học

Viết một chương trình Java giúp ghi nhận thông tin về sinh viên như GUI dưới đây

Nút Reset: Xóa trống các ô text field.

Nút Save: Kiểm tra buộc nhập các textfield Một thông báo sẽ xuất ra phù hợp tùy thuộc vào dữ liệu hợp

lệ hay không.

Nút Exit: thoát ứng dụng

Gợi ý

Kiểm tra buộc nhập cho 1 textfield bằng 1 trong 2 cách:

(1) Dựa vào độ dài chuỗi

Trang 8

Assignment 4: Swing Menu Components

Viết chương trình chọn mầu cho học sinh lớp 5

Trang 9

Assignment 5: Swing Advanced Controls

- Muốn nút lệnh không có chữ: xóa property

text

- Chọn mầu nền cho nút lệnh: chọn thuộc tính

background

- Chọn ảnh cho nút lệnh: thuộc tính icon/

Image Source Type = File/ chọn file.jpg/.gif

- Muốn lấy mầu nền của nút:

java.awt.Color color= btn.getBackGround();

- Cần 1 biến boolean back=true; để quản lý tô mầu

ga đến (to), loại ghế (option)

Dữ liệu liên quan đến bài toán này ( ứng với các lớp phải xây dựng) bao gồm:

Thông tin về 1 chuyến bay  FlightInfo (from,to,flightName,option,price)

Thông tin về các chuyến bay  FlightListSau đó tạo GUI để tương tác

Trang 10

Lớp mô tả cho một chuyến bay:

Trang 11

Lớp mô tả cho 1 danh sách chuyến bay

Trang 12

Lớp tạo GUI

Tên các đối tượng trên form:

Trang 13

Component property Trị

Frame title Flight Reservation

layout null

rFirstClass font size=10

buttonGroup buttonGroup1rBusiness font size=10

buttonGroup buttonGroup1rExecutive font size=10

buttonGroup buttonGroup1lstResults font size=10

Dữ liệu cần có

Danh sách các chuyến bay L

Mô hình dữ liệu cho listbox lstResults

Các sự kiện cần quản lý

User kích chọn 1 ga đi  actionEvent

User kích chọn nút Exit  actionEvent

User kích chọn nút Search  actionEvent

Tác vụ thêm

Khởi tạo danh sách các chuyến bay

Xuất kết qủa tìm kiếm vào listbox lstResults

Trang 14

Assignment 6: Internationalization

Để làm bài này, cần thay đổi font của System về font Unicode cho thanh tiều đề của cửa sổ như sau:

(1) Kích phải màn hình Desktop/ Properties.

(2) Chọn thẻ Appearance

(3) Kích nút Advance, cửa sổ Advanced Appearance xuất hiện

(4) Chọn Item: Active Title Bar

(5) Chọn Font: Tahoma

Trang 15

Để có giao diện đẹp hơn, sửa GUI như sau:

Viết ứng dụng Java cho một công ty của Việt Nam (thay cho Pháp) giúp đổi tiền

Trang 16

Trong GUI trên, có 7 nội dung cần đổi và các tập tin properties phải phản ảnh 7 nội dung này

Các file cần có:

CurrencyInfo.java chứa khai báo lớp CurrencyInfo mô tả cho một loại tiền.

CurrencyList.java chứa khai báo lớp CurrencyList mô tả cho một danh sách các loại tiền.

Vietnamese_vn_VN.properties: chứa các khai báo tiêu đề cho GUI tiếng Việt.

English_us_US.properties: chứa các khai báo tiêu đề cho GUI tiếng Anh.

ConvertPrg.java: chứa lớp ConvertPrg là GUI của chương trình

Bước 1: Tạo Project Module_6

Bước 2: Tạo class mô tả cho thông tin tiền tệ

Mỗi loại tiền được mô tả bằng loại tiền (type), ký hiệu (symbol), và hệ số đổi một $US sang loại tiền này

Để tạo cơ chế so sánh tự động theo loại tiền (type) dùng trong lớp CurrencyList-danh sách các loại tiền, lớp

CurrencyInfo cần implement hai interface: Comparator và Comparatible

Trang 17

Bước 3: Tạo tập tin CurrentList.java

Vì đặc điểm của các loại tiền trên thế giới là khác nhau Do vậy, để danh sách các loại tiền có khả năng tự động sắp xếp tên các loại tiền theo thứ tự từ điển (vì phần tử của danh sách là 1 loại tiền – lớp CurrencyInfo- đã cung cấp các hàm so sánh theo tên) thì danh sách các loại tiền nên là lớp con của lớp java.util.TreeSet

Bước 4: Tạo tập tin Vietnamese_vn_VN.properties

(New File/ Other/ Properties File/ Đặt tên, để trong thư mục build/classes)

Tham khảo một số mã Unicode

Một số mã Unicode cho tiếng Việt (tham khảo chức năng insert symbol trong MS Word hoặc Start/All

Programs/ Accessories/ System Tools/ Character Map):

á: 00E1 ư: 01B0 ơ: 01A1 ì: 00EC ề: 1EC1 Đ: 00D0 đ: 0111

Trang 18

Bước 5: Tạo tập tin English_us_US.properties

Bước 6: Xây dựng lớp ConvertPrg cho chương trình đổi tiền Giao diện và tên các đối tượng trên giao diện:

Trang 21

Assignment 7: Networking

biennial: niên hạn hai nămtamper: quấy nhiễuschool pricipal: hiệu trưởngsenior staff: thành viênTạo ứng dụng chạy trên mạng cho phép học sinh gửi nội dung một file trả lời về server dựa trên

IP của server

Tại ứng dụng server, khi user kích nút Start, user được yêu cầu nhập vị trí cho việc lưu file do client chuyển đến Khi server nhận được file từ client, trên textfield sẽ xuất hiện dòng thông báo là client đã gửi file

Trang 22

Sử dụng TCP Socket

TCP socket truyền thông giữ đường truyền dạng, dữ liệu truyền thông là các chuỗi ký tự Do vậy, cần định ra một cơ chế giao tiếp gọi là protocol giữa hai máy Trong bài này, dùng chuỗi “Bye.” để đánh dấu chấm dứt giao tiếp.

Khi lập trình Socket với ứng dụng có GUI, vì không thể biết lúc nào client giao tiếp với server nên ta cần

định thời quét tìm client bằng cách sử dụng lớp javax.swing.Timer Cứ đúng thời hạn đã ấn định, một sự

kiện ActionEvent sẽ xẩy ra và chúng ta có thể bẫy sự kiện này để xử lý.

Cú pháp tạo đối tượng timer như sau:

import javax.swing.*;

import java.awt.event.*

……

int delayTime=500;

ActionListener taskPerformer = new ActionListener() // package java.awt.event

{ public void actionPerformed(ActionEvent evt)

{ processingConnection(); // gọi tác vụ xử lý khi đúng thời điểm

}

};

Timer tm=new Timer(delayTime, taskPerformer);

tm.start();

Trang 23

Cấu trúc của ứng dụng

ServerForm.java

Giao diện:

Các ảnh do bạn tự chọn hoặc không có ảnh cũng được Lớp ServerForm là giao diện chứa một Socker Server tại mỗi thời điểm sẽ chấp nhận một client truyền một nội dung về server và người dùng bên server sẽ lưu dữ liệu này vào một tập tin với tên tập tin

do user chỉ định.

Trang 27

Giao diện

Client có thể kết nối với server nếu client biết IP và port của server Sau khi nhập vào tên tập tin cần truyền và kích nút Send, nội dung tập tin sẽ được truyền sang server Server nhận dữ liệu

và truyền lại thông báo đã nhận

dữ liệu.

Trang 29

Assignment 8 : Remote Method Invocation

Trang 30

Cấu trúc nên có của ứng dụng:

Trang 31

Các bước xây dựng ứng dụng:

Bước 1: Tạo Remote interface, biên dịch interface này

Vì giao tiếp giữa client và server chỉ là kiểm tra cặp dữ liệu (username, password) do vậy interface này chỉ có một hành vi với cho tiết sau:

Kiểu trả trị: boolean vì cho kết quả là đúng hoặc sai.

Tên hành vi: check

Tham số : hai String

Trang 32

Trong lớp này, cần khai báo IP của máy chạy chương trình server này (IP của máy cá nhân là “127.0.0.1”

và tên dịch vụ - thí dụ “checker” Lớp này chứa một danh sách ( tên users) gồm các cặp

<username,password> Thông thường các username phải khác nhau Do vậy, danh sách này nên chọn là một HashMap <String,String> để việc tìm kiếm được tiến hành nhanh chóng.

Trong constructor của lớp này, việc đọc file được tiến hành để nạp nội dung file dữ liệu vào biến users.

Để lớp này có khả năng kiểm tra việc đăng nhập từ xa, lớp này phải implements interface đã được hiện thực ở trên.

Trong hành vi main, một đối tựơng thuộc lớp này cần phải được tạo ra và đăng ký tên dịch vụ với server

quản lý các dịch vụ Do vậy, trình rmiregister.exe cần phải được gọi thông qua đối tượng thuộc lớp

Runtime.

Trang 34

Bước 4: Tạo tập tin MakeStub.bat, chạy tập tin này để có stub class Bước 5: Tạo Client class

GUI

Biến thêm

Quản lý sự kiện khi user kích nút Reset

Xóa trống 2 text fields

Quản lý sự kiện khi user kích nút Submit

Trang 35

Chạy ứng dụng

- Tạo runServer.bat và runClient.bat

- Chạy runServer.bat trước rồi chạy runClient.bat sau.

Kết qủa

Server

Client

Assignment 9: JavaMail

Trang 36

Tạo một ứng dụng Java sử dụng Java Mail cho phép user gửi email đến một số người, cho phép đính kèm

các tập tin Người gửi sẽ phải nhập địa chỉ địa chỉ của mình vào ơ From, địa chỉ các bác sĩ vào ô To phân cách các địa chỉ bằng ‘;’ hoặc ‘,’ Người gửi có thể nhập Subject và Content vào các ô tương ứng Nếu người dùng muốn attach một tập tin thì kích nút Attach Khi user kích nút Send, thư này sẽ được gửi đi Tình trạng thành công/ thất bại của quá trình gửi được thông báo cho người dùng Chú ý: Để chạy

chương trình này, user phải kết nối internet.

Xem bài mẫu trong đĩa CD giáo trình môn học

Trang 37

Bài này nên được phát triển theo hướng linh động hóa để cho phép người dùng:

- Nhập vào mail server host.

- Port của mail server

- Tùy biến mail server có sử dụng cơ chế Authentication hay không.

- Địa chỉ người gửi (from)

- Các địa chỉ người nhận : TO, CC, BCC

- Chủ đề (subject)

- Các tập tin cần attach

- Thân (body) của thư.

( Tham khảo GUI dưới đây)

Kiến trúc của ứng dụng

Trang 38

MyAuthenticator.java : Lớp mô tả cho một account của một mail server có sử dụng cơ chế

authentication.

SendingMail.java : Lớp mô tả cho ứng dụng gửi thư.

Bước 1: Tạo project

Bước 2: Add thư viện Java Mail

Trang 39

Bước 2 : Copy 2 tập tin jar này vào thư mục lib/ext của JRE để máy ảo sử dụng các lớp dùng trong việc

gửi thư.

Bước 2: Thêm file: MyAuthenticator.java

Trang 40

Bước 3 : Thêm file SendingMail.java

Trang 41

Import các lớp

Trang 42

Khi user kích checkbox Account Request

Khi user kích nút Select File

Hành vi kiểm tra host, port, from

Trang 43

Khi user kích nút Send

Trang 45

Bước 4: Biên dịch

Bước 5 : Đóng gói để có file.jar

Kết qủa được NetBeans để trong thư mục dist (distribution- phân phối – User cần chép nội dung thư mục

này để chạy ứng dụng)

Bước 6: Tạo tập tin bat để trong thư mục dist

Bước 7 : Chạy chương trình : Kích đôi vào tập tin bat

Trang 46

Bài đọc thêm về các properties khi gửi thư

Đọc trong thư mục NetBeans

Đọc ở cuối tập tin

Có khai báo các Keys của properties khi gửi thư thông thường

Package com.sun.mail.smtp

mail.smtp.user String Default user name for SMTP

mail.smtp.host String The SMTP server to connect to

mail.smtp.port int The SMTP server port to connect to, if the connect() method doesn't

explicitly specify one Defaults to 25

mail.smtp.connectiontimeout int Socket connection timeout value in milliseconds Default is infinite timeout.mail.smtp.timeout int Socket I/O timeout value in milliseconds Default is infinite timeout

mail.smtp.localaddress String

Local address (host name) to bind to when creating the SMTP socket Defaults to the address picked by the Socket class Should not normally need to be set, but useful with multi-homed hosts where it's important to pick a particular local address to bind to

Trang 47

mail.smtp.localport int Local port number to bind to when creating the SMTP socket Defaults to the port number picked by the Socket class

If false, do not attempt to sign on with the EHLO command Defaults to true Normally failure of the EHLO command will fallback to the HELO command; this property exists only for servers that don't fail EHLO properly or don't implement EHLO properly

mail.smtp.auth boolean If true, attempt to authenticate the user using the AUTH command

Defaults to false

mail.smtp.submitter String

The submitter to use in the AUTH tag in the MAIL FROM command Typically used by a mail relay to pass along information about the original submitter of the message See also the setSubmitter method

of SMTPMessage Mail clients typically do not use this

mail.smtp.dsn.notify String

The NOTIFY option to the RCPT command Either NEVER, or some combination of SUCCESS, FAILURE, and DELAY (separated by commas)

mail.smtp.dsn.ret String The RET option to the MAIL command Either FULL or HDRS

mail.smtp.allow8bitmime boolean

If set to true, and the server supports the 8BITMIME extension, text parts

of messages that use the "quoted-printable" or "base64" encodings are converted to use "8bit" encoding if they follow the RFC2045 rules for 8bit text

mail.smtp.sendpartial boolean

If set to true, and a message has some valid and some invalid addresses, send the message anyway, reporting the partial failure with a

SendFailedException If set to false (the default), the message is not sent

to any of the recipients if there is an invalid recipient address

mail.smtp.sasl.realm String The realm to use with DIGEST-MD5 authentication

mail.smtp.quitwait boolean

If set to false, the QUIT command is sent and the connection is immediately closed If set to true (the default), causes the transport to wait for the response to the QUIT command

mail.smtp.reportsuccess boolean

If set to true, causes the transport to include an SMTPAddressSucceededException for each address that is successful Note also that this will cause a SendFailedException to

be thrown from the sendMessage method of SMTPTransport even

if all addresses were correct and the message was sent successfully mail.smtp.socketFactory.class String

If set, specifies the name of a class that implements the javax.net.SocketFactory interface This class will be used to create SMTP sockets

mail.smtp.socketFactory.fallback boolean

If set to true, failure to create a socket using the specified socket factory class will cause the socket to be created using the java.net.Socket class Defaults to true

mail.smtp.socketFactory.port int Specifies the port to connect to when using the specified socket factory If not set, the default port will be used mail.smtp.mailextension String Extension string to append to the MAIL command The extension string

can be used to specify standard SMTP service extensions as well as vendor-specific extensions Typically the application should use the SMTPTransport method supportsExtension to verify that the

Ngày đăng: 04/12/2015, 03:13

TỪ KHÓA LIÊN QUAN

w