Bài giảng Lập trình hướng đối tượng - Bài 12: Lập trình giao diện với Java - Nguyễn Mạnh Hùng
Nội dung
Tạo giao diện với các đối tượng cơ bản
Xử lí sự kiện giao diện
Các đối tượng multimedia
Java swing
Table và cách bố trí giao diện
Bài tập
Các loại khung chứa
Frame: khung cửa sổ
Panel: khung chứa các vùng trong cửa sổ
Dialog: cửa sổ con của một cửa sổ chính
Tạo giao diện với các đối tượng cơ bản
Xử lí sự kiện giao diện
Các đối tượng multimedia
Java swing
Table và cách bố trí giao diện
Bài tập
Các loại khung chứa
Frame: khung cửa sổ
Panel: khung chứa các vùng trong cửa sổ
Dialog: cửa sổ con của một cửa sổ chính
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng Lập trình hướng đối tượng - Bài 12: Lập trình giao diện với Java - Nguyễn Mạnh Hùng", để tải tài liệu gốc về máy hãy click vào nút Download ở trên.
File đính kèm:
- bai_giang_lap_trinh_huong_doi_tuong_bai_12_lap_trinh_giao_di.pdf
Nội dung text: Bài giảng Lập trình hướng đối tượng - Bài 12: Lập trình giao diện với Java - Nguyễn Mạnh Hùng
- TextArea import java.awt.*; public class TextAreaDemo{ public static void main(String[] args) { // Khai báo và khởi tạo frame có tiêu đề Frame myFrame = new Frame(“Frame has a panel!”); myFrame.setSize(300,150); // Định kích cỡ frame // Khai báo và khởi tạo textArea TextArea myTextArea = new TextArea(5, 40); String str=“The TextField’s columns is: ” + myTextField.getColumns()+ “The TextArea’s size is: ” + myTextArea.getRows() + “*” + myTextArea.getColumns(); myTextArea.setText(str); // Thiết lập nội dung myFrame.add(myTextArea); // Gắn vào frame myFrame.setVisible(true); // Hiển thị frame } } 11
- Button import java.awt.*; public class ButtonDemo{ public static void main(String[] args) { // Khai báo và khởi tạo frame có tiêu đề Frame myFrame = new Frame(“Frame has a button!”); myFrame.setSize(300,150); // Định kích cỡ frame // Khai báo và khởi tạo button Button myButton = new Button(“Click!”); myFrame.add(myButton); // Gắn vào frame myFrame.setVisible(true); // Hiển thị frame } } 12
- Các sự kiện (event) cơ bản ActionEvent: Xuất hiện khi một nút bị click vào, một danh sách (list) được chọn, một menu được chọn. ComponentEvent: Xuất hiện khi một component bị thay đổi kích cỡ, vị trí, trạng thái. FocusEvent: Xuất hiện khi một component có hoặc mất focus. ItemEvent: Xuất hiện khi một menu item được chọn hoặc bỏ, khi checkbox hoặc list item được click vào. WindowEvent: Xuất hiện khi một của sổ được mở ra, kích hoạt, đóng lại hoặc thoát ra. TextEvent: Xuất hiện khi giá trị văn bản của các đối tượng TextField và TextArea bị thay đổi. MouseEvent: Xuất hiện khi chuột được click, di chuyển qua, nhấn xuống và thả ra. KeyEvent: Xuất hiện khi có đầu vào từ bàn phím. 13
- Các giao tiếp bắt sự kiện ActionListener. ComponentListener FocusListener ItemListener WindowListener TextListener MouseListener và MouseMotionListener KeyListener 14
- Ví dụ bắt sự kiện (1) import java.awt.*; import java.awt.event.*; public class EventDemo extends Frame implements ActionListener{ Label lblKq; TextField txt1, txt2; Button btnCong; public EventDemo(){ super(“Event demo!”); this.setLayout(new GridLayout(1,4)); //Hiển thị 1 dòng, 4 cột txt1 = new TextField(); // Ô văn bản số thứ nhất this.add(txt1); txt2 = new TextField(); // Ô văn bản số thứ hai this.add(txt2); lblKq = new Label(); // Nhãn kết quả this.add(lblKq); // Nút nhấn btnCong = new Button(“Cong”); // Nút cộng btnCong.addActionListener(this); // Bắt sự kiện this.add(btnCong); 15
- Ví dụ bắt sự kiện (2) // Phương thức bắt sự kiện click vào nút đóng frame this.addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent e){ System.exit(0); } }); } /* Phương thức xử lí sự kiện nút được nhấn */ public void actionPerformed(ActionEvent ae){ float x = Float.parseFloat(txt1.getText()); float y = Float.parseFloat(txt2.getText()); float kq = 0; if(ae.getSource() == btnCong) // Cộng hai số kq = x + y; // Thay đổi nội dung kết quả lblKq.setText(String.valueOf(kq)); } } 16
- Bài tập Viết chương trình giao diện chát đơn giản: Giao diện gồm một ô textField để nhập dòng chát, một ô textArea để hiển thị nội dung chát, một nút nhấn send để gửi nội dung chát lên cửa sổ Mỗi khi click vào nút send, nội dung trong ô nhập chát sẽ được thêm vào một dòng mới ở cuối phần hiển thị nội dung chát. 17
- Các đối tượng multimedia
- Các đối tượng multimedia Ô đánh dấu (Checkbox) và Nút chọn (Radio button) Lựa chọn (Choice) Danh sách (List) Trình đơn (Menu) 19
- Checkbox/Radio button (1) import java.awt.*; import java.awt.event.*; public class RadioDemo extends Frame implements ItemListener{ Checkbox cbxRed, cbxBlue, cbxGreen; public RadioDemo(){ super(“Radio demo!”); this.setLayout(new GridLayout(3,1)); CheckboxGroup cbxg = new CheckboxGroup(); // Nhóm radio cbxRed = new Checkbox(“Red”, cbxg, true); // Nút red cbxRed.addItemListener(this); // Bắt sự kiện this.add(cbxRed); cbxBlue = new Checkbox(“Blue”, cbxg, false);// Nút blue cbxBlue.addItemListener(this); // Bắt sự kiện this.add(cbxBlue); cbxGreen = new Checkbox(“Green”, cbxg, false);// Nút green cbxGreen.addItemListener(this); // Bắt sự kiện this.add(cbxGreen); } 20
- Checkbox/Radio button (2) /* Phương thức xử lí sự kiện thay đổi trạng thái nút */ public void itemStateChange(ItemEvent ie){ if(ie.getStateChanged() == ItemEvent.SELECTED){ String item = (String)ie.getItem(); if(item.equals(“Red”)) // Đổi màu red this.setBackground(Color.red); if(item.equals(“Blue”)) // Đổi màu blue this.setBackground(Color.blue); if(item.equals(“Green”)) // Đổi màu green this.setBackground(Color.green); this.repaint(); // Vẽ lại màu nền } 21
- Choice public class ChoiceDemo extends Frame implements ItemListener{ Choice myChoice; public ChoiceDemo(){ super(“Choice demo!”); myChoice = new Choice(); // Khởi tạo myChoice.addItem(“Red”); // Thêm item red myChoice.addItem(“Blue”); // Thêm item blue myChoice.addItem(“Green”); // Thêm item green myChoice.addItemListener(this); // Bắt sự kiện this.add(myChoice); // Gắn vào frame } /* Phương thức xử lí sự kiện thay đổi trạng thái item */ public void itemStateChange(ItemEvent ie){ if(ie.getStateChanged() == ItemEvent.SELECTED){ String item = (String)ie.getItem(); if(item.equals(“Red”)) // Đổi màu red this.setBackground(Color.red); if(item.equals(“Blue”)) // Đổi màu blue this.setBackground(Color.blue); if(item.equals(“Green”)) // Đổi màu green this.setBackground(Color.green); this.repaint(); // Vẽ lại màu nền } 22 }
- List public class ListDemo extends Frame implements ItemListener{ List myList; Label lbl; public ListDemo(){ super(“List demo!”); myList = new List(1, true); myList.add(“White”); myList.add(“Red”); myList.add(“Orange”); myList.addItemListener(this); // Bắt sự kiện this.add(myList); // Gắn vào frame lbl = new Label(); // Khởi tạo nhãn this.add(lbl); // Gắn vào frame } /* Phương thức xử lí sự kiện thay đổi trạng thái item */ public void itemStateChange(ItemEvent ie){ if(ie.getStateChanged() == ItemEvent.SELECTED){ String kq = “Cac mau duoc chon:”; String[] items = myList.getSelectedItems(); for(int i=0; i<items.length; i++) kq += items[i] + “, ”; lbl.setText(kq); } 23 }
- Các loại trình đơn
- Các loại trình đơn Menubar: Thanh trình đơn Menu: Trình đơn đổ xuống PopupMenu: Trình đơn xuất hiện khi click chuột phải MenuItem: Các mục chọn của trình đơn. 25
- Ví dụ (1) import java.awt.*; import java.awt.event.*; public class MenuDemo extends Frame implements ActionListener, MouseListener{ Menubar myBar; Menu myMenu; PopupMenu myPopup; Label lbl; public MenuDemo(){ super(“Menu demo!”); myBar = new Menubar(); // Thanh tr.nh đơn this.setMenuBar(myBar); // Thiết lập menubar của frame myMenu = new Menu(“File”); // menu File myBar.add(myMenu); // Gắn menu vào thanh tr.nh đơn myMenu.addActionListener(this);// Bắt sự kiện myMenu.add(new MenuItem(“New”)); myMenu.add(new MenuItem(“Open”)); myMenu.addSeparator(); // Thêm dấu nhóm item myMenu.add(new MenuItem(“Save”)); myMenu.add(new MenuItem(“Save As”)); myMenu.addSeparator(); myMenu.add(new MenuItem(“Exit”)); 26
- Ví dụ (2) myPopup = new PopupMenu(“Options”);// Menu popup myPopup.addActionListener(this);// Bắt sự kiện myPopup(new MenuItem(“Cut”)); myPopup(new MenuItem(“Copy”)); myPopup(new MenuItem(“Paste”)); lbl = new Label(); // Khởi tạo nh.n this.add(lbl); // Gắn vào frame } /* Phương thức xử lí sự kiện */ public void actionPerformed(ActionEvent ae){ if(ae.getActionCommand().equals(“Exit”)){ System.exit(0); } lbl.setText(ae.getActionCommand()); } public void mouseClicked(MouseEvent me){ myPopup.show(this, me.getX(), me.getY());// Hiện menu popup } 27
- Các kĩ thuật tạo layout
- Các loại layout Cách trình bày theo dòng (Flow layout) Cách trình bày theo mảng (Grid layout) Cách trình bày theo Border (Border layout) Cách trình bày theo GridBag (GridBag layout) Cách trình bày tự do (Null layout) 29
- Flow layout import java.awt.*; public class FlowLayoutDemo{ public static void main(String[] args) { // Khai báo và khởi tạo frame có tiêu đề Frame myFrame = new Frame(“Frame has somes buttons!”); myFrame.setSize(300,150); // Định kích cỡ frame myFrame.setLayout(new FlowLayout( ));// Cách trình bày // Khai báo và khởi tạo button for(int i=0; i<10; i++) myFrame.add(new Button(“Click”+i));// Gắn vào frame myFrame.setVisible(true); // Hiển thị frame } } 30
- Grid layout import java.awt.*; public class GridLayoutDemo{ public static void main(String[] args) { // Khai báo và khởi tạo frame có tiêu đề Frame myFrame = new Frame(“Frame has somes buttons!”); myFrame.setSize(300,150); // Định kích cỡ frame myFrame.setLayout(new GridLayout(0,2));//Cách trình bày // Khai báo và khởi tạo button for(int i=0; i<10; i++) myFrame.add(new Button(“Click”+i));// Gắn vào frame myFrame.setVisible(true); // Hiển thị frame } } 31
- Border layout import java.awt.*; public class BorderLayoutDemo{ public static void main(String[] args) { // Khai báo và khởi tạo frame có tiêu đề Frame myFrame = new Frame(“Frame has somes buttons!”); myFrame.setSize(300,150); // Định kích cỡ frame myFrame.setLayout(new BorderLayout()); // Định cách trình bày // Khai báo và khởi tạo button myFrame.add(“West”, new Button(“West”)); // Gắn vào vùng west myFrame.add(“East”, new Button(“East”)); // Gắn vào vùng east myFrame.add(“North”, new Button(“North”)); // Gắn vào vùng north myFrame.add(“South”, new Button(“South”)); // Gắn vào vùng south myFrame.add(“Center”, new Button(“Center”));// Gắn vào vùng center myFrame.setVisible(true); // Hiển thị frame } } 32
- GridBag layout import java.awt.*; public class GridBagLayoutDemo{ public static void main(String[] args) { // Khai báo và khởi tạo frame có tiêu đề Frame myFrame = new Frame(“Frame has somes buttons!”); myFrame.setSize(300,150); // Định kích cỡ frame GridBagLayout layout = new GridBagLayout(); myFrame.setLayout(layout); // Định cách trình bày // Khai báo đối tượng ràng buộc GridBagConstraints cts = new GridBagConstraints(); // Button1: vị trí (1,1), kích thước (2,1) Button btn1 = new Button(“Click1”); cts.gridx = 1; cts.gridy = 1; cts.gridheight = 2; cts.gridwidth = 1; layout.setConstraints(btn1, cts); // Định ràng buộc myFrame.add(btn1); // Gắn vào frame myFrame.setVisible(true); // Hiển thị frame } } 33
- Null layout import java.awt.*; public class NullLayoutDemo{ public static void main(String[] args) { // Khai báo và khởi tạo frame có tiêu đề Frame myFrame = new Frame(“Frame has somes buttons!”); myFrame.setSize(300,150); // Định kích cỡ frame myFrame.setLayout(null); // Định cách tr.nh bày // Button1: vị trí (10,10), kích thước (20,10) Button btn1 = new Button(“Click1”); btn1.setSize(20, 10); btn1.setLocation(new Point(10, 10)); myFrame.add(btn1); // Gắn vào frame // Button2: vị trí (20,20), kích thước (10,20) Button btn2 = new Button(“Click2”); btn2.setBounds(20, 20, 10, 20); myFrame.add(btn2); // Gắn vào frame myFrame.setVisible(true); // Hiển thị frame } } 34
- Mở rộng các đối tượng thành swing JFC mở rộng các đối tượng cơ bản của java thành các lớp tương ứng, ngoài trừ việc có thêm chữ “J” ở đầu mỗi tên lớp: Button → JButton Label → JLabel TextField → JTextField TextArea → JTextArea Checkbox → JCheckbox List → JList Menu → JMenu 36
- Bài tập (1) Tạo giao diện ô số sudoku: Tạo ma trận 9*9 ô số của sudoku Mỗi ô số là một đối tượng đồ họa Các ô số đã có số theo đề bài thì không click vào được nữa Các ô số còn lại, khi click vào, sẽ hiện ra một cửa sổ con chứa một bảng các số từ 1-9. Người dùng click chọn vào số nào thì cửa sổ con đóng lại, và số được chọn sẽ điền vào ô số tương ứng trong cửa sổ chính Nếu ô số điền vào vi phạm qui luật hàng, luật cột, hoặc luật ô vuông con, nó sẽ bị đổi màu thành đỏ 37
- Bài tập (2) Tạo giao diện ô số sudoku: Tạo thanh menubar bao gồm 3 menu con: file, option và ranking Trong menu file, có các menu item: new game, save game, load game, back, quit. Khi click vào sẽ gọi các chức năng tương ứng Trong menu option, có các menu item: easy, medium, hard, hardest. Khi click vào sẽ tạo ra game mới với độ khó tương ứng Trong menu ranking, cũng có các menu item: easy, medium, hard, hardest. Khi click vào sẽ hiện ra topten ranking tương ứng 38
- Câu hỏi?