Tài liệu tự học lập trình java

Xem chủ đề cũ hơn Xem chủ đề mới hơn Go down

Tài liệu tự học lập trình java

Bài gửi by t11nguyen on 20/6/2017, 11:46

Chào mừng bạn đến mang series lập trình đồ họa 2D mang Java. Series này chính yếu nhắm đến Anh chị em mới bắt đầu bước vào lập trình đồ họa căn bản.

Đồ họa Vector
Đồ họa trong máy tính mang 2 chiếc là đồ họa vector và đồ họa raster. Trong chậm triển khai đồ họa raster được dựng nên trong khoảng tập hợp các điểm ảnh (pixel), còn vector được dựng trong khoảng các đối tượng đồ họa cơ sở như điểm, con đường thẳng, con đường cong… các đối tượng đồ họa này được tính toán bằng các phương trình toán học. Cả 2 chiếc đồ họa này đều mang ưu và nhược điểm riêng. Đồ họa vector mang các điểm mạnh sau:


  • Kích thước nhỏ
  • Có thể zoom không dừng
  • Di chuyển, phóng lớn, xoay hình… không khiến cho giảm chất lượng hình

Thư viện đồ họa 2D của Java hỗ trợ cả đồ họa vector và raster.
chỉ dẫn https://vietpro.net.vn/lap-trinh-nodejs


Cơ chế vẽ của Java
Bât cứ đoạn code nào bạn dùng để vẽ ra thứ gì cũng được đặt trong phương thức paintComponent(), phương thức này được override trong khoảng 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 mang 2 phương thức khác được gọi cộng nữa là paintBorder() và paintChildren(). nếu muốn bạn mang thể override cả 2 phương thức chậm triển khai cũng được nhưng thường thì cũng không cần thiết lắm. Trong series này thì chúng ta chỉ dùng đến paintComponent().

Đối tượng Graphics
tham số của phương thức paintComponent() là 1 đối tượng lớp Graphics. Đối tượng này cho phép chúng ta vẽ các vật thể lên JPanel. không những thế trong Java còn mang lớp Graphics2D kế thừa trong khoảng lớp Graphics cung ứng các phương thức cao cấp hơn để hỗ trợ cho người lập trình vẽ 1 cách thuậ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() khi 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 2 phương thức đã kể trên là paintBorder() và paintChildren(). nếu 1 trong các phương thức này khiến cho đổi thay hiện trạng của đối tượng Graphics thì mang thể dẫn đến 1 số vấn đề nên thường thì chúng ta sẽ tạo 1 đối tượng khác trong khoảng đối tượng Graphics gốc bằng phương thức create() và hủy đối tượng mới này mang phương thức dispose(). nếu chúng ta chỉ đổi thay các thuộc tính thông thường như màu, font chữ… thì không cần tạo mới, nhưng nếu chúng ta đổi thay các thuộc tính cao cấp bằng các phép biến đổi dường như cắt hình, xoay hình, zoom lớn nhỏ… thì chúng ta phải tạo 1 đối tượng Graphics khác.

Code thí 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ẽ 1 đoạn text lên JPanel.

1
2
3
class Surface extends JPanel
...

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

Nhận định về json tại đây: https://vietpro.net.vn/hoc-json
Graphics2D g2d = (Graphics2D) g;
Chúng ta tạo đối tượng Graphics2D để tận dụng 1 số tính năng cao cấp mà lớp Graphics không mang.

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




@Override
public void paintComponent(Graphics g)

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

hầu hết mọi thứ đều được vẽ bên trong phương thức paintComponent(). Trong chậm triển khai 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 giản là vẽ 1 cửa sổ trống không, nghĩa là khi gọi phương thức này chúng ta khiến cho công tác là xóa trắng hầu hết cửa sổ, việc này rất có ích khi tạo hiệu ứng chuyển động. không những thế ở đây mình không vẽ trực tiếp trong phương thức paintComponent() mà tạo phương thức doDrawing() rồi vẽ trong chậm triển khai, mình khiến cho thế là vì… thích

1
2
3
private void initUI()
...

Phương thức initUI() khiến cho công tác khởi tạo giao diện cho áp dụng.

1
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 áp dụng của chúng ta trong 1 luồng do EventQueue điều hành. Thực ra bạn cũng không cần đến EventQueue khiến cho gì, chỉ cần tạo 1 đối tượng BasicEx rồi setVisible(true) là mang 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à khiến cho như vậy sẽ đảm bảo an toàn cho áp dụng (mình cũng không hiểu tại sao) nên thôi thì mình cứ khiến cho vậy
chỉ dẫn về https://vietpro.net.vn/hoc-lap-trinh-web-php-co-ban
Bài học chấm dứt tại đây, chúc Anh chị em thành công trong học tập. Theo dõi bài học tiếp theo tại đây.

t11nguyen
Binh Nhất
Binh Nhất

Tổng số bài gửi : 36
Tuổi : 28
Đăng ký ngày : 22/04/2017

Xem lý lịch thành viên

Về Đầu Trang Go down

Xem chủ đề cũ hơn Xem chủ đề mới hơn Về Đầu Trang


 
Permissions in this forum:
Bạn không có quyền trả lời bài viết