Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 24 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
24
Dung lượng
1,29 MB
Nội dung
Nội dung chương Phá Phát triể triển subclass từ superclass thông qua kế thừ thừa Dùng từ khó khóa super gọi constructor phương thức superclass Chồ Chồng phương thứ thức subclass Lớp Object Đa hình thá thái, liên kết động, ng, lập trì trình tổng quát Ép kiểu đối tượng toán tử instanceof Dữ liệu phương thức protected Lớp Abstract Interface LẬP TRÌNH JAVA Chương 8: Kế thừa đa hình thái Inheritance & Polymorphism Bài giả giảng Lậ Lập trì trình Java - Chương 08 Superclass Subclass 8.2 Superclass Subclass (tiếp) Lập trì trình hướ hướng đối tượ tượng cho phé phép tạo nhữ ữ ng l p m i t c c l p t n nh Vd: Vd: lớp C1 đượ phá phát triể triển từ lớp C2: Lớp C1 đươc gọi subclass, extended class, derived class Lớp C2 đượ gọi superclass, superclass, parent class, base class Subclass thừ thừa kế từ superclass liệ liệu phương thứ thức thể truy nhậ nhập đượ được, thể thêm vào trườ trường liệ liệu phương thứ thức Bài giả giảng Lậ Lập trì trình Java - Chương 08 8.3 Circle Cylinder1 Bài giả giảng Lậ Lập trì trình Java - Chương 08 TestCylinder1 8.4 Sử dụng từ khóa super Gọi Superclass Contructor super dùng để thay cho superclass, tương tự this thay cho đối tượng gọi Dùng super để: super(), super(tham_số) Lệnh phải đặt dòng đ u tiên subclass constructor cách để gọi superclass constructor gọi contructor superclass gọi phương thức superclass public Cylinder() { public Cylinder() { super(); } } Bài gi✰ng Lậ Lập trì trình Java - Chương 08 8.5 Gọi Superclass Method Bài giả giảng Lậ Lập trì trình Java - Chương 08 8.6 Overriding Method super.method(tham_số) Vd: double findVolume() { return super.findArea() * length; } Đôi subclass c n phải thay đổi thực phương thức superclass → Chồng phương thức Vd: phương thức findArea lớp Circle tính diện tích hình tròn Phương thức nên chồng lớp Cylinder để tính diện tích bề mặt hình trụ Cylinder Bài giả giảng Lậ Lập trì trình Java - Chương 08 8.7 Bài giả giảng Lậ Lập trì trình Java - Chương 08 8.8 Chồng phương thức (tiếp) Lớp Object Để chồ chồng, ng, phương thứ thức xác đ nh subclass phả phải có signature kiể kiểu liệu trả với phương thức superclass Review: Các Overloading method có tên, tên, phả phải khác signature Một phương thứ thức chỉ thể đượ chồ chồng chỉ ể truy nhậ ậ p đượ ợ c → ể chồ th nh đư th ch ng private method Một static method thể đượ kế thừ thừa, thể đượ chồ chồng ng Bài gi ng Lậ Lập trì trình Java - Chương 08 8.9 Mọi lớp Java đượ thừ thừa kế từ lớp java.lang.Object Nếu kế thừ thừa đượ xác định lớp đượ tạo thì superclass chí lớp Object phương thứ thức lớp Object thườ thường đượ sử dụng: : ng public boolean equals(Object obj) obj) public int hashCode() hashCode() public String toString() toString() Bài giả giảng Lậ Lập trì trình Java - Chương 08 8.10 Phương thức equals Phương thức toString object1.equals(object2); Sự thự thực hiệ ngầ ngầm định: nh: public boolean equals(Object obj) obj) { return (this == obj); obj); } Đượ Được chồ chồng subclass để kiể kiểm tra đối tượ tượng riêng biệ biệt có nội dung hay không không Vd: Vd: str1.equals(str2) lớp String Lưu ý viế viết phương thứ thức chồ chồng: ng: Dùng equals(Object obj), obj), not equals(Circle obj) obj) Gọi obj.toString() obj.toString() trả trả chuỗ chuỗi biể biểu diễ diễn cho đối tượ ợ ng obj, , ngầ ầ m đ ị nh l classname@hashcode tư obj ng Bài giả giảng Lậ Lập trì trình Java - Chương 08 8.11 Cylinder myCyl = new Cylinder(5.0,2.0); System.out.println(myCyl.toString()); System.out.println(myCyl.toString()); → Cylinder@15037e5 Thườ Thường chồ chồng phương thứ thức toString để trả trả chuỗ chuỗi dễ hiể hiểu biể biểu diễ diễn đối tượ tượng ng Vd: Vd: public String toString() toString() { return "Cylinder length = " + length + " radius = " + getRadius(); getRadius(); } Bài giả giảng Lậ Lập trì trình Java - Chương 08 8.12 Đa hình thái - Polymorphism Xét ví dụ: Liên kết động - Dynamic binding TestPolymorphirm → Có thể thể gọi m với đối tượ tượng nào, vd: vd: new GraduateStudent(), new Student(), new Person(), new Object() Đa hình thái: Một đối tượng subclass sử dụng mã lệnh thiết kế để làm việ việc với đối tượ tượng superclass superclass Bài giả giảng Lậ Lập trì trình Java - Chương 08 8.13 Ở vd trước, lớp có thực phương thức toString riêng Việc thực phương thức đượ JVM xác định chạ chạy chương trình → Nối kết động ng obj instance lớp c1, c2, …, cn Khi obj gọi phương thứ thức p, JVM tìm thự thực hiệ p lớp theo thứ thứ tự c1, c2, …, cn đến tìm thấ thấy Bài giả giảng Lậ Lập trì trình Java - Chương 08 8.14 Lập trình tổng quát Ép kiểu đối tượng Đa hì hình thá thái cho phé phép cá phương thứ thức đượ sử dụng chung cho mộ dả dải rộ rộng cá tham số số đối tượ tượng → generic programming Trong lậ lập trì trình hướ hướng đố đối tượ tượng, nên lậ lập trì trình theo cá cách dù dùng chung: khai bá báo biế biến có có kiể kiểu superclass, nó thể chấ chấp nhậ nhận mộ giá giá trị trị bấ kỳ kiể kiểu subclass nà Tuy nhiên muố muốn vậ cầ cần ép kiể kiểu đố đối tượ tượng Thực gán đối tượng new Student() cho tham số kiểu Object, tương đương với lệnh: Bài giả giảng Lậ Lập trì trình Java - Chương 08 Object obj = new Student(); // ép kiểu ngầm Muốn ấn định obj (kiểu Object) đối tượng Student: Student std = (Student) obj; //ép kiểu rõ ràng Không dùng Student std = obj; 8.15 Bài giả giảng Lậ Lập trì trình Java - Chương 08 8.16 Ví dụ: Minh họa đa hình thái ép kiểu Toán tử instanceof Để ép kiểu đối tượng thành công, trước c n chắn đối tượng c n ép instance đối tượng → dùng toán tử instanceof /** Giả sử myObj khai báo kiểu Object */ /** Thực ép kiểu myObj instance Cylinder */ if (myObj instanceof Cylinder) { Cylinder myCyl = (Cylinder)myObj; System.out.println("The tich hinh tru la " + myCyl.findVolume(); … } Bài giả giảng Lậ Lập trì trình Java - Chương 08 Visibility Modifiers public protected (không dù dùng) private Bài giả giảng Lậ Lập trì trình Java - Chương 08 Mục tiêu: viết chương trình tạo đối tượng: circle cylinder Sau gọi phương thức displayObject để hiển th diện tích đối tượng circle, hiển th diện tích thể tích đối tượng cylinder TestPolymorphirmCasting 8.17 Visibility increase Bài giả giảng Lậ Lập trì trình Java - Chương 08 8.18 private protected modifiers Sử dụng private để ẩn hoà hoàn toàn thành ph n class (d d ữ liệ ệ u , phương thứ ứ c ), ( li th chúng truy nhập trực tiếp từ bên ngoà lớp Sử dụng protected phé phép thành ph n class truy nhập subclass package nào, class package từ khóa sử dụng cho thành ph n class, sử dụng cho class 8.19 Bài giả giảng Lậ Lập trì trình Java - Chương 08 8.20 public default modifiers Chú ý Sử dụng default modifier (no modifier) thì thành ph n class đượ truy nhậ nhập từ lớp package, thể từ package khác Sử dụng public cho phé phép thành ph n class thể đượ truy nhậ nhập từ lớp public default modifier thể đượ sử dụng cho thành ph n class, sử dụng cho class Bài giả giảng Lậ Lập trì trình Java - Chương 08 8.21 Abstract classes Nếu phương thứ thức superclass protected thay đổi phương thức chồng subclass thành public Nhưng phương thứ thức superclass public phương thức chồng subclass bắt buộc phải public Bài giả giảng Lậ Lập trì trình Java - Chương 08 8.22 Abstract methods Đôi superclass trừu tượng đến mức có instance Nó gọi abstract class Các abstract class có liệu phương thứ thức tương tự class khác Không thể thể dùng toá toán tử new để tạo instance abstract class Là phương thứ thức chỉ có ph n tiêu đề đề (header), không phầ phần thân phương thứ thức (body) Sự thự thực hiệ củ nó đượ cung cấ cấp bở cá subclass thông qua cá phương thứ thức chồ chồng Một class có chứa abstract method phải abstract class Ví dụ khai bá báo abstract method: public abstract double findArea(); Ví dụ header abstract class: public abstract class GeometricObject Bài giả giảng Lậ Lập trì trình Java - Chương 08 Ký pháp UML: Ký hiệu -, #, + sử dụng để biểu diễn tương ứng modifier private, protected, public Khi chồng phương thức: 8.23 Bài giả giảng Lậ Lập trì trình Java - Chương 08 8.24 Ví dụ Interface Mỗi lớp Java kế thừa trực tiếp từ superclass (với từ khóa extends) → đơn kế thừa Đôi ta cần nhận subclass từ vài class → đa kế thừa Có thể sử dụng interface Bài giả giảng Lậ Lập trì trình Java - Chương 08 8.25 Bài giả giảng Lậ Lập trì trình Java - Chương 08 8.26 Thực Interface Interface Interface cấu trú trúc giố giống class mà chỉ chứa phương thứ ứ c trừ u tượ ợ ng th tr tư ng modifier interface InterfaceName { /** khai báo */ /** method header */ } VD: // Interface so sánh đối tượ tượng, ng, đượ xác định java.lang package java.lang; java.lang; public interface Comparable { public abstract int compareTo(Object obj); obj); } Bài giả giảng Lậ Lập trì trình Java - Chương 08 ComparableObject extends Rectange and implements Comparable ComparableRectangle Max 8.27 TestMaxObject Bài giả giảng Lậ Lập trì trình Java - Chương 08 8.28 Interface vs Abstract class Interface vs Abstract class Trong interface, liệ liệu phả phải hằng, ng, abstract class thể có liệ liệu biế biến Trong interface, phương thứ thức chỉ có ph n tiêu đề mà ko thân phương thứ thức, abstract class thể có phương thứ thức đầy đủ Trong interface, tất liệ liệu public final static phương thứ ứ c l public abstract th Có thể thể truy nhậ nhập interface sử dụng cú phá pháp InterfaceName.CONSTANT_NAME InterfaceName.CONSTANT_NAME Có thể sử dụng interface để thực đa thừa kế với class subinterface subinterface public class NewClass extends BaseClass public class T2{ int k=1; public static final int k=1; public abstract void p(); void p() } { } Bài giả giảng Lậ Lập trì trình Java - Chương 08 8.29 } public interface T1{ implements Interface1, …, InterfaceN { … } public interface NewInterface extends Interface1, …, InterfaceN { // phương thứ thức trừ trừu tượ tượng } Bài giả giảng Lậ Lập trì trình Java - Chương 08 8.30 Nội dung chương Sơ đồ phân cấp lớp GUI Frames LẬP TRÌNH JAVA Tạo frame, centering frames, adding components to frames Layout Managers FlowLayout, FlowLayout, GridLayout, GridLayout, BorderLayout Drawing on Panels The paintComponent method Chương 9: Lập trình GUI Using Colors, Fonts, and Font Metrics Drawing Geometric Figures Lines, Rectangles, Ovals, Arcs, and Polygons EventEvent-Driven Programming Event Source, Listener, Listener Interface Bà i giả giả ng Lậ Lậ p trì trình Java - Chương 09 Các thành phần GUI Swing vs AWT AWT: Abstract Windows Toolkit: Các đối tượ tượng GUI: button, label, text field, check box, radio button, combo box, … Mỗi loạ loại đối tượ tượng đượ xác định lớp: JButton, JButton, JLabel, JLabel, JTextField, JTextField, JCheckBox, JCheckBox, JRadioButton, JComboBox, … Mỗi lớp thành phầ phần GUI có số constructor để tạo đối tượ tượng thành phầ phần GUI Bà i giả giả ng Lậ Lậ p trì trình Java - Chương 09 9.2 Java Đượ Được gắn với platform xác định Thí Thích hợp với việ việc phá phát triể triển ứng dụng GUI đơn giản Swing components: Java Không gắn với platform cố định Mạnh, nh, đa năng, năng, linh hoạ hoạt 9.3 Bà i giả giả ng Lậ Lậ p trì trình Java - Chương 09 9.4 Sơ JComponent phần cấp lớp GUI Swin JCheckBoxMenuItem Dimension Font Classes in the java.awt package LayoutManager Heavyweight AbstractButton JMenuItem JMenu JButton JRadioButtonMenuItem JToggleButton JCheckBox FontMetrics JRadioButton JEditorPane JComponent Object Color Panel Applet JApplet JTextField JTextComponent Graphics Component JPasswordField J TextArea Container Window Frame JFrame Dialog JDialog JLabel * JList JTabbedPane Swing Components in the javax.swing package JComponent Lightweight Bà i giả trình Java - Chương 09 ✬ng Lậ✩p trì JPanel JOptionPane JScrollBar JScrollPane JSeparator JSlider JRootPane JPane JProgressBar JToolBar JSplitPane JTable JTree JInternalFrame JToolTip JLayeredPane JTableHeader JColorChooser Bà i giả giả ng Lậ Lậ p trì trình Java - Chương 09 9.6 Các lớp GUI: nhóm component Được dùng để chứa thành phần khác Các lớp container Swi Container JFrame JDialog JApplet JPanel Bà i giả giả ng Lậ Lậ p trì trình Java - Chương 09 JMenuBar JPopupMenu 9.5 Các lớp GUI: nhóm container JComboBox JFileChooser 9.7 Gồm subclass lớp JComponent JComponent Các lớp GUI component Swi JButton JLabel JTextField JTextArea JComboBox JList JRadioButton JMenu … Bà i giả giả ng Lậ Lậ p trì trình Java - Chương 09 9.8 AWT Các lớp GUI: nhóm helper AWTEvent Được component container dùng để vẽ đặt đối tượng Các lớp helper Swi Font FontMetrics Object Layo utManager UI UI UI Window Frame Label Dialog FileDialog TextComponent List Choice CheckBoxGroup MenuComponent MenuItem Menu MenuBar Scrollbar 9.9 Pull-down Menus Panel Panel User Interface Components User Interface Components Panel Panel User Interface Components User Interface Components Panel Panel Button Canvas Panel Panel Applet CheckBox Applet Panel Panel TextArea Graphics Các thành phần giao diện ngư i sử dụng User Interface Components (UI) Color Component Bà i giả giả ng Lậ Lậ p trì trình Java - Chương 09 Pull-down Menus Container TextField Graphics Color Font FontMetrics Dimension LayoutManager Frame ptiona Bà i giả giả ng Lậ Lậ p trì trình Java - Chương 09 9.10 Frames Frame cửa sổ không chứa cửa sổ khác Frame tảng để chứa thành phần GUI khác ứng dụng Java GUI Trong chương trình Swing GUI, sử dụng lớp JFrame để tạo cửa sổ panel Bà i giả giả ng Lậ Lậ p trì trình Java - Chương 09 9.11 Bà i giả giả ng Lậ Lậ p trì trình Java - Chương 09 9.12 Tạo Frame Căn Frame import javax.swing public class MyFrame { public static void main String[] args { JFrame frame = new JFrame "Test Frame"); frame.setSize(400, 300); frame.setVisible(true); frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE); } Mặc định, frame hiển thị góc bên trái hình Để hiển thị frame vị trí xác định, sử dụng phương thức setLocation(x, y) lớp JFrame Phương thức đặt góc trái frame vị trí có tọa độ (x, y) } MyFrame Bà i giả giả ng Lậ Lậ p trì trình Java - Chương 09 9.13 Bà i giả giả ng Lậ Lậ p trì trình Java - Chương 09 9.14 Đưa thành phần vào Frame Căn Frame (tiếp) (0, 0) // Dua nut bam vao frame frame.getContentPane().add( new JButton("OK")); Screen (x, y) Frame getHeight() screenHeight getWidth() MyFrameWithComponents screenWidth CenterFrame Bà i giả giả ng Lậ Lậ p trì trình Java - Chương 09 9.15 Bà i giả giả ng Lậ Lậ p trì trình Java - Chương 09 9.16 Layout Managers LƯU Ý Các layout manager Java cung cấp Content pane lớp Container Câu lệnh slide trước tương đương với câu lệnh sau: chế để tự động ánh xạ thành phần GUI bạn tất hệ thống cửa Container container = frame.getContentPane container.add new JButton("OK")); JButton("OK")); sổ Content pane đượ sinh đối tượng JFrame tạo Đối tượng JFrame sử dụng content pane để chứa thành phần frame Bà i giả giả ng Lậ Lậ p trì trình Java - Chương 09 Các thành phần GUI đặt container Mỗi container có layout manager để xếp thành phần 9.17 Thiết lập Layout Manager Bà i giả giả ng Lậ Lậ p trì trình Java - Chương 09 9.18 Ví dụ 9.1: FlowLayout Manager LayoutManager layMan = new XLayout(); Layout(); container.setLayout(layMan); container.setLayout(layMan); Các thành phần xếp container từ trái sang phải, từ XLayout: FlowLayout xuố xuống dướ theo GridLayout thứ thứ tự chúng đượ đưa BorderLayout o CardLayout ShowFlowLayout GridBagLayout Bà i giả giả ng Lậ Lậ p trì trình Java - Chương 09 9.19 Bà i giả giả ng Lậ Lậ p trì trình Java - Chương 09 9.20 FlowLayout Constructors Ví dụ 9.2: GridLayout Manager public FlowLayout(int align, int hGap, hGap, int vGap) vGap) Xây dựng FlowLayout có cách hàng alignment , khoả khoảng trố trống ngang horizontal gap , khoả khoảng trố ố ng d ọ c vertical gap x c đ ị nh C c khoả ả ng trố ố ng giữ tr nh kho tr thành phầ phần đượ tính pixel GridLayout manager xếp thành public FlowLayout(int alignment) Các thành phầ phần đượ đặt lướ lưới từ Xây dựng FlowLayout có alignment xác định, nh, khoả khoảng trố trống ngang dọc có mặc định pixel xuố xuống dướ dưới, từ trá trái sang phả phải phầ phần lướ lưới ma trậ trận với số hàng số cột xác định constructor public FlowLayout() FlowLayout() Xây dựng FlowLayout có cách hàng mặc định giữ khoả khoảng trố trống ngang dọc mặc định pixel ShowGridLayout GridLayout Constructors Ví d ụ 9.3: BorderLayout Manager public GridLayout(int rows,int columns) BorderLayout manager chia container Bà i giả giả ng Lậ Lậ p trì trình Java - Chương 09 9.21 Bà i giả giả ng Lậ Lậ p trì trình Java - Chương 09 9.22 thành khu vực: East, South, West, North, Center Xây dựng GridLayout có số hàng số cột xác định public GridLayout(int rows, int columns, int hGap, hGap, int vGap) vGap) Xây dựng GridLayout có số hàng số cột xác định, nh, khoả khoảng trố trống ngang dọc giữ thành phầ phần đượ xác định nh Bà i giả giả ng Lậ Lậ p trì trình Java - Chương 09 9.23 Bà i giả giả ng Lậ Lậ p trì trình Java - Chương 09 9.24 Sử d ụng Panel làm Container Ví d ụ 9.3 (tiếp) Các thành phầ phần đượ đưa vào BorderLayout phương thức add: Các panel đóng vai trò container nhỏ để nhó nhóm thành phầ phần GUI add(Component, add(Component, constraint) Bạn nên đặt thành phầ phần GUI constraint: BorderLayout.EAST, BorderLayout.EAST, panel đặt panel frame, ShowBorderLayout thể đặt panel panel BorderLayout.SOUTH, BorderLayout.SOUTH, BorderLayout.WEST, BorderLayout.WEST, JPanel p = new JPanel(); JPanel(); p.add(new JButton("OK"); JButton("OK"); frame.getContentPanel().add(p); frame.getContentPanel().add(p); BorderLayout.NORTH, BorderLayout.NORTH, BorderLayout.CENTER BorderLayout.CENTER Bà i giả giả ng Lậ Lậ p trì trình Java - Chương 09 9.25 Bà i giả giả ng Lậ Lậ p trì trình Java - Chương 09 9.26 Vẽ Panel Ví d ụ 9.4: Panel JPanel thể đượ sử dụng để vẽ đồ họa, văn Chương trình tạo giao diện cho lò vi sóng, ng, sử dụng panel để tổ chức thành phần cho phé phép tương tác với ngườ người sử dụng ng frame Để vẽ panel: A textfield p2 A button 12 buttons Tạo lớp subclass JPanel p1 Chồ Chồng phương thứ thức paintComponent paintComponent Sau thể hiể hiển thị thị chuỗ chuỗi ký tự, vẽ khố khối hình học hiể hiển thị thị ảnh panel TestPanels Bà i giả giả ng Lậ Lậ p trì trình Java - Chương 09 9.27 Bà i giả giả ng Lậ Lậ p trì trình Java - Chương 09 9.28 Vẽ Panel tiếp Vẽ Panel tiếp public class DrawMessage extends JPanel { /** Main method */ public static void main(String[] args) { JFrame frame = new JFrame("DrawMessage"); frame.getContentPane().add(new DrawMessage()); (0, 0) x (x, 0) y frame.setDefaultCloseOperation(JFrame.EXIT_ON_CL OSE); frame.setSize(300, 200); frame.setVisible(true); } (0, y) /** Paint the message */ public void paintComponent(Graphics g) { DrawMessage9.29 super.paintComponent(g); Bà i giả giả ng Lậ Lậ p trì trình Java - Chương 09 g.drawString("Welcome to Java!", 40, 40); LƯU Ý (x, y) Bà i giả giả ng Lậ Lậ p trì trình Java - Chương 09 9.30 LƯU Ý Lớp Graphics lớp trừ trừu tượ tượng để hiể hiển thị thị hình vẽ ảnh hình platform khác Lớp Graphics gói gọn chi tiế tiết platform cho Để vẽ hình, thông thường bạn tạo lớp JPanel chồng phương thức paintComponent để "nói" cho hệ thống phải phé phép bạn vẽ thứ thứ theo cách giố giống không vẽ Thực tế bạn vẽ liên quan đến platform cụ thể thứ thành phần GUI Lời gọi super.paintComponent(g) cần thiết để đảm bảo vùng hiể hiển thị thị đượ xóa trướ trước Bà i giả giả ng Lậ Lậ p trì trình Java - Chương 09 hiể hiển thị thị vẽ 9.31 Bà i giả giả ng Lậ Lậ p trì trình Java - Chương 09 9.32 Lớp Color Thiết lập màu Bạn thể thiế thiết lập màu cho thành phầ phần GUI cách sử dung lớp java.awt.Color java.awt.Color Các màu đượ tạo từ màu red, green, blue; màu đượ biể biểu diễ diễn giá giá trị trị byte -255 miêu tả cườ cường độ Đây đượ gọi hệ màu RGB RGB model Color c = new Color(r, g, b); Bạn thể sử dụng phương thứ thức sau để thiết lập màu background foreground thành phầ phần: r, g, b xác định màu đượ tạo thành phầ phần tương ứng red, green, blue Ví dụ: setBackground(Color c) setForeground(Color c) Ví dụ: Color c = new Color(228, 100, 255); JButton jbtOK = new JButton(); jbtOK.setBackground(Color.yellow); jbtOK.setBackground(Color.yellow); jbtOK.setForeground(new Color(255,0,0)); Lớp Font Tìm tất tên Font khả dụng Bà i giả giả ng Lậ Lậ p trì trình Java - Chương 09 9.33 Font myFont = Font(name, style, size); Bà i giả giả ng Lậ Lậ p trì trình Java - Chương 09 9.34 import java.awt.GraphicsEnvironment; java.awt.GraphicsEnvironment; public class testAllFonts { Ví dụ: public static void main(String[] main(String[] args) args) { Font font1 = new Font("SansSerif", Font("SansSerif", Font.BOLD, 16); Font font2 = new Font("Serif", Font("Serif", Font.BOLD+Font.ITALIC, Font.BOLD+Font.ITALIC, 12); GraphicsEnvironment e = GraphicsEnvironment.getLocalGraphicsEnviron ment(); ment(); String[] fontnames = e.getAvailableFontFamilyNames(); e.getAvailableFontFamilyNames(); Bà i giả giả ng Lậ Lậ p trì trình Java - Chương 09 9.35 for (int (int i = 0; i < fontnames.length; fontnames.length; testAllFonts i++) Bà i giả giả ng Lậ Lậ p trì trình Java - Chương 09 System.out.println(fontnames[i]); System.out.println(fontnames[i]); 9.36 Lớp FontMetrics Thiết lập Font Bạn thể hiể hiển thị thị chuỗ chuỗi ký tự vị trí trí bất public void paint(Graphics g) { Font myFont = new Font("Times", Font.BOLD, 18); kỳ panel cách sử dụng lớp g.setFont(myFont); g.setFont(myFont); FontMetrics FontMetrics g.drawString("Welcome to Java", 20, 40); Để nhậ nhận đối tượ tượng FontMetrics cho font xác //set a new font g.setFont(new Font("Courier",Font.BOLD+Font.ITALIC,16)); g.drawString("Welcome to Java", 20, 70); định, sử dụng phương thức getFontMetrics: public void paint(Graphics g) { } g.getFontMetrics(Font f); // testSetFonts Bà i giả giả ng Lậ Lậ p trì trình Java - Chương 09 g.getFontMetrics(); g.getFontMetrics(); 9.37 Bà i giả giả ng Lậ Lậ p trì trình Java - Chương 09 9.38 } Ví dụ 9.5: Sử dụng FontMetrics Các phương thức lấy thuộc tính chuỗi lớp FontMetrics Mục tiêu: Hiển thị “Welcome to Java” frame public int getAscent() getAscent() public int getDescent() getDescent() public int getLeading() getLeading() public int getHeight() getHeight() public int stringWidth(String str) str) Bà i giả giả ng Lậ Lậ p trì trình Java - Chương 09 CenterMessage 9.39 Bà i giả giả ng Lậ Lậ p trì trình Java - Chương 09 9.40 Ví dụ 9.5 tiếp messagePanel JPanel JFrame MessagePanel TestFontMetrics stringWidth getHeight() stringAscent -xCoordinate: int -yCoordinate: int -centered: boolean -message: String Welcome to Java +getMessage(): String +getXCoordinate(): int +getYCoordinate(): int +isCentered(): boolean +setMessage(message: String): void +setXCoordinate(x: int): void +setYCoordinate(y: int): void +setCentered(centered: boolean): void +paintComponent(g: Graphics): void +getPerferredSize(): Dimension +getMinimumSize(): Dimension getWidth() Bà i giả giả ng Lậ Lậ p trì trình Java - Chương 09 9.41 Vẽ hình hình học Panel Vẽ đường thẳng Bà i giả giả ng Lậ Lậ p trì trình Java - Chương 09 9.42 Vẽ đường thẳng drawLine(x1, y1, x2, y2); Vẽ hình chữ nhật (x1 , y1) Vẽ hình bầu dục Vẽ cung tròn Vẽ đa giá giác (x2 , y2) Bà i giả giả ng Lậ Lậ p trì trình Java - Chương 09 9.43 Bà i giả giả ng Lậ Lậ p trì trình Java - Chương 09 9.44 Vẽ hình chữ nhật Vẽ hình chữ nhật góc tròn drawRect(x, y, w, h); drawRoundRect(x, drawRoundRect(x, y, w, h, aw, ah); fillRect(x, y, w, h); fillRoundRect(x, y, w, h, aw, ah); (x , y ) (x, y) ah/2 DrawRectangles a w /2 h h w w Bà i giả giả ng Lậ Lậ p trì trình Java - Chương 09 9.45 Vẽ hình bầu dục Bà i giả giả ng Lậ Lậ p trì trình Java - Chương 09 9.46 Vẽ cung tròn drawOval(x, y, w, h); drawArc(x, drawArc(x, y, w, h, angle1, angle2); fillArc(x, fillArc(x, y, w, h, angle1, angle2); fillOval(x, y, w, h); (x, y) DrawOvals DrawArgs h w Bà i giả giả ng Lậ Lậ p trì trình Java - Chương 09 9.47 Bà i giả giả ng Lậ Lậ p trì trình Java - Chương 09 9.48 Vẽ đa giác Ví dụ 9.6: Vẽ đồng hồ int[] int[] x = {40, 70, 60, 45, 20}; int[] int[] y = {20, 40, 80, 45, 60}; g.drawPolygon(x, g.drawPolygon(x, y, x.length); g.fillPolygon(x, g.fillPolygon(x, y, x.length); (x[0], y[0]) (x[1], y[1]) Mục tiêu: Sử dụng phương thức vẽ lượng giác để vẽ đồng hồ hiển thị giờ, phút, giây frame DrawClock DrawPolygon (x[3], y[3]) DisplayClock (x[4], y[4]) Run (x[2], y[2]) Bà i giả giả ng Lậ Lậ p trì trình Java - Chương 09 9.49 Bà i giả giả ng Lậ Lậ p trì trình Java - Chương 09 Ví dụ 9.6 tiếp 9.50 Ví dụ 9.6 tiếp xEnd = xCenter + handLength × sin(θ) xEnd = xCenter + handLength × sin(θ) yEnd = yCenter - handLength × ì phútcos(θ) có 60 giây, góc c a yEnd = yCenter - handLength × cos(θ) ị trí kim phút xác định kim giây là: phút giây theo công thức second × (2π/60) minute + second/60 í dụ, thời gian phút 30 giây Tổng số phút 3.5 Vì có 60 phút, góc kim phút là: (minute + second/60) × (2π/60) Bà i giả giả ng Lậ Lậ p trì trình Java - Chương 09 9.51 Bà i giả giả ng Lậ Lậ p trì trình Java - Chương 09 9.52 Lập trình hướng kiện Ví dụ 9.6 tiếp xEnd = xCenter + handLength × sin(θ) Lập trình hướng thủ tục (Procedural programming) chương trì trình đượ thự thực hiệ theo thứ thứ tự thủ thủ tục yEnd = yCenter - handLength × cos(θ) Vì hình tròn đ c chia thành 12 giờ, góc kim là: (hour + minute/60 + Trong lập trình hướng kiện (eventdriven programming), programming), mã lệnh đượ thực vào lúc kích hoạt kiện second/(60 × 60))) × (2π/12) Bà i giả giả ng Lậ Lậ p trì trình Java - Chương 09 9.53 Bà i giả giả ng Lậ Lậ p trì trình Java - Chương 09 9.54 Các lớp kiện Sự kiện Một kiện event định nghĩa loạ loại tín hiệ hiệu báo cho chương trì trình có Event❖ bject điều xảy Sự kiệ kiện đượ sinh hành động AWTEvent ActionEvent ContainerEvent AdjustmentEvent FocusEvent ComponentEvent InputEvent ItemEvent PaintEvent TextEvent WindowEvent MouseEvent KeyEvent ListSelectionEvent người sử dụng ví dụ: di chuột, kích phím Các lớp kiện nằm gói java.awt.event chuộ chuột, ấn phí phím hoặ HĐH vd: vd: time Bà i giả giả ng Lậ Lậ p trì trình Java - Chương 09 riêng ListSelectionEvent gói javax.swing.event 9.55 Bà i giả giả ng Lậ Lậ p trì trình Java - Chương 09 9.56 Selected User Actions User Action Source Object Event Type Generated Clicked on a button JButton ActionEvent Changed text JTextComponent TextEvent Double-clicked on a list item JList ActionEvent Selected or deselected an item JList ItemEvent Mô hình ủy quyền Event✁bject User action Generate an event Trigger an event Source ✁bject with a single click Register a listener object Selected or deselected an item JComboBox 9.57 Event Handler Listener Methods (Handlers) ActionEvent ActionListener actionPerformed(ActionEvent) ItemEvent ItemListener itemStateChanged(ItemEvent) WindowEvent WindowListener windowClosing(WindowEvent) Bà i giả giả ng Lậ Lậ p trì trình Java - Chương 09 9.58 Ví dụ 9.7: Xử lý kiện hành động đơn giản Selected Event Handlers Listener Interface Listener ✁bject ItemEvent Bà i giả giả ng Lậ Lậ p trì trình Java - Chương 09 Event Class Notify listener Mục tiêu: Hiển thị nút bấm OK Cancel cửa sổ Khi kích chuộ chuột vào nút, windowOpened(WindowEvent) windowIconified(WindowEvent) windowDeiconified(WindowEvent) windowClosed(WindowEvent) message hiển thị để nút đượ kích ch windowActivated(WindowEvent) windowDeactivated(WindowEvent) ContainerEvent ContainerListener componentAdded(ContainerEvent) TestActionEvent componentRemoved(ContainerEvent) Bà i giả giả ng Lậ Lậ p trì trình Java - Chương 09 9.59 Bà i giả giả ng Lậ Lậ p trì trình Java - Chương 09 9.60 M c tiêu: Minh h a vi c x lý kiện cửa sổ Bất Ví dụ 9.9: Nhiều Listener cho nguồn đơn kỳ lớp lớp Window tạo Mục tiêu: Sửa đổi ví dụ 9.7 để thêm vào nút kiện cửa sổ sau: mở, đóng, đóng, bấm listener Hai nút K Cancel sử kích hoạt, kích hoạt, thu nhỏ thành dụng lớp frame listner Khi nút bấm, Ví dụ 9.8: Xử lý kiện cửa sổ biểu tượng, phóng to trở lại cửa sổ Chương trình listener đáp ứng lại kiện hành động tạo frame, lắng nghe kiện cửa sổ, hiển thị thông báo kiện xuất TestMultipleListener TestWindowEvent Bà i giả giả ng Lậ Lậ p trì trình Java - Chương 09 9.61 Bà i giả giả ng Lậ Lậ p trì trình Java - Chương 09 9.62 [...]... Lậ Lậ p trì trình Java - Chương 09 9.41 Vẽ các hình hình học trên Panel Vẽ đường thẳng Bà i giả giả ng Lậ Lậ p trì trình Java - Chương 09 9.42 Vẽ đường thẳng drawLine(x1, y1, x2, y2); Vẽ hình chữ nhật (x1 , y1) Vẽ hình bầu dục Vẽ cung tròn Vẽ đa giá giác (x2 , y2) Bà i giả giả ng Lậ Lậ p trì trình Java - Chương 09 9.43 Bà i giả giả ng Lậ Lậ p trì trình Java - Chương 09 9.44 Vẽ hình chữ nhật Vẽ hình... trình Java - Chương 09 9.45 Vẽ hình bầu dục Bà i giả giả ng Lậ Lậ p trì trình Java - Chương 09 9.46 Vẽ cung tròn drawOval(x, y, w, h); drawArc(x, drawArc(x, y, w, h, angle1, angle2); fillArc(x, fillArc(x, y, w, h, angle1, angle2); fillOval(x, y, w, h); (x, y) DrawOvals DrawArgs h w Bà i giả giả ng Lậ Lậ p trì trình Java - Chương 09 9.47 Bà i giả giả ng Lậ Lậ p trì trình Java - Chương 09 9.48 Vẽ đa giác... trì trình Java - Chương 09 9.13 Bà i giả giả ng Lậ Lậ p trì trình Java - Chương 09 9.14 Đưa các thành phần vào trong Frame Căn giữa Frame (tiếp) (0, 0) // Dua nut bam vao trong frame frame.getContentPane().add( new JButton("OK")); Screen (x, y) Frame getHeight() screenHeight getWidth() MyFrameWithComponents screenWidth CenterFrame Bà i giả giả ng Lậ Lậ p trì trình Java - Chương 09 9.15 Bà i giả giả ng... sử dụng content pane để chứa các thành phần trong frame Bà i giả giả ng Lậ Lậ p trì trình Java - Chương 09 Các thành phần GUI được đặt trong các container Mỗi container có một layout manager để sắp xếp các thành phần đó 9.17 Thiết lập Layout Manager Bà i giả giả ng Lậ Lậ p trì trình Java - Chương 09 9.18 Ví dụ 9.1: FlowLayout Manager LayoutManager layMan = new XLayout(); Layout(); container.setLayout(layMan);... xuống dướ dưới theo GridLayout thứ thứ tự chú chúng đượ được đưa BorderLayout và o CardLayout ShowFlowLayout GridBagLayout Bà i giả giả ng Lậ Lậ p trì trình Java - Chương 09 9.19 Bà i giả giả ng Lậ Lậ p trì trình Java - Chương 09 9.20 FlowLayout Constructors Ví dụ 9.2: GridLayout Manager public FlowLayout(int align, int hGap, hGap, int vGap) vGap) Xây dựng một FlowLayout mới có cách sắp hàng alignment... GridLayout Constructors Ví d ụ 9.3: BorderLayout Manager public GridLayout(int rows,int columns) BorderLayout manager chia container Bà i giả giả ng Lậ Lậ p trì trình Java - Chương 09 9.21 Bà i giả giả ng Lậ Lậ p trì trình Java - Chương 09 9.22 thà thành 5 khu vực: East, South, West, North, và Center Xây dựng một GridLayout mới có số hàng và số cột xác định public GridLayout(int rows, int columns, int hGap,... có số hàng và số cột xác định, nh, và khoả khoảng trố trống ngang và dọc giữ giữa các thà thành phầ phần đượ được xác định nh Bà i giả giả ng Lậ Lậ p trì trình Java - Chương 09 9.23 Bà i giả giả ng Lậ Lậ p trì trình Java - Chương 09 9.24 Sử d ụng Panel làm Container Ví d ụ 9.3 (tiếp) Các thà thành phầ phần đượ được đưa vào BorderLayout bằng phương thức add: Các panel đóng vai trò như các container nhỏ... frame.getContentPanel().add(p); frame.getContentPanel().add(p); BorderLayout.NORTH, BorderLayout.NORTH, BorderLayout.CENTER BorderLayout.CENTER Bà i giả giả ng Lậ Lậ p trì trình Java - Chương 09 9.25 Bà i giả giả ng Lậ Lậ p trì trình Java - Chương 09 9.26 Vẽ trên Panel Ví d ụ 9.4: Panel JPanel còn có thể thể đượ được sử dụng để vẽ đồ họa, văn Chương trình tạo một giao diện cho lò vi sóng, ng, sử dụng các panel để tổ chứ... đó có thể thể hiể hiển thị thị các chuỗ chuỗi ký tự, vẽ các khố khối hình học và hiể hiển thị thị ảnh trên panel TestPanels Bà i giả giả ng Lậ Lậ p trì trình Java - Chương 09 9.27 Bà i giả giả ng Lậ Lậ p trì trình Java - Chương 09 9.28 Vẽ trên Panel tiếp Vẽ trên Panel tiếp public class DrawMessage extends JPanel { /** Main method */ public static void main(String[] args) { JFrame frame = new JFrame("DrawMessage");... Paint the message */ public void paintComponent(Graphics g) { DrawMessage9.29 super.paintComponent(g); Bà i giả giả ng Lậ Lậ p trì trình Java - Chương 09 g.drawString("Welcome to Java!", 40, 40); LƯU Ý (x, y) Bà i giả giả ng Lậ Lậ p trì trình Java - Chương 09 9.30 LƯU Ý Lớp Graphics là một lớp trừ trừu tượ tượng để hiể hiển thị thị hình vẽ và ảnh trên màn hình trên các platform khá khác nhau Lớp Graphics