1. Trang chủ
  2. » Giáo án - Bài giảng

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

15 1,6K 13

Đ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 15
Dung lượng 887,91 KB

Nội dung

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ả

Trang 1

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:

Trang 2

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ố

Trang 3

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);

Trang 4

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;

Trang 5

}

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();}

}

Trang 6

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

Trang 7

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

Trang 8

+ 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:

Trang 9

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:

Trang 10

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

Trang 11

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

Trang 12

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ố

Trang 13

- 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ố

Trang 14

- 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:

Trang 15

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)

Ngày đăng: 13/05/2014, 10:48

TỪ KHÓA LIÊN QUAN

w