Bắt đầu làm quen với lập trình java

Thảo luận trong 'Tư vấn - Du học - Tuyển sinh' bắt đầu bởi t11nguyen, 20 Tháng sáu 2017.

  1. t11nguyen

    t11nguyen Member Thành viên

    Bài viết:
    141
    Đã được thích:
    0
    Diendanraovataz.net - Diễn đàn rao vặt - Đăng tin mua bán - Quảng cáo miễn phí - Hiệu quả - Chào mừng bạn tới với series lập trình đồ họa 2D với Java. Series này cốt yếu nhắm tới Các bạn mới khởi đầu bước vào lập trình đồ họa cơ bản.

    Đồ họa Vector
    Đồ họa trong máy tính với hai mẫu là đồ họa vector và đồ họa raster. Trong ngừng thi côngĐây đồ họa raster được dựng nên từ tụ hội những điểm ảnh (pixel), còn vector được dựng từ những đối tượng đồ họa hạ tầng như điểm, tuyến đường thẳng, tuyến đường cong… những đối tượng đồ họa này được tính toán bằng những phương trình toán học. Cả hai mẫu đồ họa này đều với ưu và nhược điểm riêng. Đồ họa vector với những ưu điểm sau:

    • Kích thước nhỏ
    • Có thể zoom ko ngừng
    • Di chuyển, phóng to, xoay hình… ko làm cho giảm chất lượng hình
    Thư viện đồ họa 2D của Java tương trợ cả đồ họa vector và raster.



    Cơ chế vẽ của Java
    Bât cứ đoạn code nào bạn tiêu dùng để vẽ ra thứ gì cũng được đặt trong phương thức paintComponent(), phương thức này được override từ lớp JPanel. Phương thức này tự động được gọi bởi phương thức paint() (trong lớp java.awt.Component), ngoài phương thức paintComponent()còn với hai phương thức khác được gọi cùng nữa là paintBorder() và paintChildren(). ví như muốn bạn với thể override cả hai phương thức ngừng thi côngĐây cũng được nhưng thường thì cũng ko nhu yếu lắm. Trong series này thì chúng ta chỉ tiêu dùng tới paintComponent().

    Đối tượng Graphics
    thông số của phương thức paintComponent() là một đối tượng lớp Graphics. Đối tượng này cho phép chúng ta vẽ những vật thể lên JPanel. tuy nhiên trong Java còn với lớp Graphics2D kế thừa từ lớp Graphics sản xuất những phương thức cao cấp hơn để tương trợ cho người lập trình vẽ một phương pháp tiện lợi hơn.

    Đối tượng này được khởi tạo bởi hệ thống và tự động được truyền vào phương thức paintComponent() lúc phương thức này được gọi. Ngoài phương thức paintComponent() đối tượng Graphics còn được truyền vào hai phương thức đã nói trên là paintBorder() và paintChildren(). ví như một trong những phương thức này làm thay đổi tình trạng của đối tượng Graphics thì sở hữu thể dẫn tới một số vấn đề nên thường thì chúng ta sẽ tạo một đối tượng khác từ đối tượng Graphics gốc bằng phương thức create() và hủy đối tượng mới này sở hữu phương thức dispose(). nếu như chúng ta chỉ thay đổi những tính chất thường ngày như màu, font chữ… thì ko cần tạo mới, nhưng nếu như chúng ta thay đổi những tính chất cao cấp bằng những phép biến đổi nghe đâu cắt hình, xoay hình, zoom to nhỏ… thì chúng ta phải tạo một đối tượng Graphics khác.

    Code tỉ dụ mẫu
    SimpleEx.java

    import java.awt.EventQueue;
    import java.awt.Graphics;
    import java.awt.Graphics2D;
    import javax.swing.JFrame;
    import javax.swing.JPanel;

    class Surface extends JPanel

    private void doDrawing(Graphics g)

    Graphics2D g2d = (Graphics2D) g;
    g2d.drawString("Java 2D", 50, 50);

    @Override
    public void paintComponent(Graphics g)

    super.paintComponent(g);
    doDrawing(g);


    public class BasicEx extends JFrame

    public BasicEx()

    initUI();

    private void initUI()

    add(new Surface());

    setTitle("Simple Java 2D example");
    setSize(300, 200);
    setLocationRelativeTo(null);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    public static void main(String[] args)

    EventQueue.invokeLater(new Runnable()

    @Override
    public void run()
    BasicEx ex = new BasicEx();
    ex.setVisible(true);

    );


    Đoạn code trên vẽ một đoạn text lên JPanel.

    một
    hai
    3
    class Surface extends JPanel
    ...

    Chúng ta tạo lớp Surface kế thừa từ lớp JPanel. Lớp này là lớp chính sử dụng để vẽ.

    Phân tích về json tại đây: xem thêm
    Graphics2D g2d = (Graphics2D) g;
    Chúng ta tạo đối tượng Graphics2D để tận dụng một số tính năng cao cấp mà lớp Graphics ko sở hữu.

    một
    g2d.drawString("Java 2D", 50, 50);
    Phương thức drawString() “vẽ” một đoạn text tại vị trí (50, 50).



    @Override
    public void paintComponent(Graphics g)

    super.paintComponent(g);
    doDrawing(g);

    phần nhiều mọi thứ đều được vẽ bên trong phương thức paintComponent(). Trong Đó super.paintComponent() gọi lại phương thức paintComponent() của lớp cha là lớp JPanel, mà trong phương thức này ở lớp cha chỉ đơn thuần là vẽ một cửa sổ trống ko, tức là lúc gọi phương thức này chúng ta làm công việc là xóa trắng phần nhiều cửa sổ, việc này rất hữu dụng lúc tạo hiệu ứng đi lại. ngoài ra ở đây mình ko vẽ trực tiếp trong phương thức paintComponent() mà tạo phương thức doDrawing() rồi vẽ trong Đó, mình làm thế là vì… thích

    một
    hai
    3
    private void initUI()
    ...

    Phương thức initUI() làm công việc khởi tạo giao diện cho ứng dụng.

    một
    add(new Surface());
    Chúng ta thêm Surface vào JFrame.


    EventQueue.invokeLater(new Runnable()

    @Override
    public void run()
    BasicEx ex = new BasicEx();
    ex.setVisible(true);

    );
    Phương thức invokeLater() sẽ chạy ứng dụng của chúng ta trong một luồng do EventQueue quản lý. Thực ra bạn cũng ko cần tới EventQueue làm gì, chỉ cần tạo một đối tượng BasicEx rồi setVisible(true) là sở hữu thể chạy được nhưng trên tài liệu của Oracle thì lại khuyên chúng ta đặt bên trong EventQueue vì lý do là làm tương tự sẽ đảm bảo an toàn cho ứng dụng (mình cũng ko hiểu tại sao) nên thôi thì mình cứ làm vậy

    Bài học kết thúc tại đây, chúc Cả nhà thành công trong học tập. Theo dõi bài học tiếp theo tại đây.
     
    Cùng đọc NỘI QUY DIỄN ĐÀN và ý thức thực hiện cùng BQT xây dựng cộng đồng thêm vững mạnh bạn nhé
    ***** Xin đừng Spam vì một diễn đàn trong sạch *****
Địa chỉ thu mua do cu ho chi minh uy tín, Official Premium Account Reseller Premiumkeystore.com Easily, Instant delivery & Trusted.

Chia sẻ trang này