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
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:
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.LineBreakMeasurerII. 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
{
{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");
{
{
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);
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());
}
}
}
}
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ạ
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);
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.*;
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);}
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ơnIV. 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 .