JCheckBox Lớp JCheckBox là một trình triển khai của một checkbox, là một item mà có thể được lựa chọn selected hoặc không được lựa chọn unselected,.. Minh họa JCheckbox Khai báo cho lớp
Trang 1BÀI 4: LẬP TRÌNH GIAO DIỆN VỚI SWING NÂNG CAO
Học xong bài này người học sẽ:
- Tiếp tục phát triển tổ chức một giao diện người dùng đồ họa với các control khác
- Lập trình tùy biến các đối tượng GUI dạng danh sách như: JCheckBox, JRadio, JComboBox, Jlist
- Các control nâng cao khác: JTable, JColorChoose, JTabedPane, JSlider
- Thiết kế Menu: MenuBar, Menu, MenuItem, PopupMenu, Toolbar
- Thiết kế giao diện người dùng với các control nâng cao trên công cụ trực quan NetBeans IDE
- Kỹ năng tự tìm hiểu và sử dụng các GUI component khác có sẵn trong thư viện
4.1 CÁC CONTROL DANH SÁCH
4.1.1 JCheckBox
Lớp JCheckBox là một trình triển khai của một checkbox, là một item mà có thể được lựa chọn (selected) hoặc không được lựa chọn (unselected), Người dùng có thể chọn cùng lúc nhiều lựa chọn
Hình 4.1 Minh họa JCheckbox Khai báo cho lớp:
public class JCheckBox extends JToggleButton implements Accessible
Các constructor của lớp JcheckBox:
- JCheckBox(): Tạo một unselected checkbox ban đầu không có text và icon
- JCheckBox(Action a): Tạo một checkbox, với các thuộc tính được lấy từ Action
- JCheckBox(Icon icon): Tạo một unselected checkbox với một icon
Trang 2- JCheckBox(Icon icon, boolean selected): Tạo một checkbox với một icon và xác định rằng ban đầu nó là selected hoặc không
- JCheckBox(String text): Tạo một unselected checkbox ban đầu với text
- JCheckBox(String text, boolean selected): Tạo một checkbox với text và xác định rằng ban đầu nó là selected hoặc không
- JCheckBox(String text, Icon icon): Tạo một unselected checkbox ban đầu với text và icon đã cho
- JCheckBox(String text, Icon icon, boolean selected): Tạo một checkbox với text và icon, và xác định rằng ban đầu nó là selected hoặc không
Các phương thức quan trọng của JcheckBox là:
boolean isSelected() Trả về true nếu JCheckBox đang được chọn và
ngược lại setSelected(boolean state) Thiết lập chọn hoặc bỏ chọn
getAccessibleContext() Lấy AccessibleContext được liên kết với JCheckBox isBorderPaintedFlat() Lấy giá trị của thuộc tính borderPaintedFlat
paramString() Trả về một biểu diễn chuỗi của JCheckBox này
updateUI() Phục hồi thuộc tính UI về một giá trị từ L&F hiện tại
Bảng 4.1: Các phương thức của JcheckBox
Chương trình ví dụ về lớp JCheckBox:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class JCheckboxDemo {
private JFrame mainFrame;
private JLabel headerLabel;
private JLabel statusLabel;
private JPanel controlPanel;
public JCheckboxDemo(){
prepareGUI();
}
public static void main(String[] args){
JCheckboxDemo swingControlDemo = new JCheckboxDemo();
swingControlDemo.showCheckBoxDemo();
}
private void prepareGUI(){
mainFrame = new JFrame("Vi du JCheckbox");
mainFrame.setSize(400,200);
mainFrame.setLayout(new GridLayout(3, 1));
Trang 3headerLabel = new JLabel("", JLabel.CENTER);
statusLabel = new JLabel("",JLabel.CENTER);
private void showCheckBoxDemo(){
headerLabel.setText("Control in action: CheckBox");
final JCheckBox chkApple = new JCheckBox("Apple");
final JCheckBox chkMango = new JCheckBox("Mango");
final JCheckBox chkPeer = new JCheckBox("Peer");
public void itemStateChanged(ItemEvent e) {
statusLabel.setText("Apple Checkbox: " + (e.getStateChange()==1?
"checked":"unchecked")); }
});
chkMango.addItemListener(new ItemListener() {
public void itemStateChanged(ItemEvent e) {
statusLabel.setText("Mango Checkbox: " + (e.getStateChange()==1?
"checked":"unchecked")); }
});
chkPeer.addItemListener(new ItemListener() {
public void itemStateChanged(ItemEvent e) {
statusLabel.setText("Peer Checkbox: " + (e.getStateChange()==1?
"checked":"unchecked")); }
Trang 4Kết quả:
Hình 4.2 Kết quả minh họa JCheckbox
Tạo JCheckbox trong NetBeans:
Hình 4.3 Màn hình thiết kế Jcheckbox trên Netbeans
4.1.2 JRadioButton
Lớp JRadioButton là một trình triển khai của một radio button, một item mà có thể được lựa chọn hoặc không, tại một thời điểm chỉ cho phép chọn một
Khi tạo nhiều JRadioButton, chúng ta phải kết hợp với Button Group để ràng buộc
thao tác chọn của người dùng (tại một thời điểm chỉ có một JRadioButton được chọn)
Cú pháp khai báo cho lớp javax.swing.JRadioButton:
public class JradioButton extends JtoggleButton implements Accessible
Các constructor được sử dụng phổ biến của lớp JRadioButton:
- JRadioButton(): Tạo một unselected radiobutton không có text
- JRadioButton(String s): Tạo một unselected radiobutton với text đã cho
- JRadioButton(String s, boolean selected): Tạo một radiobutton với text đã cho
và trạng thái là selected
Các phương thức của lớp JradioButton
getAccessibleContext() Lấy AccessibleContext được liên kết với
Trang 5JRadioButton getUIClassID() Trả về tên của lớp L&F mà truyền thành phần này
paramString() Trả về biểu diễn chuỗi của JRadioButton này
updateUI() Phục hồi thuộc tính UI về một giá trị từ L&F hiện tại
Bảng 4.2: Các phương thức của JRadioButton Chương trình ví dụ về lớp JRadioButton
import javax.swing.*;
public class JRadioButtonDemo {
JFrame f;
JRadioButtonDemo(){
f=new JFrame("Vi du JRadioButton Demo");
JRadioButton r1=new JRadioButton("A) Male");
JRadioButton r2=new JRadioButton("B) FeMale");
Hình 4.3 Kết quả minh họa JRadioButton
Tạo JRadioButton trong NetBeans:
Trang 6Hình 4.4 Màn hình thiết kế JRadioButton trên Netbeans
4.1.3 RadioButtonGroup
Lớp ButtonGroup có thể được sử dụng để nhóm nhiều lớp lại với nhau, để tại một thời
điểm, chỉ có một nút được lựa chọn Ví dụ:
Trang 7Hình 4.5 Kết quả minh họa JRadioButton
Gắn JRadioButton vào Button Group:
Hình 4.6: Minh họa gắn Button Group
Cú pháp khai báo cho lớp javax.swing.JComboBox là:
public class JComboBox extends JComponent
implements ItemSelectable, ListDataListener, ActionListener, Accessible Các constructor của lớp JcomboBox:
- JComboBox(): Tạo một JComboBox với data model mặc định
Trang 8- JComboBox(Object[] items): Tạo một JComboBox mà chứa các phần tử trong mảng đã cho
- JComboBox(Vector<?> items): Tạo một JComboBox mà chứa các phần tử trong Vector đã cho
Các phương thức của lớp JcomboBox:
addItem(Object anObject) Thêm một item tới list
removeItem(Object anObject) Để xóa một item từ list
removeAllItems() Để xóa tất cả item từ list
setEditable(boolean b) Xác định xem có hay không JComboBox là
editable
addActionListener(ActionListener a) Để thêm ActionListener
addItemListener(ItemListener i) Để thêm ItemListener
Bảng 4.3: Các phương thức của JComboBox Chương trình minh họa lớp JcomboBox:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class JComboBoxDemo {
private JFrame mainFrame;
private JLabel headerLabel;
private JLabel statusLabel;
private JPanel controlPanel;
public JComboBoxDemo(){
prepareGUI();
}
public static void main(String[] args){
JComboBoxDemo swingControlDemo = new JComboBoxDemo();
swingControlDemo.showComboboxDemo();
}
private void prepareGUI(){
mainFrame = new JFrame("JComboBox Demo");
headerLabel = new JLabel("", JLabel.CENTER);
statusLabel = new JLabel("",JLabel.CENTER);
Trang 9private void showComboboxDemo(){
headerLabel.setText("Control in action: JComboBox");
final DefaultComboBoxModel fruitsName = new DefaultComboBoxModel(); fruitsName.addElement("Apple");
JScrollPane fruitListScrollPane = new JScrollPane(fruitCombo);
JButton showButton = new JButton("Show");
Trang 10Tạo JCombobox trong NetBeans:
Hình 4.8: Minh họa thiết kế JCombobox trên NetBeans
Kết quả thu được sau khi chạy ứng dụng:
Hình 4.9: Kết quả thiết kế JButton
4.1.5 Jlist
JList là một control cho phép chứa nhiều item, các item có thể được hiển thị thành một hoặc nhiều cột Người sử dụng có thể chọn một hoặc nhiều item trong JList (Single-selection vs multiple-selection) Một ListModel duy trì các nội dung của list
Hình 4.10: Minh họa JList
Trang 11Cú pháp khai báo của lớp javax.swing.JList là:
public class Jlist extends Jcomponent implements Scrollable, Accessible
Các constructor của lớp JList :
- JList(): Xây dựng một JList với một model là empty, read-only
- JList(ListModel dataModel): Xây dựng một JList, hiển thị các phần tử từ model
- JList(Object[] listData): Xây dựng một JList mà hiển thị các phần tử trong mảng
- JList(Vector<?> listData): Xây dựng một JList mà hiển thị các phần tử trong
Vector
Các phương thức của lớp JList :
Bảng 4.4: Các phương thức của JList Chương trình ví dụ lớp jlist
import java.awt.*;
ensureIndexIsVisible(int index) Cuộn danh sách bên trong một viewport
getSelectedValue() Lấy giá trị mục được chọn của JList
getAccessibleContext() Lấy AccessibleContext được liên kết với JList getFirstVisibleIndex() Trả về chỉ mục nhỏ nhất của list
getLastVisibleIndex() Trả về chỉ mục lớn nhất của list
getPreferredScrollableViewportSize() Tính toán kích cỡ của viewport cần để hiển thị removeListSelectionListener
(ListSelectionListener listener) Xóa một selection listener từ list này
setDragEnabled(boolean b) Tắt hoặc bật bộ xử lý hoạt động drag mặc định setDropMode(DropMode dropMode) Thiết lập drop mode cho thành phần này
setFixedCellHeight(int height) Thiết lập một giá trị cố định để được sử dụng
cho chiều cao của mỗi ô trong list setLayoutOrientation
(int layoutOrientation)
Định nghĩa cách các ô trong list được bố trí
setModel(ListModel model) Thiết lập model biểu diễn các nội dung hoặc
"value" của list setSelectedIndex(int index) Lựa chọn một ô đơn
setSelectedIndices(int[] indices) Thay đổi selection thành là tập hợp các chỉ
mục được xác định bởi mảng đã cho setSelectionBackground
Trang 12import java.awt.event.*;
import javax.swing.*;
public class JListDemo{
private JFrame mainFrame;
private JLabel headerLabel;
private JLabel statusLabel;
private JPanel controlPanel;
public JListDemo(){
prepareGUI();
}
public static void main(String[] args){
JListDemo swingControlDemo = new JListDemo();
swingControlDemo.showListDemo();
}
private void prepareGUI(){
mainFrame = new JFrame("JList Demo");
headerLabel = new JLabel("", JLabel.CENTER);
statusLabel = new JLabel("",JLabel.CENTER);
private void showListDemo(){
headerLabel.setText("Control in action: JList");
final DefaultListModel fruitsName = new DefaultListModel();
Trang 13fruitList.setVisibleRowCount(3);
JScrollPane fruitListScrollPane = new JScrollPane(fruitList);
JButton showButton = new JButton("Show");
Hình 4.11: Kết quả minh họa JList
Thiết kế Jlist trên NetBeans:
Hình 4.12: Minh họa thiết kế JList trên NetBeans
Trang 14Đăng ký sự kiện cho Jlist:
Chuột phải vào JList -> chọn Events -> chọn ListSelection -> chọn valueChanged
Hình 4.13: Minh họa đăng ký sự kiện cho JList trên NetBeans Lấy dữ liệu của dòng được chọn trong JList
String data = (String)jList2.getSelectedValue();
Trong đó jList2 là tên của JList, data là biến chứa dữ liệu của dòng được chọn
4.2 CÁC THÀNH PHẦN SWING NÂNG CAO
4.2.1 JTable
JTable là một thành phần cho phép hiển thị dữ liệu theo dòng (row) và cột (column) Giao nhau giữa dòng và cột được gọi là ô (cell) và đây là nơi hiển thị dữ liệu Một JTable có
2 phần là Column Header (tiêu đề) và Data (dữ liệu)
Các constructor của lớp JTable :
- JTable(): Tạo một bảng với các ô trống
- JTable(Object[][] rows, Object[] columns): Tạo một bảng với dữ liệu đã cho
Chương trình minh họa JTable:
import javax.swing.*;
public class JTableDemo {
JFrame f;
JTableDemo(){
f=new JFrame("JTable Demo");
String data[][]={ {"101","Amit","670000"}, {"102","Jai","780000"},
{"101","Sachin","700000"}}; String column[]={"ID","NAME","SALARY"};
JTable jt=new JTable(data,column);
Trang 15Hình 4.14: Kết quả minh họa đăng ký JTable
Tạo JTable sử dụng NetBeans
Hình 4.15: Minh họa thiết kế JTable trên NetBeans
Đăng ký sự kiện cho JTable:
Ckick phải vào JTable -> chọn Events -> chọn Mouse -> chọn mouseClicked
Trang 16Hình 4.16: Minh họa đăng ký sự kiện JTable trên NetBeans
Lấy dữ liệu của ô được chọn trong JTable
int col = jTable2.getSelectedColumn();
int row = jTable2.getSelectedRow();
String data = (String)jTable2.getValueAt(row, col);
Trong đó jTable2 là tên của JTable, data là biến chứa dữ liệu của ô được chọn
4.2.2 JColorChooser
JColorChooser được sử dụng để hiển thị hộp thoại màu và cho phép người dùng lựa chọn một màu trong hộp thoại đó Có 2 cách để tạo JColorChooser trong NetBeans đó là sử
dụng chế độ Design và kéo JColorChooser từ Swing Windows của Palette
Hai là sử dụng code để hiển thị JColorChooser khi người dùng click vào button hoặc textfield, …Lập trình viên sử dụng cách nào còn tuỳ thuộc vào yêu cầu cụ thể
Lớp JColorChooser có 3 constructor sau:
- JColorChooser(): Tạo một bảng chọn màu với một màu ban đầu là màu trắng
- JColorChooser(Color initialColor): Tạo một bảng chọn màu với màu khởi tạo đã cho
- JColorChooser(ColorSelectionModel model): Tạo một bảng chọn màu với ColorSelectionModel đã cho
Một số phương thức của lớp JColorChooser:
STT Phương thức & Mô tả
1 void addChooserPanel(AbstractColorChooserPanel panel) Thêm một bảng chọn màu tới ColorChooser
2 static JDialog createDialog(Component c, String title, boolean modal, JColorChooser chooserPane, ActionListener okListener, ActionListener cancelListener) Tạo và trả về một hộp thoại dialog chứa bảng ColorChooser cùng với các nút "OK",
Trang 17"Cancel", và "Reset"
3 AbstractColorChooserPanel removeChooserPanel(AbstractColorChooserPanel
panel) Xóa Color Panel đã cho
4 void setChooserPanels(AbstractColorChooserPanel[] panels) Xác định Color
Panels được sử dụng để chọn một giá trị màu
5 void setColor(Color color) Thiết lập màu hiện tại của Color Chooser tới màu
6 void setColor(int c) Thiết lập màu hiện tại của Color Chooser tới màu đã cho
7 void setColor(int r, int g, int b) Thiết lập màu hiện tại của Color Chooser tới màu RBG đã cho
8 void setDragEnabled(boolean b) Thiết lập thuộc tính dragEnabled, là true để kích hoạt bộ xử lý hoạt động drag tự động
9 void setPreviewPanel(JComponent preview) Thiết lập Prview Panel hiện tại
10 void setSelectionModel(ColorSelectionModel newModel) Thiết lập Model chứa
màu đã chọn
11 void setUI(ColorChooserUI ui) Thiết lập đối tượng L&F mà truyền đối tượng này
12 static Color showDialog(Component component, String title, Color initialColor)
Hiển thị một hộp thoại dialog
13 void updateUI() Thông báo từ UIManager rằng L&F đã thay đổi
Bảng 4.5: Các phương thức của JColorChooser
Cách 1: Sử dụng chế độ Design
Hình 4.17: Minh họa thiết kế JColorChooser trên NetBeans
Đăng ký sự kiện cho JColorChooser trên NetBeans:
- Bước 1: Cài đặt giao tiếp ChangeListener tại class có sử dụng JColorChooser
public class YourClassName extends implements ChangeListener
- Bước 2: Đăng ký sự kiện cho JColorChooser
Trang 18jColorChooser1.getSelectionModel().addChangeListener(this);
Trong đó jColorChooser1 là tên của JColorChooser
- Bước 3: Viết xử lý cho phương thức stateChanged (Đây là phương thức của giao tiếp ChangeListener)
@Override public void stateChanged(ChangeEvent e) {
//Lấy màu mà người dùng đã chọn từ JColorChooser Color c = jColorChooser1.getColor();
}
Cách 2: Viết code
//Tạo đối tượng JColorChooser
JColorChooser jcc = new JColorChooser();
//Hiển thị hộp thoại
//Color showDialog(Component component,String title, Color initialColor);
//Màu mà người dùng chọn được chứa trong biến c
Color c =jcc.showDialog(this, "Color dialog", Color.yellow);
Chương trình minh họa JColorChooser:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class JColorChooserDemo {
private JFrame mainFrame;
private JLabel headerLabel;
private JLabel statusLabel;
private JPanel controlPanel;
public JColorChooserDemo (){
prepareGUI();
}
public static void main(String[] args){
JColorChooserDemo swingControlDemo = new JColorChooserDemo (); swingControlDemo.showColorChooserDemo();
}
private void prepareGUI(){
mainFrame = new JFrame("JColorChooser Demo");