SlideShare una empresa de Scribd logo
1 de 18
Descargar para leer sin conexión
Bài 4: Lập trình đồ họa
Programming Graphics
    Giảng viên: Nguyễn Thị Minh Huyền
    nguyenthiminhhuyen@hus.edu.vn
               Đỗ Thanh Hà
          dothanhha@hus.edu.vn
Tài liệu tham khảo
   BigJava – chương 5




2009-2010      OOP - http://mim.hus.edu.vn/elearning   2
Tạo cửa sổ khung (frame)
•   Sử dụng lớp JFrame
      JFrame frame = new JFrame();
      frame.setSize(300, 400);
      frame.setTitle("An Empty Frame");
      frame.setDefaultCloseOperation(
                JFrame.EXIT_ON_CLOSE);
      frame.setVisible(true);
•   import javax.swing.*;
•   Ví dụ :
      •EmptyFrameViewer.java
      (BigJava, ch05)

          2009-2010       OOP - http://mim.hus.edu.vn/elearning   3
Vẽ hình (1)
   paintComponent: là phương thức được gọi mỗi
    khi cần vẽ lại một thành phần đồ hoạ
   VD: thành phần hình chữ nhật được xây dựng nhờ
    thừa kế (từ khoá extends) lớp JComponent
public class RectangleComponent extends JComponent {
    public void paintComponent(Graphics g){
         // Recover Graphics2D
         Graphics2D g2 = (Graphics2D) g;
         ...
    }
}



       2009-2010     OOP - http://mim.hus.edu.vn/elearning   4
Vẽ hình (2)
   Lớp Graphics: cho phép thao tác với các trạng thái đồ
    họa (vd: màu hiện tại)
   Lớp Graphics2D: có các phương thức để vẽ hình khối.

    Phải ép kiểu để thu được đối tượng g2 thuộc lớp
    Graphics2D từ tham biến g thuộc lớp Graphics
   Vẽ hình:
       Rectangle box = new Rectangle(5, 10, 20, 30);
       g2.draw(box);

    Các lớp đồ hoạ thuộc gói java.awt



      2009-2010        OOP - http://mim.hus.edu.vn/elearning   5
VD: vẽ hình chữ nhật

    Xây dựng 2 lớp:
    
        RectangleComponent có phương thức paintComponent để vẽ
        2 hình chữ nhật
       RectangleViewer có hàm main làm các việc sau:
          Vẽ một khung

          Xây dựng một đối tượng thuộc lớp thành phần hình chữ nhật:

             RectangleComponent component = new
             RectangleComponent();
            Thêm thành phần vào khung:
               frame.add(component);
             /* trước version 5 cần dùng lệnh
             frame.getContentPane().add(component); */
         
             Hiển thị khung (setVisible)
   RectangleComponent.java, RectangleViewer.java (BigJava ch05)
        2009-2010                 OOP - http://mim.hus.edu.vn/elearning   6
Ứng dụng con (Applet)
   Applets là các chương trình chạy trong một trình duyệt Web
   Để cài đặt một applet, sử dụng đoạn mã kiểu như sau (tương tự như vẽ thành
    phần đồ hoạ, ngoại trừ vài thay đổi):
public class MyApplet extends JApplet // thay cho JComponent
{
    public void paint(Graphics g) // thay cho paintComponent
    {
        // Recover Graphics2D
        Graphics2D g2 = (Graphics2D) g;
        // Drawing instructions go here
        . . .
    }
   }
   Để chạy một applet, cần một tệp HTML có thẻ applet
   Một tệp HTML có thể có nhiều applets; mỗi applet có một thẻ
   Sử dụng một appletviewer hoặc một trình duyệt có hỗ trợ Java để chạy applet

       2009-2010               OOP - http://mim.hus.edu.vn/elearning          7
Applets – Ví dụ
   Tệp ví dụ (BigJava, ch05):
                RectangleApplet.java, RectangleApplet.html, RectangleAppletExplained.html
   Dùng appletviewer:      appletviewer RectangleApplet.html




          2009-2010                  OOP - http://mim.hus.edu.vn/elearning                  8
Các hình đồ họa (1)
     Rectangle, Ellipse2D.Double,
      Line2D.Double: mô tả các hình
     Các lớp .Double này là các lớp trong (inner class),
      cách sử dụng không khác các lớp thông thường, tuy
      nhiên khi khai báo thư viện thì khai báo lớp ngoài của
      chúng:
          import java.awt.geom.Ellipse2D;
           // không có .Double
     Vẽ hình: Tạo đối tượng hình rồi thực hiện lệnh vẽ


    2009-2010          OOP - http://mim.hus.edu.vn/elearning   9
Các hình đồ họa (2)
   Vẽ hình elíp:
Ellipse2D.Double ellipse = new Ellipse2D.Double(x, y, width, height);
g2.draw(ellipse);
   Vẽ đường thẳng:
Line2D.Double segment = new Line2D.Double(x1, y1, x2, y2);
hoặc
Point2D.Double from = new Point2D.Double(x1, y1);
Point2D.Double to = new Point2D.Double(x2, y2);
Line2D.Double segment = new Line2D.Double(from, to);
g2.draw(segment);
   Vẽ một xâu:
g2.drawString("Message", 50, 100);


        2009-2010           OOP - http://mim.hus.edu.vn/elearning   10
Các hình đồ họa (3)
Elíp




 2009-2010   OOP - http://mim.hus.edu.vn/elearning   11
Màu sắc
   Các màu chuẩn: Color.BLUE, Color.RED,
    Color.PINK, v.v…
   Pha màu RGB (red, green, blue) với các giá trị trong
    khoảng 0.0F và 1.0F (F = float)
        Color magenta = new Color(1.0F, 0.0F, 1.0F);
   Thiết lập màu đồ hoạ:
        g2.setColor(magenta);
   Màu đã thiết lập được dùng để vẽ và tô màu các hình
        g2.fill(rectangle); // tô với màu hiện tại của g2




        2009-2010             OOP - http://mim.hus.edu.vn/elearning   12
Đọc dữ liệu văn bản
   1 ứng dụng đồ hoạ có thể lấy dữ liệu vào bằng cách hiển
    thị hộp thoại với lớp JOptionPane
   Phương thức showInputDialog
    
        dùng để hiển thị một lời nhắc và đợi người dùng nhập dữ liệu
       kết quả trả về là một xâu mà người dùng đã nhập
   Ví dụ
       String input = JOptionPane.showInputDialog("Enter x");
        double x = Double.parseDouble(input);
       VD chương trình (BigJava, ch05)
        ColorViewer.java, ColoredSquareComponent.java

        2009-2010              OOP - http://mim.hus.edu.vn/elearning   13
Vẽ hình phức tạp (1)
   VD:
       Vẽ 2 xe ô tô: 1 ở góc trên bên trái của màn hình, 1 ở góc dưới bên phải
   Lời khuyên:
       Tạo 1 lớp riêng cho mỗi hình
             class Car
              {
                . . .
                public void draw(Graphics2D g2)
                {
                    // Drawing instructions
                    . . .
                }
              }
       Vẽ nháp trên giấy khi cần vẽ các hình phức tạp


              2009-2010          OOP - http://mim.hus.edu.vn/elearning      14
Vẽ hình phức tạp (2)




2009-2010   OOP - http://mim.hus.edu.vn/elearning   15
Vẽ hình phức tạp (3)
   Cụ thể:
        Tính vị trí góc dưới bên phải màn hình trong phương thức
         paintComponent
                int x = getWidth() - 60;
                int y = getHeight() - 30;
                Car car2 = new Car(x, y);
        getWidth và getHeight áp dụng trên đối tượng thực hiện
         phương thức paintComponent
        Nếu cửa sổ khung thay đổi kích thước, phương thức
         paintComponent sẽ được gọi và vị trí của xe được tính lại
   Chương trình (BigJava, ch05):
               CarComponent.java
               Car.java
               CarViewer.java

    2009-2010                  OOP - http://mim.hus.edu.vn/elearning   16
So sánh thông tin dạng số và
    trực quan
   Tính giao điểm giữa đường tròn và đường thẳng
   Đường tròn có bán kính r = 100 và tâm (a, b) = (100, 100)
   Đường thẳng có giá trị tham số x
   Tính giao điểm:
       Phương trình đường tròn với bán kính r và tâm (a, b) là
               (x – a)2 + (y – b)2 = r2
       Biết x, tính được giá trị của y với lệnh Java:
               double root = Math.sqrt(r * r - (x - a) * (x - a));
                double y1 = b + root;
                double y2 = b - root;

    Kết quả trực quan trên hình vẽ và kết quả số thu được phải
    giống nhau

    2009-2010                      OOP - http://mim.hus.edu.vn/elearning   17
Giao điểm của đường thẳng và
        đường tròn
   Chương trình:
        IntersectionComponent.java
        IntersectionViewer.java
        LabeledPoint.java




        2009-2010         OOP - http://mim.hus.edu.vn/elearning   18

Más contenido relacionado

La actualidad más candente

Giải bài toán markowitz tối ưu hóa danh mục đầu tư chứng khoán bằng vba for ...
Giải bài toán markowitz  tối ưu hóa danh mục đầu tư chứng khoán bằng vba for ...Giải bài toán markowitz  tối ưu hóa danh mục đầu tư chứng khoán bằng vba for ...
Giải bài toán markowitz tối ưu hóa danh mục đầu tư chứng khoán bằng vba for ...Nguyen Hau
 
4 matlab ly-thuyet_dohoa_
4 matlab ly-thuyet_dohoa_4 matlab ly-thuyet_dohoa_
4 matlab ly-thuyet_dohoa_Phi Phi
 
Lttt matlab chuong 5
Lttt matlab chuong 5Lttt matlab chuong 5
Lttt matlab chuong 5Hoa Cỏ May
 
Images compression using huffman algorithm matlab
Images compression using huffman algorithm matlabImages compression using huffman algorithm matlab
Images compression using huffman algorithm matlabTan Hoang Luu
 
Huong danmatlab simulink
Huong danmatlab simulinkHuong danmatlab simulink
Huong danmatlab simulinkAnh Vu
 
Thuchanh Ktdk-matlab
Thuchanh Ktdk-matlabThuchanh Ktdk-matlab
Thuchanh Ktdk-matlabmark
 
Pplthdt c04 thuoc_tinhdoituong_phuongthuc_v13.09a
Pplthdt c04 thuoc_tinhdoituong_phuongthuc_v13.09aPplthdt c04 thuoc_tinhdoituong_phuongthuc_v13.09a
Pplthdt c04 thuoc_tinhdoituong_phuongthuc_v13.09aPix Nhox
 
Matlab cho sv_tbd-dt_8-2007
Matlab cho sv_tbd-dt_8-2007Matlab cho sv_tbd-dt_8-2007
Matlab cho sv_tbd-dt_8-2007Xuantham Nguyen
 
Pplthdt c02 lop_doi_tuong_v13.09a
Pplthdt c02 lop_doi_tuong_v13.09aPplthdt c02 lop_doi_tuong_v13.09a
Pplthdt c02 lop_doi_tuong_v13.09aPix Nhox
 
Tai lieu huong_dan_hoc_matlab_danh_cho_mon_xu_ly_anh_rat_hay_2264_7433
Tai lieu huong_dan_hoc_matlab_danh_cho_mon_xu_ly_anh_rat_hay_2264_7433Tai lieu huong_dan_hoc_matlab_danh_cho_mon_xu_ly_anh_rat_hay_2264_7433
Tai lieu huong_dan_hoc_matlab_danh_cho_mon_xu_ly_anh_rat_hay_2264_7433Muoivy Wm
 
Các kiểu Lập trình
Các kiểu Lập trìnhCác kiểu Lập trình
Các kiểu Lập trìnhLê Định
 
Các kiểu Lập trình
Các kiểu Lập trìnhCác kiểu Lập trình
Các kiểu Lập trìnhLê Định
 

La actualidad más candente (20)

Chuong3 c
Chuong3 c Chuong3 c
Chuong3 c
 
Giải bài toán markowitz tối ưu hóa danh mục đầu tư chứng khoán bằng vba for ...
Giải bài toán markowitz  tối ưu hóa danh mục đầu tư chứng khoán bằng vba for ...Giải bài toán markowitz  tối ưu hóa danh mục đầu tư chứng khoán bằng vba for ...
Giải bài toán markowitz tối ưu hóa danh mục đầu tư chứng khoán bằng vba for ...
 
Chapter 6
Chapter 6Chapter 6
Chapter 6
 
Phạm văn ất
Phạm văn ấtPhạm văn ất
Phạm văn ất
 
4 matlab ly-thuyet_dohoa_
4 matlab ly-thuyet_dohoa_4 matlab ly-thuyet_dohoa_
4 matlab ly-thuyet_dohoa_
 
Lttt matlab chuong 5
Lttt matlab chuong 5Lttt matlab chuong 5
Lttt matlab chuong 5
 
Chuong 4
Chuong 4Chuong 4
Chuong 4
 
Chuong 1
Chuong 1Chuong 1
Chuong 1
 
Images compression using huffman algorithm matlab
Images compression using huffman algorithm matlabImages compression using huffman algorithm matlab
Images compression using huffman algorithm matlab
 
Huong danmatlab simulink
Huong danmatlab simulinkHuong danmatlab simulink
Huong danmatlab simulink
 
Thuchanh Ktdk-matlab
Thuchanh Ktdk-matlabThuchanh Ktdk-matlab
Thuchanh Ktdk-matlab
 
Pplthdt c04 thuoc_tinhdoituong_phuongthuc_v13.09a
Pplthdt c04 thuoc_tinhdoituong_phuongthuc_v13.09aPplthdt c04 thuoc_tinhdoituong_phuongthuc_v13.09a
Pplthdt c04 thuoc_tinhdoituong_phuongthuc_v13.09a
 
Matlab cho sv_tbd-dt_8-2007
Matlab cho sv_tbd-dt_8-2007Matlab cho sv_tbd-dt_8-2007
Matlab cho sv_tbd-dt_8-2007
 
c3 mang2 chieu
c3 mang2 chieuc3 mang2 chieu
c3 mang2 chieu
 
Pplthdt c02 lop_doi_tuong_v13.09a
Pplthdt c02 lop_doi_tuong_v13.09aPplthdt c02 lop_doi_tuong_v13.09a
Pplthdt c02 lop_doi_tuong_v13.09a
 
Tai lieu huong_dan_hoc_matlab_danh_cho_mon_xu_ly_anh_rat_hay_2264_7433
Tai lieu huong_dan_hoc_matlab_danh_cho_mon_xu_ly_anh_rat_hay_2264_7433Tai lieu huong_dan_hoc_matlab_danh_cho_mon_xu_ly_anh_rat_hay_2264_7433
Tai lieu huong_dan_hoc_matlab_danh_cho_mon_xu_ly_anh_rat_hay_2264_7433
 
Các kiểu Lập trình
Các kiểu Lập trìnhCác kiểu Lập trình
Các kiểu Lập trình
 
Các kiểu Lập trình
Các kiểu Lập trìnhCác kiểu Lập trình
Các kiểu Lập trình
 
06 tong quan ve ngon ngu c
06 tong quan ve ngon ngu c06 tong quan ve ngon ngu c
06 tong quan ve ngon ngu c
 
Open gl introduction
Open gl introductionOpen gl introduction
Open gl introduction
 

Destacado

Object Oriented Analysis and Design
Object Oriented Analysis and DesignObject Oriented Analysis and Design
Object Oriented Analysis and DesignHaitham El-Ghareeb
 
Object Oriented Programming Concepts
Object Oriented Programming ConceptsObject Oriented Programming Concepts
Object Oriented Programming Conceptsthinkphp
 
Client Side Programming with Applet
Client Side Programming with AppletClient Side Programming with Applet
Client Side Programming with Appletbackdoor
 
A socially Geo-localized Web
A socially Geo-localized WebA socially Geo-localized Web
A socially Geo-localized WebNuno Khan
 
Event handling in netbeans ide
Event handling in netbeans ideEvent handling in netbeans ide
Event handling in netbeans idelearnt
 
Bridgepoint Midwest M&A Quarterly Update Q2-14
Bridgepoint Midwest M&A Quarterly Update Q2-14Bridgepoint Midwest M&A Quarterly Update Q2-14
Bridgepoint Midwest M&A Quarterly Update Q2-14Adam Claypool
 
Adapting to Responsive Design - HCID2014, 24 April 2014
Adapting to Responsive Design - HCID2014, 24 April 2014Adapting to Responsive Design - HCID2014, 24 April 2014
Adapting to Responsive Design - HCID2014, 24 April 2014Matt Gibson
 
Jdbc session01
Jdbc session01Jdbc session01
Jdbc session01Niit Care
 
Utilizando o Google de forma estratégica
Utilizando o Google de forma estratégicaUtilizando o Google de forma estratégica
Utilizando o Google de forma estratégicaMário Valney
 
Maven in Java EE project
Maven in Java EE projectMaven in Java EE project
Maven in Java EE projectOndrej Mihályi
 

Destacado (20)

4830609021
48306090214830609021
4830609021
 
Object Oriented Analysis and Design
Object Oriented Analysis and DesignObject Oriented Analysis and Design
Object Oriented Analysis and Design
 
Oops ppt
Oops pptOops ppt
Oops ppt
 
Object Oriented Programming Concepts
Object Oriented Programming ConceptsObject Oriented Programming Concepts
Object Oriented Programming Concepts
 
Client Side Programming with Applet
Client Side Programming with AppletClient Side Programming with Applet
Client Side Programming with Applet
 
A socially Geo-localized Web
A socially Geo-localized WebA socially Geo-localized Web
A socially Geo-localized Web
 
Event handling in netbeans ide
Event handling in netbeans ideEvent handling in netbeans ide
Event handling in netbeans ide
 
Dll injection
Dll injectionDll injection
Dll injection
 
How to-work-with-the-oracle-user-group-team
How to-work-with-the-oracle-user-group-teamHow to-work-with-the-oracle-user-group-team
How to-work-with-the-oracle-user-group-team
 
Bridgepoint Midwest M&A Quarterly Update Q2-14
Bridgepoint Midwest M&A Quarterly Update Q2-14Bridgepoint Midwest M&A Quarterly Update Q2-14
Bridgepoint Midwest M&A Quarterly Update Q2-14
 
Google Developers Overview Deck 2015
Google Developers Overview Deck 2015Google Developers Overview Deck 2015
Google Developers Overview Deck 2015
 
02 hilos
02   hilos02   hilos
02 hilos
 
Adapting to Responsive Design - HCID2014, 24 April 2014
Adapting to Responsive Design - HCID2014, 24 April 2014Adapting to Responsive Design - HCID2014, 24 April 2014
Adapting to Responsive Design - HCID2014, 24 April 2014
 
Jdbc session01
Jdbc session01Jdbc session01
Jdbc session01
 
3 idle mode
3 idle mode3 idle mode
3 idle mode
 
KWD corporate Identity for Irish Pubs Global
KWD corporate Identity for Irish Pubs GlobalKWD corporate Identity for Irish Pubs Global
KWD corporate Identity for Irish Pubs Global
 
Utilizando o Google de forma estratégica
Utilizando o Google de forma estratégicaUtilizando o Google de forma estratégica
Utilizando o Google de forma estratégica
 
Maven in Java EE project
Maven in Java EE projectMaven in Java EE project
Maven in Java EE project
 
Jsp applet
Jsp appletJsp applet
Jsp applet
 
Java programming language basics
Java programming language basicsJava programming language basics
Java programming language basics
 

Similar a Oop 4

Bai06 mot sokythuattrongkethua
Bai06 mot sokythuattrongkethuaBai06 mot sokythuattrongkethua
Bai06 mot sokythuattrongkethuaNhuận Lê Văn
 
bt-mon-lap-trinh-huong-doi-tuong.pdf
bt-mon-lap-trinh-huong-doi-tuong.pdfbt-mon-lap-trinh-huong-doi-tuong.pdf
bt-mon-lap-trinh-huong-doi-tuong.pdfHiNht6
 
Local sakainame 501127 ktl_trình hlmt1 a01 fall 2013 _ modules
Local sakainame   501127 ktl_trình hlmt1 a01 fall 2013 _ modulesLocal sakainame   501127 ktl_trình hlmt1 a01 fall 2013 _ modules
Local sakainame 501127 ktl_trình hlmt1 a01 fall 2013 _ modulesTrần Văn Nam
 
Gia công nhiều trục Delcam Powermill
Gia công nhiều trục Delcam PowermillGia công nhiều trục Delcam Powermill
Gia công nhiều trục Delcam PowermillTrung tâm Advance Cad
 
Các phím tắt trong AutoCAD
Các phím tắt trong AutoCADCác phím tắt trong AutoCAD
Các phím tắt trong AutoCADHọc Cơ Khí
 
✅ Bài tập dựng hình Autocad 2D phần 2 - Nguyen Quang Thuan Youtube (PDF)
✅ Bài tập dựng hình Autocad 2D phần 2 - Nguyen Quang Thuan Youtube (PDF)✅ Bài tập dựng hình Autocad 2D phần 2 - Nguyen Quang Thuan Youtube (PDF)
✅ Bài tập dựng hình Autocad 2D phần 2 - Nguyen Quang Thuan Youtube (PDF)Thuận Nguyễn Quang
 
Tài liệu hướng dẫn lập trình trên Artcam pro
Tài liệu hướng dẫn lập trình trên Artcam proTài liệu hướng dẫn lập trình trên Artcam pro
Tài liệu hướng dẫn lập trình trên Artcam proCadcamcnc Học
 
Chuong9 lop vadoituong
Chuong9 lop vadoituongChuong9 lop vadoituong
Chuong9 lop vadoituongMinh Ngoc Tran
 
1 nh dang-acad-2012-phan2_d
1 nh dang-acad-2012-phan2_d1 nh dang-acad-2012-phan2_d
1 nh dang-acad-2012-phan2_dckm2000
 
10. C - Function And Operator Overload
10. C   - Function And Operator Overload10. C   - Function And Operator Overload
10. C - Function And Operator OverloadDarian Pruitt
 
Ky thuat do_hoa
Ky thuat do_hoaKy thuat do_hoa
Ky thuat do_hoaDee Dee
 

Similar a Oop 4 (20)

Bai tap thuc hanh
Bai tap thuc hanhBai tap thuc hanh
Bai tap thuc hanh
 
Bai06 mot sokythuattrongkethua
Bai06 mot sokythuattrongkethuaBai06 mot sokythuattrongkethua
Bai06 mot sokythuattrongkethua
 
C9 templates
C9 templatesC9 templates
C9 templates
 
AIw06_Exercises.pptx
AIw06_Exercises.pptxAIw06_Exercises.pptx
AIw06_Exercises.pptx
 
bt-mon-lap-trinh-huong-doi-tuong.pdf
bt-mon-lap-trinh-huong-doi-tuong.pdfbt-mon-lap-trinh-huong-doi-tuong.pdf
bt-mon-lap-trinh-huong-doi-tuong.pdf
 
Local sakainame 501127 ktl_trình hlmt1 a01 fall 2013 _ modules
Local sakainame   501127 ktl_trình hlmt1 a01 fall 2013 _ modulesLocal sakainame   501127 ktl_trình hlmt1 a01 fall 2013 _ modules
Local sakainame 501127 ktl_trình hlmt1 a01 fall 2013 _ modules
 
Gia công nhiều trục Delcam Powermill
Gia công nhiều trục Delcam PowermillGia công nhiều trục Delcam Powermill
Gia công nhiều trục Delcam Powermill
 
Slide do an
Slide do anSlide do an
Slide do an
 
Bai08 10 java_fx
Bai08 10 java_fxBai08 10 java_fx
Bai08 10 java_fx
 
Bai giang bai19
Bai giang bai19Bai giang bai19
Bai giang bai19
 
Các phím tắt trong AutoCAD
Các phím tắt trong AutoCADCác phím tắt trong AutoCAD
Các phím tắt trong AutoCAD
 
✅ Bài tập dựng hình Autocad 2D phần 2 - Nguyen Quang Thuan Youtube (PDF)
✅ Bài tập dựng hình Autocad 2D phần 2 - Nguyen Quang Thuan Youtube (PDF)✅ Bài tập dựng hình Autocad 2D phần 2 - Nguyen Quang Thuan Youtube (PDF)
✅ Bài tập dựng hình Autocad 2D phần 2 - Nguyen Quang Thuan Youtube (PDF)
 
Ktdh (1)
Ktdh (1)Ktdh (1)
Ktdh (1)
 
J2 me 07_2
J2 me 07_2J2 me 07_2
J2 me 07_2
 
Tài liệu hướng dẫn lập trình trên Artcam pro
Tài liệu hướng dẫn lập trình trên Artcam proTài liệu hướng dẫn lập trình trên Artcam pro
Tài liệu hướng dẫn lập trình trên Artcam pro
 
Chuong9 lop vadoituong
Chuong9 lop vadoituongChuong9 lop vadoituong
Chuong9 lop vadoituong
 
1 nh dang-acad-2012-phan2_d
1 nh dang-acad-2012-phan2_d1 nh dang-acad-2012-phan2_d
1 nh dang-acad-2012-phan2_d
 
10. C - Function And Operator Overload
10. C   - Function And Operator Overload10. C   - Function And Operator Overload
10. C - Function And Operator Overload
 
Nhom13
Nhom13Nhom13
Nhom13
 
Ky thuat do_hoa
Ky thuat do_hoaKy thuat do_hoa
Ky thuat do_hoa
 

Más de Thai Hoc Vu

Más de Thai Hoc Vu (14)

Ngôn ngữ tiếng nhật hiện đại
Ngôn ngữ tiếng nhật hiện đạiNgôn ngữ tiếng nhật hiện đại
Ngôn ngữ tiếng nhật hiện đại
 
Bài tập ôn lập trình
Bài tập ôn lập trìnhBài tập ôn lập trình
Bài tập ôn lập trình
 
Giáo trình uốn tóc phần 1
Giáo trình uốn tóc phần 1Giáo trình uốn tóc phần 1
Giáo trình uốn tóc phần 1
 
Danh mục cable
Danh mục cableDanh mục cable
Danh mục cable
 
OOP-9
OOP-9OOP-9
OOP-9
 
Oop 7
Oop 7Oop 7
Oop 7
 
Oop 5
Oop 5Oop 5
Oop 5
 
Oop 3
Oop 3Oop 3
Oop 3
 
Oop 2
Oop 2Oop 2
Oop 2
 
Oop 1
Oop 1Oop 1
Oop 1
 
Oop 0
Oop 0Oop 0
Oop 0
 
Oop 13
Oop 13Oop 13
Oop 13
 
Oop 11
Oop 11Oop 11
Oop 11
 
Oop 6
Oop 6Oop 6
Oop 6
 

Oop 4

  • 1. Bài 4: Lập trình đồ họa Programming Graphics Giảng viên: Nguyễn Thị Minh Huyền nguyenthiminhhuyen@hus.edu.vn Đỗ Thanh Hà dothanhha@hus.edu.vn
  • 2. Tài liệu tham khảo  BigJava – chương 5 2009-2010 OOP - http://mim.hus.edu.vn/elearning 2
  • 3. Tạo cửa sổ khung (frame) • Sử dụng lớp JFrame JFrame frame = new JFrame(); frame.setSize(300, 400); frame.setTitle("An Empty Frame"); frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE); frame.setVisible(true); • import javax.swing.*; • Ví dụ : •EmptyFrameViewer.java (BigJava, ch05) 2009-2010 OOP - http://mim.hus.edu.vn/elearning 3
  • 4. Vẽ hình (1)  paintComponent: là phương thức được gọi mỗi khi cần vẽ lại một thành phần đồ hoạ  VD: thành phần hình chữ nhật được xây dựng nhờ thừa kế (từ khoá extends) lớp JComponent public class RectangleComponent extends JComponent { public void paintComponent(Graphics g){ // Recover Graphics2D Graphics2D g2 = (Graphics2D) g; ... } } 2009-2010 OOP - http://mim.hus.edu.vn/elearning 4
  • 5. Vẽ hình (2)  Lớp Graphics: cho phép thao tác với các trạng thái đồ họa (vd: màu hiện tại)  Lớp Graphics2D: có các phương thức để vẽ hình khối.  Phải ép kiểu để thu được đối tượng g2 thuộc lớp Graphics2D từ tham biến g thuộc lớp Graphics  Vẽ hình: Rectangle box = new Rectangle(5, 10, 20, 30); g2.draw(box);  Các lớp đồ hoạ thuộc gói java.awt 2009-2010 OOP - http://mim.hus.edu.vn/elearning 5
  • 6. VD: vẽ hình chữ nhật  Xây dựng 2 lớp:  RectangleComponent có phương thức paintComponent để vẽ 2 hình chữ nhật  RectangleViewer có hàm main làm các việc sau:  Vẽ một khung  Xây dựng một đối tượng thuộc lớp thành phần hình chữ nhật: RectangleComponent component = new RectangleComponent();  Thêm thành phần vào khung: frame.add(component); /* trước version 5 cần dùng lệnh frame.getContentPane().add(component); */  Hiển thị khung (setVisible)  RectangleComponent.java, RectangleViewer.java (BigJava ch05) 2009-2010 OOP - http://mim.hus.edu.vn/elearning 6
  • 7. Ứng dụng con (Applet)  Applets là các chương trình chạy trong một trình duyệt Web  Để cài đặt một applet, sử dụng đoạn mã kiểu như sau (tương tự như vẽ thành phần đồ hoạ, ngoại trừ vài thay đổi): public class MyApplet extends JApplet // thay cho JComponent { public void paint(Graphics g) // thay cho paintComponent { // Recover Graphics2D Graphics2D g2 = (Graphics2D) g; // Drawing instructions go here . . . } }  Để chạy một applet, cần một tệp HTML có thẻ applet  Một tệp HTML có thể có nhiều applets; mỗi applet có một thẻ  Sử dụng một appletviewer hoặc một trình duyệt có hỗ trợ Java để chạy applet 2009-2010 OOP - http://mim.hus.edu.vn/elearning 7
  • 8. Applets – Ví dụ  Tệp ví dụ (BigJava, ch05): RectangleApplet.java, RectangleApplet.html, RectangleAppletExplained.html  Dùng appletviewer: appletviewer RectangleApplet.html 2009-2010 OOP - http://mim.hus.edu.vn/elearning 8
  • 9. Các hình đồ họa (1)  Rectangle, Ellipse2D.Double, Line2D.Double: mô tả các hình  Các lớp .Double này là các lớp trong (inner class), cách sử dụng không khác các lớp thông thường, tuy nhiên khi khai báo thư viện thì khai báo lớp ngoài của chúng:  import java.awt.geom.Ellipse2D; // không có .Double  Vẽ hình: Tạo đối tượng hình rồi thực hiện lệnh vẽ 2009-2010 OOP - http://mim.hus.edu.vn/elearning 9
  • 10. Các hình đồ họa (2)  Vẽ hình elíp: Ellipse2D.Double ellipse = new Ellipse2D.Double(x, y, width, height); g2.draw(ellipse);  Vẽ đường thẳng: Line2D.Double segment = new Line2D.Double(x1, y1, x2, y2); hoặc Point2D.Double from = new Point2D.Double(x1, y1); Point2D.Double to = new Point2D.Double(x2, y2); Line2D.Double segment = new Line2D.Double(from, to); g2.draw(segment);  Vẽ một xâu: g2.drawString("Message", 50, 100); 2009-2010 OOP - http://mim.hus.edu.vn/elearning 10
  • 11. Các hình đồ họa (3) Elíp 2009-2010 OOP - http://mim.hus.edu.vn/elearning 11
  • 12. Màu sắc  Các màu chuẩn: Color.BLUE, Color.RED, Color.PINK, v.v…  Pha màu RGB (red, green, blue) với các giá trị trong khoảng 0.0F và 1.0F (F = float)  Color magenta = new Color(1.0F, 0.0F, 1.0F);  Thiết lập màu đồ hoạ:  g2.setColor(magenta);  Màu đã thiết lập được dùng để vẽ và tô màu các hình  g2.fill(rectangle); // tô với màu hiện tại của g2 2009-2010 OOP - http://mim.hus.edu.vn/elearning 12
  • 13. Đọc dữ liệu văn bản  1 ứng dụng đồ hoạ có thể lấy dữ liệu vào bằng cách hiển thị hộp thoại với lớp JOptionPane  Phương thức showInputDialog  dùng để hiển thị một lời nhắc và đợi người dùng nhập dữ liệu  kết quả trả về là một xâu mà người dùng đã nhập  Ví dụ  String input = JOptionPane.showInputDialog("Enter x"); double x = Double.parseDouble(input);  VD chương trình (BigJava, ch05) ColorViewer.java, ColoredSquareComponent.java 2009-2010 OOP - http://mim.hus.edu.vn/elearning 13
  • 14. Vẽ hình phức tạp (1)  VD:  Vẽ 2 xe ô tô: 1 ở góc trên bên trái của màn hình, 1 ở góc dưới bên phải  Lời khuyên:  Tạo 1 lớp riêng cho mỗi hình  class Car { . . . public void draw(Graphics2D g2) { // Drawing instructions . . . } }  Vẽ nháp trên giấy khi cần vẽ các hình phức tạp 2009-2010 OOP - http://mim.hus.edu.vn/elearning 14
  • 15. Vẽ hình phức tạp (2) 2009-2010 OOP - http://mim.hus.edu.vn/elearning 15
  • 16. Vẽ hình phức tạp (3)  Cụ thể:  Tính vị trí góc dưới bên phải màn hình trong phương thức paintComponent int x = getWidth() - 60; int y = getHeight() - 30; Car car2 = new Car(x, y);  getWidth và getHeight áp dụng trên đối tượng thực hiện phương thức paintComponent  Nếu cửa sổ khung thay đổi kích thước, phương thức paintComponent sẽ được gọi và vị trí của xe được tính lại  Chương trình (BigJava, ch05):  CarComponent.java  Car.java  CarViewer.java 2009-2010 OOP - http://mim.hus.edu.vn/elearning 16
  • 17. So sánh thông tin dạng số và trực quan  Tính giao điểm giữa đường tròn và đường thẳng  Đường tròn có bán kính r = 100 và tâm (a, b) = (100, 100)  Đường thẳng có giá trị tham số x  Tính giao điểm:  Phương trình đường tròn với bán kính r và tâm (a, b) là  (x – a)2 + (y – b)2 = r2  Biết x, tính được giá trị của y với lệnh Java:  double root = Math.sqrt(r * r - (x - a) * (x - a)); double y1 = b + root; double y2 = b - root;  Kết quả trực quan trên hình vẽ và kết quả số thu được phải giống nhau 2009-2010 OOP - http://mim.hus.edu.vn/elearning 17
  • 18. Giao điểm của đường thẳng và đường tròn  Chương trình:  IntersectionComponent.java  IntersectionViewer.java  LabeledPoint.java 2009-2010 OOP - http://mim.hus.edu.vn/elearning 18