Tải bản đầy đủ (.pdf) (15 trang)

Bài tập thực hành Java 1 - Module 8 - Graphic User Interface

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 (887.91 KB, 15 trang )

Bài tập thực hành Java 1 – Module 8
Trang 25/39
Module 8. Graphic User Interface
Nội dung kiến thức thực hành:
+ Bố trí các thành phần trong giao diện

+ Sử dụng một số đối tượng giao diện: JButton, JLabel, JTextField

+ Điều khiển sự kiện

Bài 1.
Viết lớp InstantMessageFrame, lớp này thừa kế lớp JFrame. Yêu cầu viết một constructor cho
lớp này, constructor có một tham số kiểu String biểu diễn tiêu đề của JFrame. Trong constructor yêu
cầu:
+ Tạo tiêu đề cho JFrame
+ Cho kích thước JFrame là 220, 450
+ Cho hiện JFrame
Viết hàm main trong lớp InstantMessageFrame, trong hàm main khởi tạo đối tượng
InstantMessageFrame với tiêu đề là “My IM Program”.
Biên dịch và chạy chương trình. Sau đó lần lượt thêm vào các lệnh sau và thực hiện lại:
- setDefaultCloseOperation(EXIT_ON_CLOSE)
 thật sự thoát chương trình khi người dùng đóng frame
- setResizable(false)
 không cho phép thay đổi kích thước frame.
- Dimension d = getToolkit().getScreenSize();
int wLocate = (int)(d.getWidth()/2-this.getWidth()/2);
int hLocate = (int)(d.getHeight()/2-this.getHeight()/2);
setLocation(wLocate, hLocate);
 cho frame xuất hiện giữa màn hình.
Bài 2.
Thiết kế giao diện như sau:



Yêu cầu cho chữ “Continue?” màu đỏ và hai nút có chứa hình.
Xử lý sự kiện: khi người dùng nhấn nút Cancel thì thoát khỏi chương trình.
HD: Muốn thoát chương trình viết lệnh:
System.exit(0);
Bài 3.
Thiết kế giao diện như sau:
Bài tập thực hành Java 1 – Module 8
Trang 26/39

Khi người dùng nhấn vào nút nào thì màu của panel sẽ được đổi tương ứng.
Bài 4.
Tương tự bài trên, thiết kế chương trình cho phép người dùng đổi kiểu chữ trong label. Giao diện
chứa 4 nút để thay đổi kiểu chữ là “Times New Roman”, “Arial”, “Courier New”, “Arial Black", mặc định
cho kích thước chữ trong label là 20.
Bài 5.
Thiết kế giao diện như sau:

Bài 6.
Thiết kế giao diện như hình:

Chương trình cho người dùng nhập số vào 2 ô JTextField đầu tiên, khi nhấn Enter vào một trong
hai ô đó thì chương trình tính thương của chúng và xuất kết quả ra ô RESULT.
Yêu cầu sử dụng cấu trúc try-catch để bắt lỗi nhập liệu.
HD:

Để chuyển chuỗi thành số nguyên, dùng hàm Integer.parseInt(String), hàm này sẽ phát
sinh ra ngoại lệ là
NumberFormatException nếu chuỗi truyền vào không phải chuỗi số.


Bài 7.
Viết chương trình tính bình phương của một số.
Bài tập thực hành Java 1 – Module 8
Trang 27/39
Thiết kế giao diện gồm một JTextField để nhập số, hai JButton để tính và đóng chương trình,
một JLabel để hiện kết quả. Khi người dùng nhấn nút hoặc nhấn Enter trên JTextField thì chương trình
xuất kết quả. Yêu cầu sử dụng cấu trúc try-catch để bắt lỗi nhập liệu.
Bài 8.
Thiết kế giao diện như sau:

Tham khảo cách làm sau:
import javax.swing.*;
import java.awt.event.*;
import java.awt.*;
public class frmLogin extends JFrame implements ActionListener {
private JTextField txtUserName;
private JPasswordField txtPSW;
private JButton btnLogin, btnCancel;
public frmLogin() {
super("Log on Program");

JPanel pTop = new JPanel(new GridLayout(1,1));
JPanel pCen = new JPanel(new BorderLayout());
JPanel pBot = new JPanel(new FlowLayout(FlowLayout.CENTER, 20, 5));

add(pTop, BorderLayout.NORTH);
add(pCen, BorderLayout.CENTER);
add(pBot, BorderLayout.SOUTH);

pTop.setBorder(BorderFactory.createLineBorder(Color.red));

pBot.setBorder(BorderFactory.createLineBorder(Color.red));

JLabel lblTitle = new JLabel("Logon", SwingConstants.CENTER);
lblTitle.setForeground(Color.red);
lblTitle.setFont(new Font("Vivaldi", Font.BOLD, 35));
pTop.add(lblTitle);

pBot.add(btnLogin = new JButton("Logon", new ImageIcon("Images/Logon.gif")));
pBot.add(btnCancel = new JButton("Exit", new ImageIcon("Images/Exit.gif")));

btnCancel.addActionListener(this);
btnLogin.addActionListener(this);

Bài tập thực hành Java 1 – Module 8
Trang 28/39
btnLogin.setMnemonic('L');
btnCancel.setMnemonic('x');

JPanel pM = new JPanel();
JPanel p1 = new JPanel( new FlowLayout(FlowLayout.RIGHT));
JPanel p2 = new JPanel( new FlowLayout(FlowLayout.RIGHT));

p1.add(new JLabel("User Name :", SwingConstants.RIGHT));
p1.add(txtUserName = new JTextField(20));
p2.add( new JLabel("Password :", SwingConstants.RIGHT));
p2.add(txtPSW = new JPasswordField(20));

Box b = Box.createVerticalBox();
b.add(Box.createVerticalStrut(30));
b.add(p1); b.add(p2);


pM.add(b);

pCen.add(pM, BorderLayout.CENTER);

JLabel lblIMG = new JLabel(new ImageIcon ("Images/AboutImage.gif"));
pCen.add(lblIMG, BorderLayout.WEST);
lblIMG.setBorder(BorderFactory.createLineBorder(Color.red));

setDefaultCloseOperation(DISPOSE_ON_CLOSE);
setSize(500, 250);
setResizable(false);

Dimension d = getToolkit().getScreenSize();
int wLocate = (int)(d.getWidth()/2-this.getWidth()/2);
int hLocate = (int)(d.getHeight()/2-this.getHeight()/2);
setLocation(wLocate, hLocate);
setVisible(true);
}
//==============================================================
public void actionPerformed(ActionEvent e) {
Object o=e.getSource();
if(o.equals(btnCancel))
{
exitProgram();
}
else if(o.equals(btnLogin))
{
login();
}

}
//==============================================================
private void login() {
String user, pass;
user = txtUserName.getText().trim();
pass = txtPSW.getText().trim();
if (user.equals("")) {
JOptionPane.showMessageDialog(this,"User name must be filled");
txtUserName.requestFocus();
return;
Bài tập thực hành Java 1 – Module 8
Trang 29/39
}
if (pass.equals("")) {
JOptionPane.showMessageDialog(this,"Password must be filled");
txtPSW.requestFocus();
return;
}
if (!user.equals("ABC")) {
JOptionPane.showMessageDialog(this,"User not existed.");
txtUserName.requestFocus();
return;
}
if (!pass.equals("123")) {
JOptionPane.showMessageDialog(this,"Password is not correct.");
txtPSW.requestFocus();
return;
}
//Neu dungpassword, username. Viec dang nhap thanh cong
//Hien thi giao dien chinh len

// (tu viet)

this.dispose(); //Dong giao dien login
}
//==============================================================
private void exitProgram() {
int selValue = JOptionPane.showConfirmDialog(this, "Are you sure to exit program?",
"Confirmation", JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE);
if(selValue == JOptionPane.YES_OPTION)
System.exit(0);
}
//==============================================================
public static void main (String[] args){new frmLogin();}
}

Bài tập thực hành Java 1 – Module 9
Trang 30/39
Module 9.
Nội dung kiến thức thực hành:
+ JCheckBox, JRadioButton
+ JComboBox, Jlist
+ Menu

Bài 1.
Thiết kế giao diện như sau:

Hoạt động: Chương trình cho phép thay đổi định dạng chữ trong ô JTextField khi nhấn chọn
checkbox tương ứng.
Bài 2.
Thiết kế giao diện như sau:


Hoạt động: Chương trình cho phép thay đổi định dạng của chữ trong ô JTextField khi nhấn chọn
radiobutton tương ứng.
Bài 3.
Thiết kế giao diện như sau:

JComboBox chứa sẵn một số tên file hình, khi chương trình hiện lên thì cho xuất hiện hình đầu
tiên lên JLabel.
Hoạt động: Khi người dùng chọn tên hình nào trong JComboBox thì chương trình sẽ hiện hình đó
ra label.
Bài 4.
Làm lại bài tập trên nhưng danh sách tên các file hình trong JComboBox được đọc từ file ra.
Bài tập thực hành Java 1 – Module 9
Trang 31/39
Bài 5.
Thiết kế giao diện như sau:

Hoạt động: Khi người dùng chọn một dòng trên JList thì dòng đó sẽ hiện ra trên JLabel bên trên.
Yêu cầu thiết lập:
+ Nội dung trong JLabel được canh giữa, tạo đường viền, đổi màu nền, đổi màu chữ cho JLabel.
+ Không cho phép chọn nhiều dòng trên JList.
+ Khi chương trình hiện lên thì dòng đầu tiên phải được chọn.
Bài 6.
Thiết kế giao diện như sau:

Chương trình cho phép người dùng sao chép các mục chọn trong JList bên trái qua JList bên phải
khi nhấn nút “Copy>>>”.
Dữ liệu trong các JList phải được đọc từ file ra và khi nhấn nút đóng chương trình thì chương
trình sẽ cho phép lưu dữ liệu thay đổi trong JList bên phải vào file.
Thêm vào chương trình menu để lưu, đóng, sao chép.

Bài 7.
Thiết kế giao diện như sau: giao diện gồm 2 JButton và 1 JList có thanh cuộn.

Hoạt động: Chương trình cho phép thêm và xóa một mục trong JList như sau:
+ Khi người dùng nhấn nút “Add Philosopher” thì chương trình hiện ra một cửa sổ cho nhập
tên như hình bên dưới, khi nhấn nút OK thì thêm vào JList, chú ý trường hợp ô nhập tên để trống.
Bài tập thực hành Java 1 – Module 9
Trang 32/39

+ Khi người dùng nhấn nút “Remove Selected Philosopher” thì chương trình sẽ xóa mục
đang chọn trong JList, trước khi xóa phải hỏi xác nhận lại, nếu không chọn mục nào để xóa thì phải
thông báo.
Thêm vào chương trình menu.
Bài 8.
Thiết kế giao diện như hình sau:

Yêu cầu xử lý:
+ Khi nhấn nút “Add Item” thì thêm nội dung ô nhập vào JList, cảnh báo người dùng trường
hợp để trống ô nhập hoặc nhập trùng dữ liệu đã có.
+ Khi nhấn nút “Remove Item” thì cho phép xóa các dòng đang chọn trong JList, trước khi xóa
phải hỏi xác nhận lại, cảnh báo người dùng trường hợp không chọn mà xóa.
+ Khi nhấn chọn một dòng trên JList thì hiện nội dung dòng đó lên ô nhập liệu.
+ Khi nhấn nút “Edit Item” thì cho phép sửa nội dung dòng đang chọn thành nội dung mới
trong ô nhập liệu.
Bài 9.
(i) Viết lớp HinhChuNhat để tính chu vi và diện tích, trong đó có hàm toString() trả về chuỗi chứa
các thông tin là chiều dài, chiều rộng, chu vi, diện tích (mỗi cột cách nhau bởi các khoảng
trắng).
(ii) Thiết kế giao diện như hình sau:
Bài tập thực hành Java 1 – Module 9

Trang 33/39

Yêu cầu xử lý:
+ Nút “Tính”: xuất kết quả tính chu vi và diện tích, chú ý phải thông báo lỗi khi:
- Không nhập đủ dữ liệu.
- Dữ liệu nhập không phải là số.
- Dữ liệu nhập là số âm.
+ Nút “Thêm”: thêm một dòng vào JList với các thông tin như hình. Kiểm tra dữ liệu như nút Tính.
+ Nút “Xóa”: xóa một dòng đang chọn trên JList, yêu cầu chọn trước khi xóa và hỏi xác nhận trước
khi xóa.
+ Khi chọn 1 dòng trên JList thì hiện thông tin dòng đó lên các ô nhập liệu (xem hình).
Bài 10.
(i) Viết lớp ChiPhi với yêu cầu:
+ Thuộc tính: loại phí (String), tiền (double).
+ Viết các hàm khởi tạo.
+ Viết các hàm get/set.
+ Hàm toString(): trả về chuỗi chứa 2 thông tin là loại phí và tiền.
(ii) Thiết kế giao diện như hình dưới đây:
Bài tập thực hành Java 1 – Module 9
Trang 34/39

Yêu cầu xử lý sử dụng lớp ChiPhi:
+ Nút “Thêm”: thêm một dòng vào JList bên dưới với 2 thông tin tương ứng là Loại phí và Tiền
(xem hình). Chú ý không được thêm khi:
- Không nhập đủ dữ liệu.
- Ô nhập tiền không phải số.
- Ô nhập tiền là số âm.
+ Nút “Xóa”: xóa một dòng đang chọn trên JList, yêu cầu chọn trước khi xóa và hỏi xác nhận trước
khi xóa.
+ Nút “Báo cáo”: xuất ra tổng chi phí.

+ Khi chọn 1 dòng trên JList thì hiện thông tin dòng đó lên các ô nhập liệu.
+ Nút “Thoát”: đóng chương trình.

Bài tập thực hành Java 1 – Module 10
Trang 35/39
Module 10.
Nội dung kiến thức thực hành:
+ JSlider
+ JSplitPane
+ JTable
+ JTree

Bài 1.
Viết chương trình đổi màu panel dùng JSlider như hình:

Bài 2.
Thiết kế giao diện như hình bên dưới:

+ Khi người dùng nhấn nút “Add Philosopher” thì chương trình lần lượt hiện ra các cửa sổ cho
nhập vào First Name, Last Name và Years, sau đó đưa các thông tin này lên JTable
+ Khi người dùng nhấn nút “Remove Selected Philosopher” thì chương trình sẽ xóa mục
đang chọn trong JTable, nếu không chọn mục nào để xóa thì phải thông báo, trước khi xóa phải hỏi xác
nhận lại.
Bài tập thực hành Java 1 – Module 10
Trang 36/39
Bài 3.
i. Viết lớp NhanVien với các yêu cầu sau:
Thuộc tính: mã nhân viên (String), phân xưởng (String), số sản phẩm (int).
Các hàm khởi tạo.
Các hàm get/set.

Hàm getChuan(): trả về giá trị 300 nếu là phân xưởng A, còn lại trả về 500.
(chỉ có các phân xưởng là A, B, C, D).
Hàm VuotChuan(): trả về
true
khi số sản phẩm vượt chuẩn (chuẩn tùy theo phân xưởng),
ngược lại trả về
false.

Hàm TinhLuong(): trả về lương của nhân viên, lương = số sản phẩm * đơn giá, nếu số sản
phẩm vượt chuẩn thì phần vượt được tính đơn giá là 30000, còn lại tính đơn giá là 20000.
Hàm toString(): trả về mã nhân viên.
ii. Thiết kế giao diện như hình bên dưới
Giao diện cho nhập mã nhân viên, số sản phẩm, chọn phân xưởng. Yêu cầu ô Tiền lương được
định dạng như hình.

Yêu cầu xử lý:
+ Khi người dùng chọn phân xưởng nào trên combobox thì hiện Số sản phẩm chuẩn tương ứng.
+ Nút “Tính lương”: xuất ra lương của nhân viên đang nhập (xem hình). Yêu cầu kiểm tra dữ
liệu nhập.
+ Nút “Thêm”: thêm nhân viên đang nhập vào JTable với các cột như hình. Chú ý không được
thêm khi:
- Không nhập đủ dữ liệu.
- Số sản phẩm không phải là số.
Bài tập thực hành Java 1 – Module 10
Trang 37/39
- Trùng mã nhân viên.
+ Nút “Xóa”: xóa một nhân viên đang chọn trên JTable. Chú ý phải hỏi trước khi xóa và không
được xóa khi chưa chọn dòng nào.
+ Khi chọn 1 dòng trên JTable thì hiện thông tin nhân viên đó lên các ô nhập liệu (xem hình).
+ Khi người dùng nhấn nút “Sửa” thì chương trình sửa thông tin của nhân viên đang chọn vào

JTable. Chú ý không được sửa khi:
- Không có đủ dữ liệu.
- Số SP không phải là số.
- Trùng mã nhân viên.
Bài 4.
(i) Viết lớp SinhVien với yêu cầu sau:
Thuộc tính: mã sinh viên (String), họ tên (String), mã lớp (String), điểm môn 1 (double), điểm
môn 2 (double).
Các hàm khởi tạo.
Các hàm get/set.
Hàm DiemTrungBinh(): trả về điểm trung bình của 2 môn học.
Hàm KetQua(): trả về “Đậu” khi điểm trung bình >=5, ngược lại là “Rớt”.
Hàm toString(): trả về mã sinh viên.
(ii) Thiết kế giao diện như hình bên dưới
Giao diện cho nhập mã sinh viên, họ tên, chọn mã lớp, nhập điểm môn 1, môn 2.

Yêu cầu xử lý:
+ Nút “Kết quả”: xuất ra điểm trung bình và kết quả của sinh viên đang nhập (xem hình). Chú ý
ô nhập Điểm môn 1 và môn 2 phải là số.
+ Nút “Thêm”: thêm một sinh viên vào table với các cột như hình. Chú ý không được thêm khi:
- Không nhập đủ dữ liệu.
- Điểm môn 1 và môn 2 không phải là số.
Bài tập thực hành Java 1 – Module 10
Trang 38/39
- Trùng mã sinh viên.
+ Nút “Xóa”: xóa một sinh viên đang chọn trên table. Chú ý phải hỏi trước khi xóa và không
được xóa khi chưa chọn dòng nào.
+ Khi chọn 1 dòng trên table thì hiện thông tin sinh viên đó lên các ô nhập liệu (xem hình).
Bài 5.
Thiết kế giao diện và thực hiện như hình bên dưới:


Chương trình cho phép thêm 1 nút con hoặc nút anh em của nút đang chọn khi người dùng nhấn
nút “Add Child” hoặc “Add Sibling”, nút “Delete” sẽ xóa nút đang chọn.
Bài 6.
(i) Viết lớp SinhVien với yêu cầu sau:
Thuộc tính: mã sinh viên (String), họ tên (String), giới tính (boolean), mã lớp (String).
Các hàm khởi tạo.
Các hàm get/set.
Hàm toString(): trả về chuỗi thông tin gồm: mã sinh viên – họ tên – giới tính.
(ii) Thiết kế giao diện như hình bên dưới:

Bài tập thực hành Java 1 – Module 10
Trang 39/39
Yêu cầu giao diện: Trên JTree có sẵn nút gốc “DS lop” và các nút con là các mã lớp: NCTH2A,
NCTH2B, NCTH2C, NCTH2K.
Yêu cầu xử lý:
+ Nút “Thêm”: thêm một sinh viên vào lớp đang chọn trên JTree (xem hình). Chú ý không được
thêm khi:
- Không nhập đủ dữ liệu.
- Không chọn mã lớp trên JTree.
- Trùng mã sinh viên.
+ Nút “Xóa”: xóa sinh viên đang chọn trên JTree. Chú ý phải hỏi trước khi xóa và không được
xóa khi:
- Không chọn nút muốn xóa.
- Chọn vào nút gốc hoặc nút mã lớp.
+ Khi chọn nút sinh viên thì hiện thông tin sinh viên đó lên các ô nhập liệu (xem hình).

×