1. Trang chủ
  2. » Luận Văn - Báo Cáo

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

26 3,4K 11

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 26
Dung lượng 391,5 KB

Nội dung

Phần lớncác thành phần trong thư viện Swing đều được tô vẽ trực tiếptrên canvas bằng mã lệnh của Java, ngoại trừ các thànhphần là lớp con của lớp java.awt..  Dialogs: đây là một cửa sổ

Trang 1

TRƯỜNG ĐẠI HỌC NÔNG NGHIỆP HÀ NỘI

KHOA CÔNG NGHỆ THÔNG TIN

ššš

-BÀI TẬP LỚN MÔN LẬP TRÌNH JAVA

Đề 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

HÀ NỘI – 2010

Trang 2

A.TÌM HIỂU VỀ ĐỒ HOẠ TRONG JAVA: VẼ

CHỮ, VẼ HÌNH 2D VÀ 3D

Một khả năng của Java là cho phép ta xây dựng các ứngdụng có giao diện đồ hoạ hay còn gọi là GUI(Grapthical UserInterface) Khi Java được phát hành, các thành phần đồ hoạđược tập trung vào thư viện mang tên Abstract WindowToolkit (AWT) Đối với mỗi hệ nền, thành phần AWT sẽ đượcánh xạ sang một thành phần nền cụ thể, bằng cách sử dụngtrực tiếp mã native của hệ nền, chính vì vậy nó phụ thuộc rấtnhiều vào hệ nền và nó còn có thể gây lỗi trên một số hệnền

Với bản phát hành Java 2, các thành phần giao diệnđược thay bằng tập hợp các thành phần linh hoạt, đă năng,mạnh mẽ, độc lập với hệ nền thuộc thư viện Swing Phần lớncác thành phần trong thư viện Swing đều được tô vẽ trực tiếptrên canvas bằng mã lệnh của Java, ngoại trừ các thànhphần là lớp con của lớp java.awt Windown hoặc Java.awt.Panel vốnphải được vẽ bằng GUI trên nền cụ thể Thành phần Swing ít phụ thuộc vào

hệ nền hơn do vậy ít gặp lỗi hơn và đặc biệt nó sử dụng ít tài nguyên của hệthống hơn các thành phần trong thư viện awt Mặc dù các thành phần awtvẫn được hỗ trợ trong Java 2, tuy nhiên Sun khuyên bạn nên sử dụng cácthành phần Swing thay cho các thành phần awt, tuy nhiên các thành phầntrong thư viện Swing không thể thay tất cả các thành phần trong thư việnawt Chúng chỉ thay thế một phần awt như: Button, Panel, TextField, Còncác lớp trợ giúp khác trong awt như: Graphics, Color, Font, FontMetrics, …vẫn không thay đổi Bên cạnh đó các thành phần Swing còn

sử dụng mô hình sử lý sự kiện của awt

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ụhoàn hảo về cách dùng lớp, sự kết thừa và giao diện API cholậ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 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ô tả như sau:

Trang 3

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ànhì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.2 Container

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ầnawt như: button, checkbox, radio button, scrollbar, list,… chỉ sử dụng đượckhi ta đưa nó vào khung chứa (container)

Một số đối tượng container trong Java:

Trang 4

Panel: Đối tượng khung chứa đơn giản nhất, dùng để nhóm các đối

tượng, thành phần con lại Một Panel có thể chứa bên trong một Panelkhác

Frame: khung chứa Frame là một cửa số window hẳn hoi ở mức trên

cùng bao gồm một tiêu đều và một đường biên (border) như các ứngdụng windows thong thường khác Khung chứa Frame thường được

sử dụng để tạo ra cửa sổ chính của các ứng dụng

Dialogs: đây là một cửa sổ dạng hộp hội thoại (cửa sổ dạng này còn

được gọi là pop-up window), cửa sổ dạng này thường được dùng đểđưa ra thông báo, hay dùng để lấy dữ liệu nhập từ ngoài vào thôngqua các đối tượng, thành phần trên dialog như TextField chẳng hạn.Dialog cũng là một cửa sổ nhưng không đầy đủ chức năng như đốitượng khung chứa Frame.

ScrollPanes: là một khung chứa tương tự khung chứa Panel, nhưng

có thêm 2 thanh trượt giúp ta tổ chức và xem được các đối tượng lớnchoán nhiều chỗ trên màn hình như những hình ảnh hay văn bản nhiềudòng

Trang 5

Jcomponent: Là lớp cha của mọi thành phần Swing ligth weight,

được vẽ trực tiếp lên canvas bằng mã lệnh Java Một lớp được kế thừa

từ lớp Jcomponent được thể hiện trong hình sau:

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.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ạ trongthư viện Swing được nhóm trong gói javax.swing Đa số cácthà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

Chú ý: không được pha trộn các thành phần giao diện

swing và awt trong cùng một ứng dụng Chẳng hạn nhưkhông nên đặt một JButton vào một Panel và không nên đặtButton vào JPanel Việc làm này có thể gây lỗi

Trang 6

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ệncông việc đấy đó là bộ quản lý trình bày (Layout Manager) Các bộ quản lýtrình bày mà thư viện AWT cung cấp cho ta bao gồm:

FlowLayout: Sắp xếp các đối tượng từ trái qua phải và từ trên

xuống dưới Các đối tượng đều giữ nguyên kích thước của mình. Cách sắp xếp này là mặc định đối với Panel,JPanel ,Applet và JApplet

BorderLayout: Các đối tượng được đặt theo các đường viền của khung chứa theo các cạnh West, East, South, North và Center tức Đông, Tây, Nam, Bắc và Trung tâm hay Trái, Phải, Trên, Dưới và Giữa tùy theo cách nhìn của chúng ta Cách sắp xếp này là mặc định

đối với lớp Window, Frame, JFrame, Dialog và JDialog

GridLayout: Tạo một khung lưới vô hình với các ô bằng nhau Các

đối tượng sẽ đặt vừa kích thước với từng ô đó Thứ tự sắp xếp cũng từtrái qua phải và từ trên xuống dưới Mỗi thành phần giao diệnchứa trong một ô

GridBagLayout: Tương tự như GridLayout, các đối tượng khung chứa cũng được đưa vào một lưới vô hình Tuy nhiên kích thước các đối tượng không nhất thiết phải vừa với 1 ô mà có thể là 2, 3 ô hay nhiều hơn tùy theo các ràng buộc mà ta chỉ định thông qua đối tượng

GridBagConstraint

Null Layout: Cách trình bày tự do Đối với cách trình bày này người lập trình phải tự động làm tất cả từ việc định kích thước của các đối tượng, cũng như xác định vị trí của nó trên màn hình Ta không phụ thuộc vào những ràng buộc đông, tây , nam, bắc gì cả.

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ỗiloạ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ữ

Trang 7

- Đ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 caonày

- Khoảng hở (leading): Khoảng phân cách giữa hai chuỗi với nhau.

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ácchuỗi, phông chữ và đặt các thuộc tính Sauk hi tạo ra đối tượng TextLayoutkhô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

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ằngmộ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)

Trang 8

//tập các byte biểu diễn giá trị ASCII của kí tự

byte[] bytesToDraw={65,66,67,68,69,70,71}; // “ABCDEFG”

}

}

Trang 9

III Vẽ hình 2D trong Java.

Java 2D không phải là API mới, nhưng bạn có thể sử dụng nó như làcông nghệ Java để tạo ra những hình ảnh chất lượng cao stunningly Java 2DAPI sẽ sử dụng Nó có những khả năng như xử lý ảnh, alpha-basedcompositing, antialiasing, biến đổi hình học, international text rendering, vàthậm chí là các thao tác in cao cấp

Để hiểu những điều cơ bản về Java 2D, trước tiên bạn phải hiểu kháiniệm hiển thị Hiển thị là quá trình mà máy đồ họa Java 2D (chính là lớpjava.awt.Graphics2D) nhận các lớp đồ họa như là hình, văn bản, ảnh rồi vẽchúng lên thiết bị xuất như là màn hình hay máy in Sức mạnh của thư việnJava 2D nằm ở khả năng hiển thị linh hoạt của lớp Graphics2D Ở đây ta tìmhiểu một số điều cơ bản của Java 2D bao gồm đường thẳng, hình, …

1 Không gian người dùng và không gian thiết bị:

Trang 10

Chúng ta hãy bắt đầu bằng việc chỉ ra sự khác nhau giữa không gianngười dùng và không gian thiết bị Trong hầu hết môi trường đồ họa máytí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ủakhông gian vẽ và ở pixel thứ 20 từ trục trên của không gian vẽ Tọa độ lấycách đều từ 2 trục được gọi là tọa độ Đề-Các Vị trí của những đối tượngJava 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 gianngười dùng

Ví dụ: 1 hình rộng 4 inch trên màn hình (máy vi tính) thì cũng rộngnhư vậy khi nó được in ra giấy Màn hình (máy tính) thường có kích thước

72 pixel là 1 inch, vì vậy 1 đơn vị của Java 2D tương đương với 1 pixel Tuynhiên, 1 máy in có thể có kích thước là 300, 600, hoặc thậm chí 1200 hoặcnhiều hơn 1200 chấm là 1 inch Trong trường hợp này máy đồ họa Java 2D

có nhiệm vụ chuyển từ không gian người dùng sang không gian thiết bị

2 Đồ họa với Graphics2D

• Lớp Graphics cung cấp các methods đồ họa nhưng không xây dựngcá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

• Trong gói geom (geometry- hình học) có interface Shape và hiện thựccủa các lớp Polygon, RectangularShape, Rectangle, Line2D,CubicCurve2D, Area, GeneralPath, QuadCurve2D

Trang 12

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ângiải 640x480 thì toạ độ này là (648,480) còn với độ phân giải 800x600 thì sẽ

là (800,600)

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

Public void drawLine (int x1, int y1, int x2, int y2)

Ta dùng phương thức này để vẽ một đường thẳng được tạo ra từ haiđiểm trên hệ toạ độ màn hình là (x1,y1) và (x2,y2) Dưới đây là kết quả củachương trình vẽ đường thẳng

DrawLines.java Chương trình vẽ đường thẳng

Trang 13

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ạ độ đỉ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 pixel cao 150 pixel ta thực hiện lệnh sau:drawrect(10,20,200,150)

Trang 14

JFrame frame = new JFrame("DrawMessage");

IV Vẽ hình 3D trong Java.

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 (three-dimensional) 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 – 2D (two-dimensional)

Một điều khác nhau giữa hình ảnh 2D và 3D ở chỗ , những hình ảnh2D dùng cho những hình ảnh mang những thông tin đơn giản và nhanhchóng , những hình 3D phức tạp hơn và chứa đựng nhiều thông tin hơn

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 04 mặt là hình tam giác Chú ý

Trang 15

rằng nó có 05 đường và 06 góc để cho biết đó là hình chóp - gần gấp hai lầnnhững thông tin yêu cầu của hình tam giác

1 Vẽ hình chữ nhật 3 chiều (3D rectangle)

Lớp Graphics cung cấp cho ta cách vẽ hình chữ nhật 3 chiều (3D) tựanhư những nút nhấn (button) mà ta vẫn thường thấy Cách vẽ hình chữ nhật3D không khác gì cách vẽ hình chữ nhật bình thường chỉ có điều ta cần chobiết thêm một đối số kiểu Boolean để xác nhận xem hình chữ nhật sẽ được

vẽ theo dạng 3D nào

Có 2 cách vẽ , một sẽ làm cho đối tượng nổi lên(raised) hoặc hai sẽlàm cho đối tượng có vẻ như chìm xuống

Sau đây là hai phương thức để vẽ hình chữ nhật 3D:

// Chỉ vẽ hình chữ nhật 3D không tô bên trong

Public void draw3DRect(int x, int y, int width, int height, Booleanraised)

// Vẽ hình chữ nhật 3D và tô bên trong

Public void fill3DRect(int x, int y, int width, int height, Booleanraised)

Nếu raised=true hình chữ nhật sẽ ở dạng nổi còn raised=false hìnhchữ nhật sẽ ở dạng chìm

Trang 16

//Vẽ một hình Oval

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

//Tô một hình Oval

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

Hình Oval mà ta vẽ nằm trọn trong một hình chữ nhật với kích thướcwidth và height Không như các hàm đồ hoạ ta vẫn quen dùng, toạ độ (x,y)của hai phương thức trên không phải là tâm của hình Oval mà là toạ độ đỉnhgóc trái trên cùng của hình chữ nhật Trường hợp muốn vẽ vòng tròn hãy đặtwidth=height

Trang 17

public static void main(String[] args)

}

}

B.CHƯƠNG TRÌNH VẼ MỘT SỐ HÌNH (HÌNH CHỮ NHẬT, HÌNH TRÒN, HÌNH TRỤ, HÌNH LẬP

Trang 18

public class btlon extends JFrame implements ActionListener

{

//Chuong trinh chinh

public static void main(String arg[])

protected boolean clear;

JMenuBar main=new JMenuBar();

JMenu mnufile=new JMenu("Ve hinh");

JMenuItem clears=new JMenuItem("Xoa ");

JMenuItem Rect=new JMenuItem("Hinh chu nhat 1");

JMenuItem Rectangle2=new JMenuItem("Hinh chu nhat 2");

JMenuItem Oval=new JMenuItem("Hinh tron");

JMenuItem filloval=new JMenuItem("Hinh tron 2");

JMenu mnucolor=new JMenu("Mau sac");

JMenuItem iRed=new JMenuItem("Do");

JMenuItem iYellow=new JMenuItem("Vang");

JMenuItem iGreen=new JMenuItem("Xanh la");

JMenuItem iBlue=new JMenuItem("Xanh da troi");

JMenuItem iGray=new JMenuItem("Xam");

JMenuItem iPink=new JMenuItem("Hong");

JMenuItem iOrange=new JMenuItem("Cam");

JMenuItem icyan=new JMenuItem("Luc lam");

JMenu mnuKhoi=new JMenu("3D");

JMenuItem iCylinder=new JMenuItem("Tru tron");

Color color;

private JTextField a, b, c,d; //KICH THUOC 1 VA 2

//private JButton jbtVe;

String hinh=new String();//STRING HINH=NEW STRING()public void setx(int x)

Ngày đăng: 14/04/2015, 09:01

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w