Các thành phần cơ bản trong Swing (Bài 2)
Các thành phần cơ bản trong Swing sẽ trình bày và sử dụng các thành phần mà chúng tôi đã giới thiệu trong bài Giới thiệu về Swing (Bài 1).
Cc thành phần thành phần đó là JSlider, JProgressBar, JFormattedTextField, JOptionPane,…cũng được sử dụng nhiều trong quá trình thiết kế ứng dụng hỗ trợ giao diện đồ hoạ.
Các thành phần cơ bản trong Swing – JSlider
JSlider là một thành phần cho phép người dùng lựa chọn một giá trị số trong một phạm vi giới hạn bằng cách trượt thanh trượt.
Một số phương thức thường dùng của JSlider
Tên | Miêu tả |
int value = getValue(); | Lấy giá trị hiện tại |
setValue(int value); | Thiết lập giá trị hiện tại |
Đăng ký sự kiện cho JSlider
Các thành phần cơ bản trong Swing – JProgressBar
JProgressBar được sử dụng để hiển thị tiến trình xử lý bằng cách hiển thị tỷ lệ phần trăm hoàn thành. Thông thường thanh tiến trình được sử dụng trong màn hình splash để hiển thị trạng thái nạp dữ liệu của ứng dụng hoặc trong những xử lý đòi hỏi nhiều thời gian.
Tạo JProgressBar trong NetBeans
Tên | Miêu tả |
setMinimum(int n) | Thiết lập giá trị nhỏ nhất |
setMaximum(int n) | Thiết lập giá trị lớn nhất |
setValue(int n) | Thiết lập giá trị hiện hành |
int value = getValue(); | Lấy giá trị hiện hành |
setStringPainted(boolean b) | Thiết lập hiển thị số phần trăm hoàn thành |
Đăng ký sự kiện cho JProgressBar
Các thành phần cơ bản trong Swing – JFormattedTextField
Tương tự như JTextField ngoại trừ chỉ chấp nhận những ký tự theo định dạng đã thiết lập trước. Có nhiều định dạng khác nhau như số (numeric), ngày (date) và tiền tệ (currency)
JFormattedTextField được sử dụng để xác thực dữ liệu mà người dùng nhập vào mà không cần phải viết code để xử lý.
Tạo JFormattedTextField trong NetBeans
Tuỳ chỉnh định dạng (Customized Formatter)
Bên dưới là bảng mask characters
Mask character | Miêu tả |
---|---|
# | Một số bất kỳ |
U | Bất kỳ ký tự nào. Tất cả các ký tự được chuyển thành chữ hoa. |
L | Bất kỳ ký tự nào. Tất cả các ký tự được chuyển thành chữ thường. |
A | Một ký tự hoặc một số bất kỳ |
? | Bất kỳ ký tự nào |
* | Mọi thứ. |
Ví dụ chỉ cho phép người dùng nhập một số có 4 chữ số
Hình bên dưới là kết quả khi chạy ứng dụng
Các thành phần cơ bản trong Swing – JOptionPane
JOptionPane được sử dụng để hiển thị hộp thoại đến người dùng. Tuỳ theo mục đích sử dụng mà hộp thoại đó có thể là một trong các loại sau đây
Tên | Miêu tả |
MessageDialog | Hiển thị hộp thoại dạng thông báo |
ConfirmDialog | Hiển thị hộp thoại yêu cầu người dùng xác nhận (Yes/No) |
InputDialog | Hiển thị hộp thoại cho phép người dùng nhập thông tin |
OptionDiglog | Cho phép lập trình viên chỉnh sửa hộp thoại theo ý của mình. |
Ví dụ sử dụng JOptionPane
Xử lý mẫu – Xử lý sự kiện cho nút “Message Dialog”
JOptionPane.showMessageDialog(this, "Please input your name");
Xử lý mẫu – Xử lý sự kiện cho nút “Input Dialog”
String yourName = JOptionPane.showInputDialog("Your name is");
if(yourName != null) {
JOptionPane.showMessageDialog(this, "Your name is "+yourName);
}
Xử lý mẫu – Xử lý sự kiện cho nút “Confirm Dialog”
int ret = JOptionPane.showConfirmDialog(this, "Are you sure?"
, "Confirm", JOptionPane.YES_NO_OPTION
, JOptionPane.QUESTION_MESSAGE);
if (ret == JOptionPane.YES_OPTION) {
//Xử lý trường hợp người dùng chọn Yes
} else {
//Xử lý trường hợp người dùng chọn No
}
Xử lý mẫu – Xử lý sự kiện cho nút “Option Dialog”
int ret = JOptionPane.showOptionDialog(this,
"Do you want to print this document?", "Confirm"
,JOptionPane.YES_NO_OPTION
,JOptionPane.QUESTION_MESSAGE, null
,new String[] {"Đồng ý","Thoát"}, "Đồng ý");
if (ret == JOptionPane.YES_OPTION) {
//Xử lý trong trường hợp người dùng chọn "Đồng ý"
} else {
//Xử lý trong trường hợp người dùng chọn "Thoát"
}
Các thành phần cơ bản trong Swing – Bài tập thực hành.
Yêu cầu: Thiết kế giao diện và xử lý sự kiện cho các JSlider (JSlider cho Year, JSlider cho Month, JSlider cho Day)
Gợi ý:
Sử dụng chức năng Pre-Init Code và bổ sung đoạn code sau để xử lý hiển thị tháng dạng chuỗi (Jan, Feb, Mar, …..), trong đó sldMonth là tên của JSlider cho Month
String[] months = (new DateFormatSymbols()).getShortMonths();
Hashtable hashTable = new Hashtable(12);
for (int i = 0; i < 12; i++) {
hashTable.put(new Integer(i+1), new JLabel(months[i],JLabel.CENTER));
}
sldMonth.setLabelTable(hashTable);