Tải bản đầy đủ (.ppt) (33 trang)

BÀI TẬP LỚN MÔN LẬP TRÌNH JAVA Tìm hiểu về đồ họa trong Java vẽ chữ, vẽ hình 2D và 3D. Viết chương trình vẽ một số hình (chữ nhật, tròn, trụ, lập phương) với kích thước và màu sắc

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.26 MB, 33 trang )

BÀI TẬP LỚN
BÀI TẬP LỚN
MÔN LẬP TRÌNH JAVA
MÔN LẬP TRÌNH JAVA
Đề tài 6
Đề tài 6
:
: “Tìm hiểu về đồ họa trong Java: vẽ chữ, vẽ
hình 2D và 3D. Viết chương trình vẽ một số hình (chữ
nhật, tròn, trụ, lập phương) với kích thước và màu sắc
do người sử dụng xác định.”
Giảng viên hướng dẫn: Ngô Công Thắng
Nhóm sinh viên thực hiện: Nguyễn Thị Huyền
Chu Thị Thanh Hương
Vũ Thị Thùy Linh
Nguyễn Thị Xuân
Nội dung chính
Nội dung chính
I. Giới thiệu về hệ thống đồ hoạ của Java
1. Các khái niệm cơ bản
1.1. Component
1.2. Container
1.3. Graphics
1.4. Color
1.5. Font
1.6. FontMetrics
1.7. Layout Manager
Nội dung chính
Nội dung chính
II. Vẽ chữ
1. Một số khái niệm liên quan


2. Vẽ chữ
2.1. Các thư viện phục vụ cho vẽ chữ có trong java
2.2. Chương trình vẽ chữ


III. Vẽ hình 2D trong Java
1. Không gian người dùng và không gian thiết bị
2. Đồ họa với Graphics2D


3. Hệ toạ độ
4. Kẻ đường thẳng
5. Vẽ hình chữ nhật 2D
Nội dung chính
Nội dung chính
IV. Vẽ hình 3D trong Java
1. Vẽ hình chữ nhật 3 chiều (3D rectangle)
2. Vẽ vòng tròn và hình ellip
B. CHƯƠNG TRÌNH VẼ MỘT SỐ HÌNH: CHỮ NHẬT,
TRÒN, TRỤ, LẬP PHƯƠNG.


I. Giới thiệu về hệ thống đồ hoạ của Java
Thiết kết API cho lập trình đồ hoạ của Java là một ví dụ
Thiết kết API cho lập trình đồ hoạ của Java là một ví dụ
hoàn hảo về cách dùng lớp, sự kết thừa và giao diện.
hoàn hảo về cách dùng lớp, sự kết thừa và giao diện.
API cho lập trình đồ hoạ bao gồm một tập rất nhiều lớp
API cho lập trình đồ hoạ bao gồm một tập rất nhiều lớp
nhằm trợ giúp xây dựng các thành phần giao diện khác

nhằm trợ giúp xây dựng các thành phần giao diện khác
nhau như: cửa sổ, nút ấn, ô văn bản, menu, hộp kiểm…
nhau như: cửa sổ, nút ấn, ô văn bản, menu, hộp kiểm…
Một quan hệ kế thừa giữa các thành phần này được mô
Một quan hệ kế thừa giữa các thành phần này được mô
tả như sau:
tả như sau:
I. Giới thiệu về hệ thống đồ hoạ của Java
1. Các khái niệm cơ bản
1.1. Component

Component là một đối tượng có biểu diễn đồ họa được
hiển thị trên màn hình mà người dùng có thể tương tác
được. Chẳng hạn như những nút nhấn (button), những
checkbox, những scrollbar,… Lớp Component là một
lớp trừu tượng. là lớp cha của mọi lớp giao diện người
dùng. Lớp này cung cấp các thuộc tính, hành vi cơ bản
nhất của tất cả các thành phần giao diện.
1. Các khái niệm cơ bản
1.2. Container:
Là đối tượng vật chứa hay những đối tượng có khả
năng quản lý và nhóm các đối tượng khác lại. Những đối
tượng con thuộc thành phần awt như: button, checkbox,
radio button, scrollbar, list,… chỉ sử dụng được khi ta
đưa nó vào khung chứa (container).
1.3. Graphics:
Là lớp trừu tượng cung cấp ngữ cảnh đồ hoạ để vẽ các
đối tượng đồ hoạ như: đường thẳng, đường tròn, hình
ảnh…
1.4. Color:

Lớp này biểu diễn một mầu sắc.
1.5. Font:
Lớp này biểu thị cho một font đồ hoạ.
1. Các khái niệm cơ bản
1.6. FontMetrics:
Là một lớp trừu tượng dùng để xác định các thuộc tính
của Font. Tất cả các thành phần đồ hoạ trong thư viện
Swing được nhóm trong gói javax.swing. Đa số các
thành phần trong thư viện Swing đều có tiếp đầu ngữ là
‘J’, Ví dụ: một nút lệnh trong thư viện Swing có tên là
JButton, một memu có tên là JMenu.
1.7. Layout Manager
Khung chứa container nhận các đối tượng từ bên
ngoài đưa vào và nó phải biết làm thế nào để tổ chức
sắp xếp “chỗ ở” cho các đối tượng đó. Mỗi đối tượng
khung chứa đều có một bộ quản lý chịu trách nhiệm
thực hiện công việc đấy đó là bộ quản lý trình bày
(Layout Manager).


II. Vẽ chữ
1. Một số khái niệm liên quan
-Font: là 1 tập hoàn chỉnh các chữ cái, các con số, các dấu
câu, và các kí tự đặc biệt, theo một kiểu loại, định
dạng (đậm, nét), hình dáng (thẳng hay nghiêng), kích
cỡ phù hợp và có thể phân biệt sự khác nhau.
+ Có ba loại phông chữ : font Bitmap, font PotScript và font
True Type. Mỗi loại có hai phiên bản : font màn
hình(screen font) và máy in (printer font)
- Chân chữ hay đường nền (baseline): đường thẳng mà

mọi ký tự trong một chuỗi cùng nằm trên đó.
- Thân chữ (ascent): Chiều cao từ chân chữ lên đến đầu
chữ
. - Đuôi chữ (descent): Khoảng cách lớn nhất từ chân chữ
trở xuống của các ký tự. Các chữ thường như g hay y
thường có phần đuôi chiếm chiều cao này.
- Khoảng hở (leading): Khoảng phân cách giữa hai chuỗi
với nhau
II. Vẽ chữ
2. Vẽ chữ
2.1. Các thư viện phục vụ cho vẽ chữ có trong java
+ java.awt.Font : Gồm các phông chữ có sẵn trong hợ
thống
+java.awt.font.TextLayout -> cho phép tạo kiểu chữ từ sự
kết hợp các chuỗi, phông chữ và đặt các thuộc tính .
Sauk hi tạo ra đối tượng TextLayout không thể chỉnh
sửa, nhưng nó có phương thức để bạn có thể truy cập
để bố trí phông chữ, dấu nháy , kiểm tra thong tin
+java.awt.font.FontRenderContext : gồm các thông tin để
đo và xác định vị trí văn bản khi nó được tạo ra.
+java.awt.LineBreakMeasurer


II. Vẽ chữ

Phương thức drawstring
Public void drawstring(String str, int x, int y)
Str: là một chuỗi ta cần ghi ra
x,y: tọa độ để ghi, vị trí x,y được lấy theo đường chân chữ
+Chuỗi có thể suất phát từ đối tượng String hoặc tập một

dãy các kí tự bằng một dãy các ký tự bằng hai phương
thức sau:
//Ghi ra một dãy các ký tự tại vị trí x, y bắt đầu từ ký tự offs
trong dãy
public void drawChars(char charArray[], int offs, int
numChars int x, int y)
//Ghi một dãy các byte tại vị trí x,y bắt đầu từ kí tự offs
trong dãy
public void drawChars(byte byteArray[], int offs, int
numChars int x, int y)
II. Vẽ chữ



Cách 1:
Cách 1:
import java.awt.*;
import java.awt.*;
import java.applet.*;
import java.applet.*;
import javax.swing.*;
import javax.swing.*;
public class vd3 extends java.applet.Applet
public class vd3 extends java.applet.Applet
{
{


public void paint(Graphics g)
public void paint(Graphics g)



{
{


super.paintComponents(g);
super.paintComponents(g);
//chuỗi kí tự
//chuỗi kí tự


g.drawString("welcome to Java",40,40);
g.drawString("welcome to Java",40,40);
}
}


public static void main(String[] args)
public static void main(String[] args)


{
{


JFrame frame = new JFrame("DrawMessage");
JFrame frame = new JFrame("DrawMessage");



frame.getContentPane().add(new vd3());
frame.getContentPane().add(new vd3());


frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);


frame.setSize(300,200);
frame.setSize(300,200);


frame.setVisible(true);
frame.setVisible(true);


}
}
II. Vẽ chữ

Cách 2:
Cách 2:
import java.awt.*;
import java.awt.*;
import java.applet.*;
import java.applet.*;
import javax.swing.*;
import javax.swing.*;
public class thu extends java.applet.Applet
public class thu extends java.applet.Applet

{
{
byte[] bytesToDraw={65,66,67,68,69,70,71}; // “ABCDEFG” //tập các byte biểu diễn
byte[] bytesToDraw={65,66,67,68,69,70,71}; // “ABCDEFG” //tập các byte biểu diễn
giá trị ASCII của kí tự
giá trị ASCII của kí tự
public static void main(String[] args)
public static void main(String[] args)


{
{


JFrame frame = new JFrame("DrawMessage");
JFrame frame = new JFrame("DrawMessage");


frame.getContentPane().add(new thu());
frame.getContentPane().add(new thu());


frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);


frame.setSize(300,200);
frame.setSize(300,200);



frame.setVisible(true);
frame.setVisible(true);


}
}
//
//


public void paint(Graphics g)
public void paint(Graphics g)


{
{
g.drawBytes(bytesToDraw, 0, bytesToDraw.length, 10,50);
g.drawBytes(bytesToDraw, 0, bytesToDraw.length, 10,50);


}
}
}
}
II. Vẽ chữ



Cách 3:
Cách 3:

import java.awt.*;
import java.awt.*;
import java.applet.*;
import java.applet.*;
import javax.swing.*;
import javax.swing.*;
public class thu extends java.applet.Applet
public class thu extends java.applet.Applet
{
{
Char [] charsToDraw={‘A’,’B’,’C’,’D’,’E’,’F’,’G’};
Char [] charsToDraw={‘A’,’B’,’C’,’D’,’E’,’F’,’G’};
//
//


public static void main(String[] args)
public static void main(String[] args)


{
{


JFrame frame = new JFrame("DrawMessage")
JFrame frame = new JFrame("DrawMessage")


frame.getContentPane().add(new thu());
frame.getContentPane().add(new thu());



frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);


frame.setSize(300,200);
frame.setSize(300,200);


frame.setVisible(true);
frame.setVisible(true);


}
}
//
//


public void paint(Graphics g)
public void paint(Graphics g)


{
{
g.drawBytes(charsToDraw, 0, charsToDraw.length, 10,20);
g.drawBytes(charsToDraw, 0, charsToDraw.length, 10,20);



}
}
}
}
III. Vẽ hình 2D trong Java
III. Vẽ hình 2D trong Java
1. Không gian người dùng và không gian thiết bị:
Trong hầu hết môi trường đồ họa máy tính, mỗi pixel
được đánh 1 số. Nếu bạn vẽ 1 hình vuông bắt đầu ở
điểm (20, 20) thì góc trên trái của hình vuông sẽ bắt đầu
ở pixel thứ 20 từ trục trái của không gian vẽ và ở pixel
thứ 20 từ trục trên của không gian vẽ. Tọa độ lấy cách
đều từ 2 trục được gọi là tọa độ Đề-Các. Vị trí của
những đối tượng Java 2D cũng được chỉ
định.bằng.tọa,độ.này.
Tuy nhiên, Java 2D định nghĩa tọa độ theo đơn vị (72
đơn vị bằng 1 inch), và việc hiển thị diễn ra trong mặt
phẳng hypothetical được gọi là không gian người dùng.
III. Vẽ hình 2D trong Java
2. Đồ họa với Graphics2D

Lớp Graphics cung cấp các methods đồ họa nhưng
không xây dựng các lớp ảnh.

Lớp Graphics2D kế thừa lớp Graphics nhưng có xây
dựng các lớp mô tả ảnh và các phép biến hình …, có sử
dụng hệ tọa độ thực
III. Vẽ hình 2D trong Java
3. Hệ toạ độ
Màn hình ta hiện thấy được mô phỏng như một hệ toạ

độ phẳng Descartes gồm các điểm (x, y). Trục tung của
hệ toạ độ này hướng xuống, góc trái trên cùng của màn
hình được tính là (0, 0). Toạ độ các điểm tăng dần từ trái
qua phải và từ trên xuống dưới. Toạ độ lớn nhất có thể
được nằm ở góc tận bên phải của màn hình và tuỳ thuộc
vào độ phân giải của màn hình mà có thể mang các giá
trị khác nhau, chẳng hạn với màn hình có độ phân giải
640x480 thì toạ độ này là (648,480) còn với độ phân giải
800x600 thì sẽ là (800,600).
III. Vẽ hình 2D trong Java
4. Kẻ đường thẳng
4. Kẻ đường thẳng

Phương thức cơ bản nhất của đối tượng đồ hoạ
Graphics dùng để vẽ một đường thẳng thật đơn giản.

Chương trình vẽ đường thẳng
(trang bên)
(trang bên)
Kết quả:
Kết quả:
import java.applet.*;
import java.applet.*;
import java.awt.*;
import java.awt.*;
import javax.swing.*;
import javax.swing.*;
import java.awt.event.*;
import java.awt.event.*;
public class Duongthang extends Applet

public class Duongthang extends Applet
{
{


public static void main(String[] args)
public static void main(String[] args)


{
{


JFrame frame = new JFrame("DrawMessage");
JFrame frame = new JFrame("DrawMessage");


frame.getContentPane().add(new Duongthang());
frame.getContentPane().add(new Duongthang());


frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);


frame.setSize(300,200);
frame.setSize(300,200);


frame.setVisible(true);

frame.setVisible(true);


}
}


public void paint (Graphics g)
public void paint (Graphics g)


{
{


g.drawLine(0,0,200,100);
g.drawLine(0,0,200,100);


g.drawLine(20,120,250,120);
g.drawLine(20,120,250,120);


}
}
}
}
III. Vẽ hình 2D trong Java
5. Vẽ hình chữ nhật 2D
5. Vẽ hình chữ nhật 2D




Vẽ một hình chữ nhật (hay hình vuông) đòi hỏi ta phải
Vẽ một hình chữ nhật (hay hình vuông) đòi hỏi ta phải
biết toạ độ (x,y) góc trái trên của hình chữ nhật cùng có
biết toạ độ (x,y) góc trái trên của hình chữ nhật cùng có
chiều rộng width và chiều cao height của nó. Những
chiều rộng width và chiều cao height của nó. Những
phương thức sau sẽ giúp ta vẽ hình chữ nhật với các
phương thức sau sẽ giúp ta vẽ hình chữ nhật với các
dạng khác nhau:
dạng khác nhau:

Public void drawRect(int x, int y, int width, int height)
Public void drawRect(int x, int y, int width, int height)

Phương thức này vẽ một hình chữ nhật với toạ độ
Phương thức này vẽ một hình chữ nhật với toạ độ
đỉnh góc trái (x,y) với chiều rộng width, chiều cao height.
đỉnh góc trái (x,y) với chiều rộng width, chiều cao height.
Ví dụ để vẽ hình chữ nhật ở toạ độ (10,20) rộng 200
Ví dụ để vẽ hình chữ nhật ở toạ độ (10,20) rộng 200
pixel cao 150 pixel ta thực hiện lệnh sau:
pixel cao 150 pixel ta thực hiện lệnh sau:
drawrect(10,20,200,150).
drawrect(10,20,200,150).

Chương trình vẽ hình chữ nhật:
import java.applet.*;

import java.applet.*;
import java.awt.*;
import java.awt.*;
import javax.swing.*;
import javax.swing.*;
import java.awt.event.*;
import java.awt.event.*;
public class Hinhchunhat extends Applet
public class Hinhchunhat extends Applet


{
{


public static void main(String[] args)
public static void main(String[] args)


{
{


JFrame frame = new JFrame("DrawMessage");
JFrame frame = new JFrame("DrawMessage");


frame.getContentPane().add(new Hinhchunhat());
frame.getContentPane().add(new Hinhchunhat());



frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);


frame.setSize(300,200);
frame.setSize(300,200);


frame.setVisible(true);
frame.setVisible(true);


}
}


public void paint(Graphics g)
public void paint(Graphics g)


{
{


g.drawRect(10,10,150,100);
g.drawRect(10,10,150,100);


}

}
}
}
Kết quả:
IV. Vẽ hình 3D trong Java



Hình ảnh được xuất hiện có chiều cao , chiều
Hình ảnh được xuất hiện có chiều cao , chiều
rộng và chiều sâu gọi là 3 chiều – 3D (
rộng và chiều sâu gọi là 3 chiều – 3D (
three-
three-
dimensional
dimensional
) . Hình ảnh mà chỉ có chiều cao ,
) . Hình ảnh mà chỉ có chiều cao ,
chiều rộng mà không có chiều sâu , gọi là 2
chiều rộng mà không có chiều sâu , gọi là 2
chiều – 2D (
chiều – 2D (
two-dimensional
two-dimensional
)
)

Một điều khác nhau giữa hình ảnh 2D và 3D ở
Một điều khác nhau giữa hình ảnh 2D và 3D ở
chỗ , những hình ảnh 2D dùng cho những hình

chỗ , những hình ảnh 2D dùng cho những hình
ảnh mang những thông tin đơn giản và nhanh
ảnh mang những thông tin đơn giản và nhanh
chóng , những hình 3D phức tạp hơn và chứa
chóng , những hình 3D phức tạp hơn và chứa
đựng nhiều thông tin hơn
đựng nhiều thông tin hơn


IV. Vẽ hình 3D trong Java

Nhìn những tam giác trên . Mỗi một tam giác có 03 cạnh
Nhìn những tam giác trên . Mỗi một tam giác có 03 cạnh
và 03 góc . Bên tay phải là hình chóp - cấu trúc 3D gồm
và 03 góc . Bên tay phải là hình chóp - cấu trúc 3D gồm
04 mặt là hình tam giác . Chú ý rằng nó có 05 đường và
04 mặt là hình tam giác . Chú ý rằng nó có 05 đường và
06 góc để cho biết đó là hình chóp - gần gấp hai lần
06 góc để cho biết đó là hình chóp - gần gấp hai lần
những thông tin yêu cầu của hình tam giác .
những thông tin yêu cầu của hình tam giác .

×