Diễn đàn rao vặt Tuổi trẻ
Bài học java cơ bản FfWzt02
Diễn đàn rao vặt Tuổi trẻ
Bài học java cơ bản FfWzt02
 


#1

20.06.17 10:53

avatar

tuan11nguyen

Thành viên gắn bó
0988485689 https://www.facebook.com/
Thành viên gắn bó
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ọp 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 phố thẳng, tuyến phố 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 thế 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.
hướng dẫn tu hoc nodejs

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 thiết 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 cho thay đổi trạng thái của đối tượng Graphics thì với 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 với phương thức dispose(). ví như chúng ta chỉ thay đổi những tính chất 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 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ẽ 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 sử dụng để vẽ.
Nhận định về json tại đây: hoc json co ban
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 thuần là vẽ 1 cửa sổ trống không, tức 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 ứng 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 ứng 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 ứng 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ề học lập trình online miễn phí
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.

Quyền hạn của bạn

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