Canvas trong Java

Canvas trong Java, cũng như khi bạn vẽ một bức hình, bạn cần phải có giấy để vẽ. Chuyên nghiệp hơn thì bạn phải có vải để vẽ. Giấy hay vải chính là Canvas. Nói chính xác thì Canvas là một Component có hình dạng hình chữ nhật và “trắng tinh” để bạn có thể vẽ vời lên đó. Bạn có thể vẽ lên Frame, Applet hay Canvas.

Ứng dụng của bạn muốn vẽ “cái gì đó” lên Canvas thì phải là subclass của lớp Canvas.

Bạn còn nhớ phải làm sao để có một subclass không? Chỉ cần dùng từ khóa extends thôi.

Bạn cũng lưu ý đến method paint(Graphics graphics). Chúng ta dùng phương thức này, nói chính xác hơn là overriden phương thức này trong các ứng dụng để vẽ bất cứ cái gì lên các Component.

Nói tóm lại, muốn vẽ vời cái gì, bạn overriden phương thức paint(Graphics graphics). Còn vẽ lên cái gì thì tùy thuộc yêu cầu của ứng dụng.

Như dưới đây là vẽ lên Canvas thì ta sẽ extends Canvas để tạo một subclass của Canvas rồi “chế biến” paint() để vẽ.

Trong các ví dụ trước khi bạn extends Applet thì bạn đã dùng paint() đễ vẽ lên Applet.

Đây là bộ khung để bạn tạo một ứng dụng Canvas

import java.awt.*;
public class MyCanvas extends Canvas
{
public MyCanvas()
{
//...
}
public void paint(Graphics g)
{
/* We override the method here. The graphics
* code comes here within the method body. */
}
}

Không có gì quá khó hiểu.

Chúng ta thử vẽ vời một chút.

Bạn vào Eclipse tạo một class mới tên là MyCanvas.

Sau đó bạn copy và paste đoạn code trên vào để làm bộ khung.

Vẽ vời thêm mấy chữ như sau:

import java.awt.*;
public class MyCanvas extends Canvas
{
    public MyCanvas()
    {
        //...

       setBackground (Color.yellow);

    }
    public void paint(Graphics g)
    {
        /* We override the method here. The graphics
         * code comes here within the method body. */
        g.drawString ("Good Morning", 50, 50);
         g.drawString ("Good Afternoon", 50, 75);
         g.drawString ("Good Night", 50, 100);
    }
}

Save lại và chạy thử.

Không có gì xảy ra cả, không thấy chữ nghĩa nào cả??

Lý do là vì MyCanvas của chúng ta không phải ngô cũng không phải khoai.

Nó chưa là một Application, cũng không phải là Applet.

Bạn cần tạo một Applet hay một Application, sau đó tạo một Object từ MyCanvas. Cuối cùng dùng cú pháp add để đặt Canvas Object đó vào Applet hay Application.

Bạn có thể viết chung trong một File. Tuy nhiên để dễ hiểu chúng ta tách riêng ra.

Bạn tạo một class mới tên là CanvasApplet (Nhớ là chúng ta vẫn đang sử dụng Packet AppletPro1 từ đầu đến giờ)

Sau đó các bước sau là rất đơn giản.

import java.applet.*;
import java.awt.*;

public class CanvasApplet extends Applet{

     MyCanvas canvas;
    public void init()
    {
        setLayout(new BorderLayout());
        canvas = new MyCanvas();
        add("Center", canvas);
    }

}

Chỉ xin bạn lưu ý là biến canvas phải để ngoài. Nếu bạn sửa lại như sau thì bạn sẽ không thấy gì cả:

import java.applet.*;
import java.awt.*;

public class CanvasApplet extends Applet{

    public void init()
    {
        setLayout(new BorderLayout());
        MyCanvas canvas = new MyCanvas();
        add("Center", canvas);
    }

}

Tóm lại bạn dùng Canvas cũng như Button hay Label…mà thôi.

Muốn vẽ gì bạn cứ vẽ lên Canvas.

Sau đó đặt nó vào Applet.

Ví dụ về việc sử dụng Font trong Paint .

import java.awt.Graphics;

import javax.swing.JComponent;
import javax.swing.JFrame;

class MyCanvas extends JComponent {

  public void paint(Graphics g) {
    g.drawString (Long.toString(System.currentTimeMillis()), 10, 30);
    repaint(1000);
  }
}

public class SettingFont {
  public static void main(String[] a) {
    JFrame window = new JFrame();
    window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    window.setBounds(30, 30, 300, 300);
    window.getContentPane().add(new MyCanvas());
    window.setVisible(true);
  }
}

Kết quả:

Tham khảo thêm: http://www.vn4000.com/content/view/4703/35/         

2 thoughts on “Canvas trong Java

  1. Cảm ơn bạn.
    “Bạn tạo một class mới tên là CanvasApplet (Nhớ là chúng ta vẫn đang sử dụng Packet AppletPro1 từ đầu đến giờ)” ->> Bạn cho mình xin link bài viết đầu tiên được không ạ, để mình tiện theo dõi. Bắt đầu đọc từ đây khá khó hiểu. Thank

Trả lời

Mời bạn điền thông tin vào ô dưới đây hoặc kích vào một biểu tượng để đăng nhập:

WordPress.com Logo

Bạn đang bình luận bằng tài khoản WordPress.com Đăng xuất /  Thay đổi )

Google photo

Bạn đang bình luận bằng tài khoản Google Đăng xuất /  Thay đổi )

Twitter picture

Bạn đang bình luận bằng tài khoản Twitter Đăng xuất /  Thay đổi )

Facebook photo

Bạn đang bình luận bằng tài khoản Facebook Đăng xuất /  Thay đổi )

Connecting to %s