Lập trình Java cơ bản - Chương 5: Điều khiển sự kiện nhập
Nhập dữ liệu từ hộp hội thoại
Nhập dữ liệu sử dụng Frame
Tạo một trường nhập dữ liệu
Lấy giá trị từ trường
Chiến lược thiết kế hướng đối tượng
Sử dụng thẻ CRC (classes – responsibilities – collaborations)
Chiến lược phân rã chức năng
LẬP TRÌNH JAVA CƠ BẢN Chương 5 ĐIỀU KHIỂN SỰ KIỆN NHẬP Lê Tân Bộ môn: Lập trình máy tính Nội dung chương 5 Nhập dữ liệu từ hộp hội thoại Nhập dữ liệu sử dụng Frame Tạo một trường nhập dữ liệu Lấy giá trị từ trường Chiến lược thiết kế hướng đối tượng Sử dụng thẻ CRC (classes – responsibilities – collaborations) Chiến lược phân rã chức năng 5.1 Nhập dữ liệu từ hộp hội thoại Để nhập dữ liệu chuỗi, có thể sử dụng hộp hội thoại trong gói javax.swing. Cú pháp như sau: String string = JOptionPane.showInputDialog( null, “Prompt Message”, “Dialog Title”, JOptionPane.QUESTION_MESSAGE); 5.1 Nhập dữ liệu từ hộp hội thoại 5.2 Nhập dữ liệu sử dụng Frame Nút lệnh: Button (nút) là một thành phần của khung, dùng để tạo một sự kiện khi người sử dụng bấm chuột lên nó. Trường nhập dữ liệu (Data Entry Field): Là một thành phần của khung, nơi NSD có thể nhập vào một giá trị. Trong GUI, sử dụng các đối tượng văn bản, ví dụ TextField để nhập dữ liệu kiểu chuỗi Sau đó chuyển kiểu dữ liệu cho phù hợp với yêu cầu của chương trình. 5.2 Nhập dữ liệu sử dụng Frame Phương thức tạo của lớp TextField public TextField( int columns ) // Tạo một TextField có số cột xác định public TextField( String s, int columns ) // Tạo một TextField có số cột xác định, với văn bản cho trước là chuỗi s Các phương thức lớp TextField // Phương thức public String getText( ) // Trả về văn bản của TextField public void setText(String s ) // Thiết lập văn bản s cho TextField 5.2 Nhập dữ liệu sử dụng Frame Các bước sử dụng nút lệnh (Button): Khai báo một biến Button. Sử dụng new để tạo đối tượng Button. Đặt một tên cho sự kiện Button. Thêm đối tượng Button vào khung. Tạo một lớp listener với actionPerformed để quản lý các sự kiện Button. Nhận biết Listener với Button qua việc gọi phương thức addActionListener. 5.2 Nhập dữ liệu sử dụng Frame Ví dụ về khung nhập dữ liệu 5.3 Tạo một trường nhập dữ liệu Khai báo một biến của lớp trường tương ứng Tạo một đối tượng của lớp đó Sử dụng phương thức add để thêm đối tượng này vào Frame Ví dụ: Tạo một trường nhập dữ liệu có tên là inputField TextField inputField; // Khai báo một trường để nhập dữ liệu fieldLabel1 = new Label1(“Enter data here:”); // Tạo nhãn Lable1 inputField = new TextField (6); // Tạo đối tượng 6 ký tự dataEntryFrame.add(inputField); //Thêm vào khung dataEntryFrame Chú ý: Ta có thể tạo đối tượng cùng với chuỗi mặc định của nó inputField = new TextField (“Replace Me”,10); // Chuỗi mặc định 5.3 Tạo một trường nhập dữ liệu Ví dụ về sử dụng khung để nhập dữ liệu . . . Frame dataEntryFrame; //Khai báo khung Label1 fieldLabel1; //Khai báo nhãn TextField inputFileld; //Khai báo trường Button done; //Khai báo nút ButtonHandler myHandler; //Khai báo đối tượng xử lý sự kiện . . . dataEntryFrame = new Frame(); //Tạo khung fieldLabel1 = new Label1(“Enter data here:”); //Tạo nhãn inputFileld = new TextField(“Replace Me”, 10); //Tạo trường done = new Button(“Done”); //Tạo nút 5.3 Tạo một trường nhập dữ liệu Ví dụ về sử dụng khung để nhập dữ liệu (tt) done.setActionCommand(“done”); //Đặt tên cho sự kiện nút dataEntryFrame.setLayout (new FlowLayout()); //Thiết lập bố cục dataEntryFrame.add(fieldLabel1); //Thêm nhãn vào khung dataEntryFrame.add(inputFileld); //Thêm trường vào khung dataEntryFrame.add(done); //Thêm nút vào khung myHandler = new ButtonHandler( ); //Tạo listener done.addActionListener(myHandler); //Đăng ký listener dataEntryFrame.pack() //Đóng gói khung dataEntryFrame.show() //Hiển thị khung . . . 5.4 Lấy giá trị từ trường 5.4 Lấy giá trị từ trường // Chương trình Rainfall import java.awt.*; // Nạp gói java.awt import java.awt.event.*; // Nạp gói java.awt.event public class Rainfall { // Định nghĩa một button listener private static class ActionHandler implements ActionListener { public void actionPerformed(ActionEvent event) // Xử lý sự kiện từ nút Enter trong inputFrame { double amount, double average; // Lưu giá trị vào và giá trị trung bình // Chuyển chuỗi vào inputField thành số thực amount = Double.valueOf(inputField.getText()).doubleValue(); numberEntries++; total = total + amount; average = total / numberEntries; outputLabel.setText(“” + average); //Xuất dữ liệu inputField.setText(“”); // Xóa trường } } 5.4 Lấy giá trị từ trường // Khai báo các biến cho lớp Rainfall private static Frame inputFrame; // Khai báo khung private static Label outputLabel; // Khai báo nhãn private static TextField inputField; // Khai báo trường private static double total; // Lưu trữ tổng private static double numberEntries; // Đếm số đầu vào public static void main( String[ ] args ) { Label entryLabel; // Nhãn cho trường nhập Button enter; // Nút Enter ActionHandler action; // Khai báo listener // Tạo và khởi tạo các biến total = 0.0; numberEntries = 0.0; inputFrame = new Frame( ); entryLabel = new Label(“Enter amount here:”); 5.4 Lấy giá trị từ trường outputLabel = new Label(“0.0”, Label.RIGHT); inputField = new TextField(“”, 10); enter = new Button(“Enter”); enter.setActionCommand(“enter”); // Đặt tên sự kiện nút action = new ActionHandler( ); // Tạo listener enter.addActionListener(action); // Đăng ký listener // Đưa các thành phần vào khung inputFrame.setLayout(new GridLayout(2,2)); inputFrame.add(entryLabel); inputFrame.add(inputField); inputFrame.add(enter); inputFrame.add(outputLabel); inputFrame.pack( ); inputFrame.show( ); 5.4 Lấy giá trị từ trường inputFrame.addWindowListener( new WindowAdapter( ) // Xử lý sự kiện đóng cửa sổ (khung) { public void windowClosing (WindowEvent event) { inputFrame.dispose( ); // Xóa khung System.exit( 0 ); // Thoát chương trình } }); } } 5.5 Chiến lược thiết kế HĐT (OOD) Hai chiến lược thiết kế phần mềm thường dùng: Phân rã chức năng (module hóa bài toán) và hướng đối tượng. Chiến lược phân rã chức năng: Phân rã bài toán ban đầu được thành các bài toán con nhỏ hơn, dễ giải quyết hơn. Các kết quả sẽ được kết hợp với nhau để tạo thành kết quả của bài toán ban đầu. Chiến lược thiết kế hướng đối tượng: Bao gồm năm giai đoạn Phân tích yêu cầu (Requirement Analysist) Phân tích (Analysist) Thiết kế (Design) Lập trình (Programming) Kiểm tra (Testing) Lập trình hướng đối tượng (OOP – Object Oriented Programming) là giai đoạn thứ tư của thiết kế hướng đối tượng. 5.5 Chiến lược thiết kế hướng đối tượng 5.5 Chiến lược thiết kế hướng đối tượng Đối tượng: Là một thực thể, chứa các giá trị xác định tính chất, và các phương thức (methods) xác định hành vi. Lớp: Khuôn mẫu (template) của đối tượng (Object), bao gồm dữ liệu và các phương thức tác động lên dữ liệu. Các đối tượng được xây dựng bởi các lớp nên được gọi là các thể hiện của lớp (class instance). Thừa kế: Định nghĩa một lớp mới trên cơ sở phát triển định nghĩa của một lớp đã tồn tại để đáp ứng những yêu cầu mới. Siêu lớp (superclass) và lớp con (subclass): Lớp được thừa kế gọi là siêu lớp. Lớp thừa kế gọi là lớp con. 5.6 Sử dụng thẻ CRC OOD bắt đầu bằng việc xác định các lớp đối tượng chính và chọn các thuộc tính trừu tượng tương ứng cho các đối tượng đó. Mỗi lớp chỉ ra một tập hợp các đáp ứng, là các hành động mà các đối tượng của nó hỗ trợ. Các đối tượng cộng tác với nhau qua việc gửi thông điệp. 5.6 Sử dụng thẻ CRC Các lớp (classes), đáp ứng (responsibilities), và cộng tác (collaborations) kết hợp lại để giải quyết một vấn đề. Sử dụng thẻ các lớp (classes), đáp ứng (responsibilities) và cộng tác (collaborations) là một kỹ thuật để phát triển các thiết kế hướng đối tượng. Phương pháp này cần vận dụng trí tuệ tập thể, tính xuyên suốt và tạo kịch bản để xác định và tinh chế các lớp cần thiết cho bài toán. 5.6 Sử dụng thẻ CRC CRC của lớp địa chỉ 5.7 Chiến lược phân rã chức năng Đi từ trừu tượng (danh sách các bước giải bài toán chính mà một số chi tiết còn chưa được làm rõ) đến cụ thể (các chi tiết thực hiện đều hoàn toàn rõ ràng). Tập trung vào dãy các hoạt động (giải thuật) cần thiết để giải quyết bài toán. Bắt đầu bằng việc chia lời giải thành một loạt các bước chính, tiếp tục cho đến khi mỗi bài toán con là không thể phân chia được nữa hoặc đã có một lời giải hiển nhiên. Chương trình là tập hợp các module giải các bài toán con. Một lược đồ cấu trúc module (cây lời giải phân cấp) thường được tạo ra. Dữ liệu đóng vai trò thứ yếu, hỗ trợ cho các hoạt động (giải thuật). Câu hỏi và bài tập Một sự kiện sẽ được gửi đi đâu khi người sử dụng bấm chuột trên một nút? Điều gì xảy ra khi người sử dụng bấm chuột trên một nút? Khai báo một TextField với tên gọi là dataField. Gán một giá trị vào dataField với độ dài là 10. Hãy gán một giá trị ngầm định “Replace me” vào dataField. Thêm dataField vào đối tượng khung dataFrame. Viết lệnh lưu trữ các giá trị nhập ở dataField vào biến dataValue có kiểu String. Viết lệnh chuyển dataValue vào doubleValue kiểu double. Khai báo một biến press kiểu Button. Câu hỏi và bài tập Viết lệnh gán tên “Press” cho press. Khai báo một đối tượng thuộc lớp ButtonListener. Viết lệnh đăng ký ButtonListener này. Gọi tên ba đối tượng có thể chứa trong đối tượng Frame. Các bước để thêm một trường nhập dữ liệu vào một đối tượng Frame là gì? Điều gì sẽ xảy ra nếu ta quên thêm chỉ thị dataFrame.show()? Ba bước cần thiết để thêm một đối tượng nút lệnh vào một khung là gì? Kiểu của biểu thức Integer.valueOf(“1999”) là gì? Nếu nó trả về một giá trị kiểu Integer, làm thế nào để chuyển nó về kiểu int? Câu hỏi và bài tập Thiết kế và viết một chương trình ứng dụng để đọc một số hoá đơn, số lượng đặt hàng, và đơn giá (tất cả đều là số nguyên) rồi tính tổng giá tiền. Ứng dụng này sẽ viết ra số hoá đơn, số lượng, đơn giá, và tổng giá tiền trên một cửa sổ với các phần riêng biệt.
File đính kèm:
- Lập trình Java cơ bản - Chương 5_Điều khiển sự kiện nhập.ppt