Bài giảng Lập trình Java - Bài 8: Tạo giao diện đồ họa

Các lớp nền tảng của Java (JFC) bao gồm các lớp

thành phần ñể xây dựng giao diện người dùng, ñược

chia thành các nhóm sau:

• Swing: các thành phần như nút bấm, hộp chọn, họp

soạn thảo, danh sách, cây, ñể phát triển giao diện

ñồ họa

• Look-and-Feel: Tùy biến theme

• Java 2D: ñể ñồ họa 2 chiều

• Internationalization: thay ñổi ngôn ngữ cho người

dùng sử dụng ngôn ngữ khác nhau

• Accessibility: cung các các công nghệ hỗ trợ truy

cập khác như ñọc màn hình,

pdf27 trang | Chuyên mục: Java | Chia sẻ: dkS00TYs | Lượt xem: 4002 | Lượt tải: 5download
Tóm tắt nội dung Bài giảng Lập trình Java - Bài 8: Tạo giao diện đồ họa, để xem tài liệu hoàn chỉnh bạn click vào nút "TẢI VỀ" ở trên
iao diện ñồ họa
JRadioButton
• Cần tạo nhóm cho các radio button ñể chỉ ñược chọn một
trong cả nhóm
• Tạo JGroupButton rồi ñặt thuộc tính groupButton cho
JRadioButton
• Các phương thức chính
• boolean isSelected(): Kiểm tra nút ñược tích hay không
• Sự kiện chính
• mouseClicked: kích chuột, thay ñổi trạng thái tích
32
Lê ðình Thanh, Tạo giao diện ñồ họa
JComboBox
• Cho chọn một phần tử trong danh sách thả xuống
• Các phương thức chính
• JComboBox(String []): Tạo ñối tượng combo với danh
sách các mục chọn trong String[]
• setSelectedIndex(i): Chọn mục i
• int getSelectedIndex(): Trả lại chỉ mục của mục ñược
chọn
• Object getSelectedValue(): Trả lại mục ñược chọn
• setEditable(boolean): Cho biên soạn hay không
• setModel(Model): ðặt model
• getModel(): Lấy model
• Sự kiện chính
• actionPerformed: thay ñổi mục chọn
33
Lê ðình Thanh, Tạo giao diện ñồ họa
JList
• Cho một hoặc nhiều phần tử trong danh sách
• Các phương thức chính
• JList(DefaultListModel): Tạo ñối tượng list với danh sách các mục chọn trong model
• setLayoutOrientation(JList.___): ðặt hướng sắp xếp danh sách
• setVisibleRowCount(int): ðặt số hàng nhìn thấy
• setSelectedIndex(i): Chọn mục I
• setSelectedIndices(int[]): Chọn các mục
• setSelectionInterval(index, size): Chọn các mục liên tục trong khoảng
• ensureIndexIsVisible(i): ðiều chỉnh hiển thị ñể mục I ñược nhìn thấy
• setSelectionMode(ListSelectionModel.MODE): ðặt kiểu chọn các mục
• int getSelectedIndex(): Trả về chỉ mục của mục ñược chọn
• int[] getSelectedIndices(); Trả về chỉ mục của các mục ñược chọn
• Object getSelectedValue(): Trả về giá trị của mục ñược chọn
• Object[] getSelectedValues(): Trả về giá trị của các mục ñược chọn
• ListModel:
• addElement(obj), add(index, obj): Thêm mục
• remove(index): Xóa mục
• Sự kiện chính
• actionPerformed: thay ñổi mục chọn
• mouseClicked: Kích chuột
34
Lê ðình Thanh, Tạo giao diện ñồ họa
JTable
• Trình bày dữ liệu theo bảng
• Nội dung của bảng ñược quản lý bởi TableModel. TableModel bao
gồm
• Một mảng String[] chứa tiêu ñề của các cột
• Một mảng Object[][] chứa các ñối tượng là nội dung của các ô. Số cột của
mảng hai chiều này phải bằng số cột (số phần tử của mảng chứa tiêu ñề)
• Các phương thức ñể lấy số hàng, số cột, tên cột, ñối tượng ở một ô, xác
ñịnh các ô có thể biên tập ñược
• ðể tạo bảng
• Tạo TableModel
• Tạo ñối tượng JTable sử dụng TableModel ñã tạo
• JTable tạo hàng tiêu ñề với số ô bằng số phần tử của mảng tiêu ñề và lần
lượt có các tiêu ñề của mảng tiêu ñề
• Với mỗi phần tử [i][j] trong mảng ñối tượng
• JTable sử dụng Renderer ñể hiển thị ñối tượng tại ô (i, j)
• JTable sử dụng Editor ñể cập nhật ñối tượng
35
Lê ðình Thanh, Tạo giao diện ñồ họa
TableModel và JTable
class MyTableModel extends AbstractTableModel {
private String[] a = {"First Name", "Last Name", "Sport", "# of Years", "Vegetarian",};
private Object[][] data2 = {
{"Kathy", "Smith", "Snowboarding", new Integer(5), new Boolean(false)},
{"John", "Doe", "Rowing", new Integer(3), new Boolean(true)},
{"Sue", "Black", "Knitting", new Integer(2), new Boolean(false)},
{"Jane", "White", “Speed reading", new Integer(20), new Boolean(true)},
{"Joe", "Brown", "Pool", new Integer(10), new Boolean(false)}
};
…
}
Renderer cho Integer Renderer cho BooleanRenderer cho String
Editor cho Integer Editor cho BooleanEditor cho String
36
Lê ðình Thanh, Tạo giao diện ñồ họa
Renderer và Editor mặc ñịnh
class MyTableModel extends AbstractTableModel {
…
public Class getColumnClass(int c) {
return getValueAt(0, c).getClass();
}
}
Renderer cho Integer Renderer cho BooleanRenderer cho String
Editor cho Integer Editor cho Boolean
JTable sẽ sử dụng các Renderer/Editor mặc ñịnh cho từng lớp
Editor cho String
37
Lê ðình Thanh, Tạo giao diện ñồ họa
ðịnh nghĩa và sử dụng Renderer
ðịnh nghĩa
DefaultTableCellRenderer renderer = new DefaultTableCellRenderer();
renderer.setBackground(Color.red);
hoặc
public class MyRenderer implements TableCellRenderer {}
MyRenderer renderer = new MyRenderer();
renderer.set___();
Sử dụng
cho từng cột
table.getColumnModel().getColumn(3).setCellRenderer(renderer);
hoặc cho cả bảng
table.setDefaultRenderer(Class.class, renderer);
38
Lê ðình Thanh, Tạo giao diện ñồ họa
Ví dụ sử dụng Renderer
DefaultTableCellRenderer renderer = new 
DefaultTableCellRenderer();
renderer.setForeground(Color.red);
table.getColumnModel().getColumn(1).setCellRenderer(re
nderer);
39
Lê ðình Thanh, Tạo giao diện ñồ họa
Ví dụ sử dụng Renderer
table.setDefaultRenderer(Color.class, new ColorRenderer());
public class ColorRenderer extends JLabel
implements TableCellRenderer {
public ColorRenderer() {
setOpaque(true); 
}
public Component getTableCellRendererComponent(
JTable table, Object obj,
boolean isSelected, boolean hasFocus,
int row, int column) {
setBackground((Color)obj); 
return this;
}
}
40
Lê ðình Thanh, Tạo giao diện ñồ họa
ðịnh nghĩa và sử dụng Editor
ðịnh nghĩa
DefaultTableCellEditor editor = new DefaultTableCellEditor(object);
hoặc
public class MyEditor extends AbstractCellEditor implements 
TableCellEditor {}
MyEditor editor = new MyEditor();
Sử dụng
cho từng cột
table.getColumnModel().getColumn(3).setCellEditor(editor);
hoặc cho cả bảng
table.setDefaultEditor(Class.class, editor);
41
Lê ðình Thanh, Tạo giao diện ñồ họa
Ví dụ sử dụng Editor
JComboBox comboBox = new JComboBox();
comboBox.addItem("1");
comboBox.addItem("2");
comboBox.addItem("3");
comboBox.addItem("4");
DefaultCellEditor editor = new DefaultCellEditor(comboBox);
table.getColumnModel().getColumn(1).setCellEditor(edito
r);
42
Lê ðình Thanh, Tạo giao diện ñồ họa
Ví dụ sử dụng Editor
table.setDefaultEditor(Color.class, new ColorEditor());
public class ColorEditor extends AbstractCellEditor
implements TableCellEditor, ActionListener {
…
public Object getCellEditorValue() {
return currentColor;
}
public Component getTableCellEditorComponent(JTable table,
Object value,
boolean isSelected,
int row,
int column) {
currentColor = (Color)value;
return button;
}
}
43
Lê ðình Thanh, Tạo giao diện ñồ họa
Cập nhật ô
class MyTableModel extends AbstractTableModel {
…
public boolean isCellEditable(int row, int col) {
…
}
} Biên tập ñược ñối tượng trong ô (row, col) hay không tùy thuộc vào
isCellEditable(int row, int col) trả về true hay false
44
Lê ðình Thanh, Tạo giao diện ñồ họa
Cập nhật ô
class MyTableModel extends AbstractTableModel {
…
public void setValueAt(Object value, int row, int col) {
data[row][col] = value;
fireTableCellUpdated(row, col); 
}
} Lưu cập nhật ñược nếu phương thức setValueAt ñược cài ñặt
45
Lê ðình Thanh, Tạo giao diện ñồ họa
Sắp xếp các hàng theo giá trị cột
table.setAutoCreateRowSorter(true);
46
Lê ðình Thanh, Tạo giao diện ñồ họa
Tạo bộ lọc
//Tạo bảng có sorter.
MyTableModel model = new MyTableModel();
sorter = new TableRowSorter(model);
table.setRowSorter(sorter);
//ðặt bộ lọc
RowFilter rf = null;
//If current expression doesn't parse, don't update.
try {
rf = RowFilter.regexFilter(“xâu con”, col);
} catch (java.util.regex.PatternSyntaxException e) {
return;
}
sorter.setRowFilter(rf);
47
Lê ðình Thanh, Tạo giao diện ñồ họa
ðặt chế ñộ chọn ô
Chế ñộ chọn table.setSelectionMode(mode);
Chọn một mục
ListSelectionModel.SINGLE_SELECTION
Một khoảng
ListSelectionModel.SINGLE_INTERVAL_SELECTION
Nhiều khoảng
ListSelectionModel.MULTIPLE_INTERVAL_SELECTION
Mục chọn
Cả hàng
table.setRowSelectionAllowed(true);
table.setColumnSelectionAllowed(false);
Cả cột
table.setRowSelectionAllowed(false);
table.setColumnSelectionAllowed(true);
Từng ô
table.setCellSelectionEnabled(true);
Ghi chú: Nếu chọn hành thì không ñược chọn cột. Chọn ô chỉ KHÔNG áp dụng
cho nhiều khoảng
48
Lê ðình Thanh, Tạo giao diện ñồ họa
Một số phương thức khác
class MyTableModel extends AbstractTableModel {
…
public int getColumnCount() {
return a.length;
}
public int getRowCount() {
return data2.length;
}
public String getColumnName(int col) {
return a[col];
}
public Object getValueAt(int row, int col) {
return data2[row][col];
}
}
49
Lê ðình Thanh, Tạo giao diện ñồ họa
JFrame và JDialog
• ðặt look and feel:
JFrame.setDefaultLookAndFeelDecorated(true);
JDialog.setDefaultLookAndFeelDecorated(true);
• Hiển thị hộp thoại
JOptionPane.showConfirmDialog(parent, text, title, 
JOptionPane._____OPTION );
Các hộp thoại hiển thị modal và trả về giá trị nút ñược bấm
50
Lê ðình Thanh, Tạo giao diện ñồ họa
JMenu
• JMenuBar – Thanh menu ñể chứa các menu
• JMenu – Thực ñơn (ñược ñặt trong JMenuBar)
• Các khoản thực ñơn (ñược ñặt trong JMenu)
• JMenuItem – Một khoản thường
• JRadioButtonMenuItem – Một khoản có nút radio
• JCheckBoxMenuItem – Một khoản có nút check
• Separator – Phân cách các khoản
• Memu chứa menu con
• Sự kiện trên các khoản thực ñơn
• actionPerformed
• Kiểm tra radio hay checkbox ñược chọn trên menu item
• bool isSelected()
51
Lê ðình Thanh, Tạo giao diện ñồ họa
JPopupMenu
• Menu ñược hiển thị khi kích chuột phải, còn gọi là menu 
ngữ cảnh
• Cần xử lý các sự kiện MousePressed và MouseReleased
trên ñối tượng hiển thị popup menu
private void mainPanelMousePressed(java.awt.event.MouseEvent evt) { 
maybeShowPopup(evt);
} 
private void mainPanelMouseReleased(java.awt.event.MouseEvent evt) { 
maybeShowPopup(evt);
} 
private void maybeShowPopup(java.awt.event.MouseEvent e) {
if (e.isPopupTrigger()) {
jPopupMenu1.show(e.getComponent(),
e.getX(), e.getY());
}
}
52
Lê ðình Thanh, Tạo giao diện ñồ họa
JPopupMenu
• Thêm actionPerformed cho các khoản của popup menu
menuItem.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jMenuItem1ActionPerformed(evt);
}
});
private void jMenuItem1ActionPerformed(java.awt.event.ActionEvent 
evt) { 
}
53
Lê ðình Thanh, Tạo giao diện ñồ họa
Tiếp theo
Lập trình socket

File đính kèm:

  • pdfBài giảng Lập trình Java - Bài 8_Tạo giao diện đồ họa.pdf
Tài liệu liên quan