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,
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:
- Bài giảng Lập trình Java - Bài 8_Tạo giao diện đồ họa.pdf