You are on page 1of 29

Nhóm 21 - Chương 15 - How to Program Java

Sinh viên: Phạm Thành Đạt - B17DCPT263


Phạm Văn Đông – B17DCPT260

15.1 Giới thiệu

15.2 Bối cảnh và đồ họa

Các đối tượng

Kiểm soát màu 15.3

15.4 Thao tác phông chữ

15,5 Vẽ đường, hình chữ nhật và hình bầu dục

15.6 Vẽ Arcs

15.7 Vẽ đa giác và đa giác

15.8 API Java 2D

15.9 Kết thúc

Tóm tắt | Bài tập tự kiểm tra | Đáp án bài tập tự ôn tập | Bài tập |

Nghiên cứu trường hợp GUI và đồ họa tùy chọn: Thêm Java 2D | Tạo nên sự khác biệt

Trong chương này, chúng tôi tổng quan về một số khả năng Java Java để vẽ hai chiều

hình dạng, kiểm soát màu sắc và kiểm soát phông chữ. Một phần của kháng cáo ban đầu Java Java là sự
hỗ trợ của nó

cho đồ họa cho phép lập trình viên nâng cao trực quan các ứng dụng của họ. Java bây giờ

chứa nhiều khả năng vẽ phức tạp hơn như là một phần của API Java 2D. Điều này

chương bắt đầu bằng cách giới thiệu nhiều khả năng vẽ ban đầu của Java. Tiếp theo chúng tôi trình bày-
kéo theo một số khả năng Java 2D mạnh mẽ hơn, chẳng hạn như kiểm soát kiểu đường kẻ

được sử dụng để vẽ hình dạng và cách hình dạng được lấp đầy với màu sắc và hoa văn. Các lớp học

là một phần của các khả năng đồ họa gốc Java Java hiện được coi là một phần của Java

API 2D.

Hình 15.1 cho thấy một phần của hệ thống phân cấp lớp Java bao gồm một số

các lớp đồ họa cơ bản và các lớp và giao diện API Java 2D được đề cập trong chương này. Lớp học

Màu chứa các phương thức và hằng số để thao tác màu. Lớp JComponent con-

Phương pháp tains paintComponent, được sử dụng để vẽ đồ họa trên một thành phần. Lớp học

Phông chữ chứa các phương thức và hằng số để thao tác phông chữ. Lớp FontMetrics chứa

phương pháp để có được thông tin phông chữ. Lớp đồ họa chứa các phương thức để vẽ

chuỗi, đường, hình chữ nhật và các hình dạng khác. Lớp Graphics2D, mở rộng lớp

Đồ họa, được sử dụng để vẽ với API Java 2D. Lớp đa giác chứa các phương thức cho

tạo đa giác. Nửa dưới của hình liệt kê một số lớp và giao diện từ

API Java 2D. Class BasicStroke giúp chỉ định các đặc điểm vẽ của các dòng. Các lớp học

GradientPaint và TexturePaint giúp chỉ định các đặc điểm để điền vào hình dạng với

màu sắc hoặc hoa văn. Các lớp GeneralPath, Line2D, Arc2D, Ellipse2D, Hình chữ nhật2D và

RoundRonymous2D đại diện cho một số hình dạng 2D Java.

Để bắt đầu vẽ bằng Java, trước tiên chúng ta phải hiểu hệ tọa độ Java Java

(Hình 15.2), đây là sơ đồ để xác định mọi điểm trên màn hình. Theo mặc định,

góc trên bên trái của thành phần GUI (ví dụ: cửa sổ) có tọa độ (0, 0). Một đồng

cặp tọa độ bao gồm tọa độ x (tọa độ ngang) và tọa độ y

(tọa độ dọc). Tọa độ x là khoảng cách ngang di chuyển ngay từ

bên trái màn hình. Tọa độ y là khoảng cách dọc di chuyển xuống từ đỉnh

của màn hình. Trục x mô tả mọi tọa độ ngang và trục dọc


danh từ: Tọa độ. Các tọa độ được sử dụng để chỉ ra nơi đồ họa sẽ được hiển thị trên

màn. Các đơn vị tọa độ được đo bằng pixel (viết tắt của phần tử ảnh hình ảnh). Một

pixel là một màn hình hiển thị đơn vị độ phân giải nhỏ nhất.

15.2

Một bối cảnh đồ họa cho phép vẽ trên màn hình. Một đối tượng Đồ họa quản lý đồ họa

bối cảnh và vẽ các pixel trên màn hình đại diện cho văn bản và các đối tượng đồ họa khác (ví dụ:

đường thẳng, hình elip, hình chữ nhật và các đa giác khác). Các đối tượng đồ họa chứa các phương thức
để vẽ

ing, thao tác phông chữ, thao tác màu sắc và tương tự.

Lớp Đồ họa là một lớp trừu tượng (nghĩa là, các đối tượng Đồ họa không thể được khởi tạo).

Điều này góp phần vào tính di động của Java. Bởi vì vẽ được thực hiện khác nhau trên mỗi

nền tảng hỗ trợ Java, không thể chỉ có một triển khai bản vẽ

khả năng trên tất cả các hệ thống. Ví dụ: các khả năng đồ họa cho phép PC chạy-

ning Microsoft Windows để vẽ một hình chữ nhật khác với những cái cho phép Linux

máy trạm để vẽ một hình chữ nhật, và cả hai đều khác với khả năng đồ họa

cho phép Macintosh vẽ hình chữ nhật. Khi Java được triển khai trên mỗi nền tảng,

một lớp con của Đồ họa được tạo để thực hiện các khả năng vẽ. Điều này

đề cập bị ẩn bởi lớp Đồ họa, cung cấp giao diện cho phép chúng ta sử dụng

đồ họa theo cách độc lập với nền tảng.

Nhớ lại từ Chương 14, lớp Thành phần là siêu lớp cho nhiều lớp

trong gói java.awt. Lớp JComponent (gói javax.swing), kế thừa gián tiếp
từ lớp Thành phần, chứa phương thức paintComponent có thể được sử dụng để vẽ

đồ họa. Phương thức paintComponent lấy một đối tượng Đồ họa làm đối số. Đối tượng này là

được hệ thống chuyển sang phương thức paintComponent khi một công cụ xoay nhẹ

nent cần phải được sơn lại. Tiêu đề cho phương thức paintComponent là

Tham số g nhận được tham chiếu đến một thể hiện của lớp con dành riêng cho hệ thống mà Biểu đồ-

ics kéo dài. Tiêu đề phương thức trước sẽ trông quen thuộc với bạn.

chúng tôi đã sử dụng trong một số ứng dụng trong Chương 14. Trên thực tế, lớp JComponent là một
siêu

lớp học của JPanel. Nhiều khả năng của lớp JPanel được kế thừa từ lớp JComponent.

Bạn hiếm khi gọi phương thức paintComponent trực tiếp, bởi vì vẽ đồ họa là một

quá trình hướng sự kiện. Như chúng ta đã đề cập trong Chương 11, Java sử dụng mô hình đa luồng

Thực hiện chương trình. Mỗi luồng là một hoạt động song song. Mỗi chương trình có thể có nhiều

chủ đề. Khi bạn tạo một ứng dụng dựa trên GUI, một trong những luồng đó được gọi là

chủ đề gửi sự kiện (EDT) Hướng dẫn sử dụng để xử lý tất cả các sự kiện GUI. Tất cả bản vẽ và

Thao tác các thành phần GUI nên được thực hiện trong luồng đó. Khi GUI

Ứng dụng thực thi, vùng chứa ứng dụng gọi phương thức paintComponent

(bên trong Hình 15.2 | Hệ tọa độ Java. Đơn vị được đo bằng pixel. công khai void paintComponent (Đồ
họa g) (0, 0) (x, y) + y + x trục y trục x 15.3 Điều khiển màu 635 chuỗi sự kiện) cho mỗi thành phần nhẹ
khi GUI được hiển thị. Dành cho paintComponent được gọi lại, một sự kiện phải xảy ra (chẳng hạn như
bao phủ và phát hiện thành phần với một cửa sổ khác). Nếu bạn cần paintComponent để thực thi (tức
là, nếu bạn muốn cập nhật đồ họa được vẽ trên một thành phần Xoay), bạn có thể gọi phương thức sơn
lại, được kế thừa bởi tất cả JCompo- Nents gián tiếp từ Thành phần lớp (gói java.awt). Tiêu đề để sơn lại

15.3 Kiểm soát màu Class Color khai báo các phương thức và hằng số để thao tác màu trong chương
trình Java. Các hằng số màu được khai báo trước được tóm tắt trong hình 15.3 và một số phương pháp
màu và các nhà xây dựng được tóm tắt trong hình 15.4. Hai trong số các phương thức trong Hình 15.4 là
Đồ thị- phương pháp ics dành riêng cho màu sắc. công khai khoảng trống sơn lại ()

Mỗi màu được tạo ra từ một thành phần màu đỏ, xanh lá cây và xanh dương. Cùng nhau com-

ponents được gọi là giá trị RGB. Tất cả ba thành phần RGB có thể là số nguyên trong phạm vi

từ 0 đến 255 hoặc cả ba có thể là các giá trị dấu phẩy động trong phạm vi 0,0 đến 1,0. Đầu tiên

Thành phần RGB chỉ định lượng màu đỏ, thứ hai là lượng màu xanh lá cây và

thứ ba số lượng màu xanh. Giá trị RGB càng lớn, lượng mệnh giá đó càng lớn

màu sắc hình vuông. Java cho phép bạn chọn từ 256 × 256 × 256 (khoảng 16,7 triệu

sư tử) màu sắc. Không phải tất cả các máy tính đều có khả năng hiển thị tất cả các màu này. Máy tính sẽ

hiển thị màu sắc gần nhất có thể.

Hai trong số các hàm xây dựng Color Color được hiển thị trong Hình 15.4. Một trong số đó có ba int

đối số và một đối số có ba đối số nổi, với mỗi đối số chỉ định

số lượng màu đỏ, xanh lá cây và xanh dương. Các giá trị int phải nằm trong phạm vi 0 chàng255 và float

các giá trị trong phạm vi 0,0111. Đối tượng Màu mới sẽ có số lượng màu đỏ được chỉ định,

màu xanh lá cây và màu xanh. Các phương thức màu getRed, getGreen và getBlue trả về các giá trị
nguyên từ

0 đến 255 tương ứng với số lượng màu đỏ, xanh lá cây và xanh dương. Phương pháp đồ họa

getColor trả về một đối tượng Màu đại diện cho màu vẽ hiện tại. Phương pháp đồ họa

setColor đặt màu vẽ hiện tại.

Vẽ trong các màu sắc khác nhau

Hình 15,51515 minh họa một số phương pháp từ Hình 15.4 bằng cách vẽ trực tràng đầy

gles và String trong một số màu sắc khác nhau. Khi ứng dụng bắt đầu thực thi, lớp
Phương pháp tô màu ColorJPanel sườn (dòng 10 Pha37 của hình 15,5) được gọi để vẽ

cửa sổ. Dòng 17 sử dụng phương thức Graphics setColor để đặt màu vẽ. Phương pháp thiết lập-

Màu nhận được một đối tượng Màu. Biểu thức Màu mới (255, 0, 0) tạo Màu mới

đối tượng đại diện cho màu đỏ (giá trị đỏ 255 và 0 cho các giá trị xanh lục và xanh lam). Dòng 18 sử dụng

Phương thức đồ họa fillRect để vẽ một hình chữ nhật đầy màu hiện tại. Phương pháp điền

Rect vẽ một hình chữ nhật dựa trên bốn đối số của nó. Hai giá trị nguyên đầu tiên biểu thị

tọa độ x phía trên bên trái và tọa độ y phía trên bên trái, nơi đối tượng Đồ họa bắt đầu

vẽ hình chữ nhật. Đối số thứ ba và thứ tư là các số nguyên không âm tương ứng là chiều rộng và chiều
cao của hình chữ nhật tính bằng pixel. Một hình chữ nhật

được vẽ bằng phương thức fillRect được tô bởi màu hiện tại của đối tượng Đồ họa.

Dòng 19 (Hình 15,5) sử dụng phương thức Đồ họa drawString để vẽ Chuỗi trong đường cong

thuê màu. Biểu thức g.getColor () lấy màu hiện tại từ Đồ họa

vật. Sau đó, chúng tôi nối Màu với chuỗi "Hiện tại RGB:", dẫn đến một

cuộc gọi ngầm đến lớp Phương thức màu toString. Biểu diễn chuỗi của một màu con-

Giữ tên lớp và gói (java.awt.Color) và các giá trị đỏ, lục và lam.

Các dòng 22 bóng24 và 27 mộc29 thực hiện lại các nhiệm vụ tương tự. Dòng 22 sử dụng màu Con-

Cấu trúc với ba đối số float để tạo màu xanh đậm (0,50f cho màu đỏ, 0,75f cho

màu xanh lá cây và 0,0f cho màu xanh). Lưu ý cú pháp của các giá trị. Bức thư f được thêm vào một

dấu phẩy động cho biết rằng chữ nên được coi là kiểu float. Nhớ lại rằng

theo mặc định, các ký tự dấu phẩy động được coi là kiểu kép.
Dòng 27 đặt màu vẽ hiện tại thành một trong các hằng số Màu được khai báo trước

(Màu.BLUE). Các hằng số Màu là tĩnh, do đó, chúng được tạo khi lớp Màu

được nạp vào bộ nhớ tại thời điểm thực hiện.

Câu lệnh trong dòng 35 Ném36 thực hiện các cuộc gọi đến các phương thức Color getRed, getGreen và

getBlue trên hằng số Color.MAGENTA được khai báo trước. Phương thức chính của lớp ShowColors

(dòng 8 Ném18 của Hình 15.6) tạo JFrame sẽ chứa đối tượng ColorJPanel trong đó

màu sắc sẽ được hiển thị.

Gói javax.swing cung cấp thành phần GUI JColorChooser cho phép

người dùng ứng dụng để chọn màu. Ứng dụng của quả sung. 15.7 Ném15.8 thể hiện một JCol-

hộp thoại orChooser. Khi bạn nhấp vào nút Thay đổi màu, hộp thoại JColorChooser

xuất hiện. Khi bạn chọn một màu và nhấn nút hộp thoại OK OK, màu nền

của cửa sổ ứng dụng thay đổi.

Lớp JColorChooser cung cấp phương thức tĩnh showDialog, tạo ra một JColor- Đối tượng chọn, gắn nó
vào hộp thoại và hiển thị hộp thoại. Dòng 36 Con37 của Hình 15.7 gọi phương thức này để hiển thị hộp
thoại chọn màu. Phương thức showDialog trả về Đối tượng màu được chọn hoặc null nếu người dùng
nhấn Hủy hoặc đóng hộp thoại mà không có nhấn OK. Phương thức này có ba đối số. Tham chiếu đến
Thành phần mẹ của nó, một Chuỗi để hiển thị trong thanh tiêu đề của hộp thoại và Màu được chọn ban
đầu cho hộp thoại. Thành phần cha là tham chiếu đến cửa sổ mà hộp thoại được hiển thị (trong trường
hợp này là JFrame, với khung tên tham chiếu). Hộp thoại sẽ được tập trung vào cha mẹ. Nếu cha mẹ là
null, hộp thoại được đặt ở giữa màn hình. Trong khi người chọn màu Hộp thoại nằm trên màn hình,
người dùng không thể tương tác với thành phần cha mẹ cho đến khi hộp thoại bị cách chức. Loại hộp
thoại này được gọi là hộp thoại phương thức. Sau khi người dùng chọn một màu, các dòng 40 Ném41
xác định xem màu đó có phải là null không và nếu có thì đặt màu thành Color.LIGHT_GRAY. Phương thức
gọi dòng 44 setBackground để thay đổi màu nền của JPanel. Phương thức setBackground là một trong
nhiều Thành phần phương pháp có thể được sử dụng trên hầu hết các thành phần GUI. Người dùng có
thể tiếp tục sử dụng Thay đổi nút Màu để thay đổi màu nền của ứng dụng. Hình 15.8 con- Tains phương
thức chính, mà thực hiện chương trình. Hình 15.8 (b) hiển thị hộp thoại JColorChooser mặc định cho
phép người dùng chọn một màu sắc từ một loạt các mẫu màu. Có ba tab trên đầu hộp thoại. Swatches,
HSB và RGB. Chúng đại diện cho ba cách khác nhau để chọn một màu. Tab HSB cho phép bạn chọn màu
dựa trên màu sắc, độ bão hòa và độ sáng Các giá trị được sử dụng để xác định lượng ánh sáng trong một
màu. Chúng tôi không thảo luận về các giá trị HSB. Để biết thêm thông tin về họ, hãy truy cập
en.wikipedia.org/wiki/HSL_and_HSV. Tab RGB cho phép bạn chọn một màu bằng cách sử dụng thanh
trượt để chọn các thành phần màu đỏ, xanh lá cây và xanh dương. Các tab HSB và RGB được thể hiện
trong hình 15.9.

15.4 : Thao tác phông chữ

Phần này giới thiệu các phương thức và hằng số để thao tác phông chữ. Hầu hết các phông chữ meth-

ods và hằng số phông chữ là một phần của lớp Font. Một số phương thức của lớp Phông chữ và Biểu đồ
lớp-

ics được tóm tắt trong hình 15.10.

Trình xây dựng lớp Phông chữ có ba đối số, tên phông chữ, kiểu phông chữ và phông chữ

kích thước. Tên phông chữ là bất kỳ phông chữ nào hiện đang được hỗ trợ bởi hệ thống mà chương
trình

đang chạy, chẳng hạn như các phông chữ Java tiêu chuẩn Monospaces, SansSerif và Serif. Kiểu phông
chữ

là Font.PLAIN, Font.ITALIC hoặc Font.BOLD (mỗi trường là một trường tĩnh của Phông chữ lớp). Kiểu chữ

có thể được sử dụng kết hợp (ví dụ: Font.ITALIC + Font.BOLD). Cỡ chữ được đo

bằng điểm. Một điểm là 1/72 inch. Phương thức đồ họa setFont thiết lập bản vẽ hiện tại

font chữ Phông chữ trong đó văn bản sẽ được hiển thị đối với phông chữ Phông chữ của nó.

Mẹo di động 15.2

Số lượng phông chữ khác nhau trên các hệ thống. Java cung cấp năm tên phông chữ Ser Serif, Mono-

khoảng cách, SansSerif, Dialog và DialogInput có thể được sử dụng trên tất cả các nền tảng Java.

Môi trường thời gian chạy Java (JRE) trên mỗi nền tảng ánh xạ các tên phông chữ logic này thành

phông chữ thực tế được cài đặt trên nền tảng. Các phông chữ thực tế được sử dụng có thể thay đổi
theo nền tảng.

Ứng dụng của quả sung. 15.11 Cung15.12 hiển thị văn bản theo bốn phông chữ khác nhau, với mỗi
phông chữ
phông chữ trong một kích thước khác nhau. Hình 15.11 sử dụng hàm tạo Phông chữ để khởi tạo các đối
tượng Phông chữ (trong

mỗi dòng 16, 20, 24 và 29) được truyền cho phương thức Đồ họa setFont để thay đổi

vẽ phông chữ. Mỗi lệnh gọi đến hàm tạo Phông chữ sẽ truyền một tên phông chữ (Serif, Monospoped
hoặc

SansSerif) dưới dạng chuỗi, kiểu phông chữ (Font.PLAIN, Font.ITALIC hoặc Font.BOLD) và phông chữ

kích thước. Khi phương thức Đồ họa setFont được gọi, tất cả văn bản được hiển thị sau cuộc gọi sẽ

xuất hiện trong phông chữ mới cho đến khi phông chữ được thay đổi. Mỗi thông tin phông chữ được
hiển thị trong

các dòng 17, 21, 25 và 30 bằng 31 sử dụng phương thức drawString. Các tọa độ được truyền để vẽ-

Chuỗi tương ứng với góc dưới bên trái của đường cơ sở của phông chữ. Thay đổi dòng 28

màu vẽ thành màu đỏ, do đó, chuỗi tiếp theo hiển thị xuất hiện màu đỏ. Hiển thị dòng 30 dòng 31

thông tin về đối tượng Font cuối cùng. Phương thức getFont của lớp Đồ họa trả về một Phông chữ

đối tượng đại diện cho phông chữ hiện tại. Phương thức getName trả về tên phông chữ hiện tại là một

chuỗi. Phương thức getSize trả về kích thước phông chữ theo điểm.

Quan sát kỹ thuật phần mềm 15.2

Để thay đổi phông chữ, bạn phải tạo một đối tượng Phông chữ mới. Các đối tượng phông chữ là lớp học
bất biến

Phông chữ không có phương thức thiết lập để thay đổi các đặc điểm của phông chữ hiện tại.

Hình 15.12 chứa phương thức chính, tạo ra JFrame để hiển thị Phông chữ-

JPanel. Chúng tôi thêm một đối tượng FontJPanel vào JFrame này (dòng 15), hiển thị đồ họa

được tạo ra trong hình 15.11.

Số liệu phông chữ

Đôi khi, nó cần thiết để có được thông tin về phông chữ vẽ hiện tại, chẳng hạn như phông chữ của nó
Tên, kiểu dáng và kích thước. Một số phương pháp Phông chữ được sử dụng để lấy thông tin phông chữ
được tóm tắt

trong hình 15.10. Phương thức getStyle trả về một giá trị nguyên biểu thị kiểu hiện tại.

Giá trị nguyên được trả về là Font.PLAIN, Font.ITALIC, Font.BOLD hoặc combi-

quốc gia của Font.ITALIC và Font.BOLD. Phương thức getF Family trả về tên của phông chữ

gia đình mà phông chữ hiện tại thuộc về. Tên của họ phông chữ là nền tảng cụ thể.

Các phương thức phông chữ cũng có sẵn để kiểm tra kiểu của phông chữ hiện tại và các phương thức
này cũng là tổng hợp

ướp trong hình 15.10. Các phương thức isPlain, isBold và isItalic trả về true nếu hiện tại

kiểu chữ là đơn giản, đậm hoặc in nghiêng, tương ứng.

Hình 15.13 minh họa một số số liệu phông chữ phổ biến, cung cấp chính xác

thông tin về một phông chữ, chẳng hạn như chiều cao, gốc (số lượng ký tự giảm xuống dưới

đường cơ sở), tăng dần (số lượng một ký tự tăng lên trên đường cơ sở) và dẫn đầu (sự khác biệt-

ence giữa dòng dõi của một dòng văn bản và sự đi lên của dòng văn bản bên dưới nó

đó là khoảng cách xen kẽ).

Lớp FontMetrics khai báo một số phương thức để lấy số liệu phông chữ. Những

phương thức và phương thức đồ họa getFontMetrics được tóm tắt trong hình 15,14. Các

ứng dụng của quả sung. 15.15 Cung15.16 sử dụng các phương pháp của Hình 15,14 để lấy số liệu phông
chữ

thông tin cho hai phông chữ.

Dòng 15 của Hình 15.15 tạo và đặt phông chữ vẽ hiện tại thành SansSerif, đậm,

Phông chữ 12 điểm. Dòng 16 sử dụng phương thức Đồ họa getFontMetrics để lấy FontMetrics
đối tượng cho phông chữ hiện tại. Dòng 17 xuất ra biểu diễn Chuỗi của Phông chữ được trả về

bởi g.getFont (). Các dòng 18 Ném21 sử dụng các phương thức FontMetric để có được sự tăng dần, giảm
dần,

chiều cao và hàng đầu cho các phông chữ.

Dòng 23 tạo ra một phông chữ Serif, in nghiêng, 14 điểm mới. Dòng 24 sử dụng phiên bản thứ hai của

Phương thức đồ họa getFontMetrics, chấp nhận đối số Phông chữ và trả về một corre-

đối tượng FontMetrics sponding. Dòng 27 Vang30 có được sự đi lên, đi xuống, chiều cao và dẫn đầu

cho phông chữ. Các số liệu phông chữ hơi khác nhau cho hai phông chữ.

15.5 : Vẽ hình chữ nhật, bầu dục

Phần này trình bày các phương pháp Đồ họa để vẽ các đường, hình chữ nhật và hình bầu dục. Meth-

ods và các tham số của chúng được tóm tắt trong hình 15,17. Đối với mỗi phương pháp vẽ lại

yêu cầu một tham số chiều rộng và chiều cao, chiều rộng và chiều cao phải là giá trị không âm.

Nếu không, hình dạng sẽ không hiển thị.

công khai void drawLine (int x1, int y1, int x2, int y2)

Vẽ một đường thẳng giữa điểm (x1, y1) và điểm (x2, y2).

công khai void drawRect (int x, int y, int width, int height)

Vẽ một hình chữ nhật có chiều rộng và chiều cao quy định. Hình chữ nhật trên cùng bên trái

góc nằm ở (x, y). Chỉ phác thảo của hình chữ nhật được vẽ bằng cách sử dụng

Đối tượng đồ họa LỚN màu sắc Phần thân hình chữ nhật không được tô màu này.

công khai void fillRect (int x, int y, int width, int height)
Vẽ một hình chữ nhật đầy trong màu hiện tại với chiều rộng được chỉ định và

Chiều cao. Góc trên cùng bên trái hình chữ nhật nằm ở (x, y).

công khai void ClearRect (int x, int y, int width, int height)

Vẽ một hình chữ nhật đầy với chiều rộng và chiều cao được chỉ định trong hiện tại

màu nền. Góc trên cùng bên trái hình chữ nhật nằm ở (x, y). Điều này

phương pháp này rất hữu ích nếu bạn muốn loại bỏ một phần hình ảnh.

công khai void drawRoundRect (int x, int y, int width, int height, int arcWidth,

int arcHeight)

Vẽ một hình chữ nhật với các góc tròn trong màu hiện tại với chỉ định

chiều rộng và chiều cao ArcWidth và arcHeight xác định làm tròn số

các góc (xem hình 15.20). Chỉ phác thảo của hình được vẽ.

công khai void fillRoundRect (int x, int y, int width, int height, int arcWidth,

int arcHeight)

Vẽ một hình chữ nhật đầy màu sắc hiện tại với các góc được làm tròn với thông số kỹ thuật

chiều rộng và chiều cao ified. ArcWidth và arcHeight xác định làm tròn

của các góc (xem hình 15.20).

công khai void draw3DRect (int x, int y, int width, int height, boolean b)

Vẽ một hình chữ nhật ba chiều trong màu hiện tại với chỉ định

chiều rộng và chiều cao Góc trên cùng bên trái hình chữ nhật nằm ở (x, y). Trực tràng-

gle xuất hiện khi b là đúng và hạ xuống khi b sai. Chỉ phác thảo

của hình được vẽ.

công khai void fill3DRect (int x, int y, int width, int height, boolean b)
Vẽ một hình chữ nhật ba chiều đầy trong màu hiện tại với đặc tả

chiều rộng và chiều cao Góc trên cùng bên trái hình chữ nhật nằm ở (x, y). Các

hình chữ nhật xuất hiện khi b đúng và hạ xuống khi b sai.

công khai void drawOval (int x, int y, int width, int height)

Vẽ một hình bầu dục trong màu hiện tại với chiều rộng và chiều cao được chỉ định. Các

hình chữ nhật giới hạn góc trên cùng bên trái nằm ở (x, y). Hình bầu dục chạm vào cả bốn

các cạnh của hình chữ nhật giới hạn ở trung tâm của mỗi bên (xem hình 15,21). Chỉ có

các phác thảo của hình được vẽ.

công khai void fillOval (int x, int y, int width, int height)

Vẽ một hình bầu dục đầy màu sắc hiện tại với chiều rộng và chiều cao được chỉ định.

Góc trên cùng bên trái hình chữ nhật giới hạn nằm ở (x, y). Các hình bầu dục chạm

tâm của tất cả bốn cạnh của hình chữ nhật giới hạn (xem hình 15,21).

Ứng dụng của quả sung. 15,181515.19 thể hiện việc vẽ một loạt các đường thẳng, trực tràng-

gles, hình chữ nhật ba chiều, hình chữ nhật tròn và hình bầu dục. Trong hình 15,18, dòng 17

vẽ một đường màu đỏ, dòng 20 vẽ một hình chữ nhật màu xanh trống rỗng và dòng 21 vẽ một đường
thẳng màu xanh đầy

góc. Các phương thức fillRoundRect (dòng 24) và drawRoundRect (dòng 25) vẽ hình chữ nhật

với các góc tròn. Hai đối số đầu tiên của chúng xác định tọa độ của phía trên bên trái

góc của hình chữ nhật giới hạn, khu vực mà hình chữ nhật tròn sẽ được vẽ.

Các tọa độ góc trên bên trái không phải là cạnh của hình chữ nhật tròn, mà là coor-
xác định vị trí của cạnh nếu hình chữ nhật có các góc vuông. Thứ ba và thứ tư

đối số xác định chiều rộng và chiều cao của hình chữ nhật. Hai đối số cuối cùng ngăn chặn-

khai thác đường kính ngang và dọc của cung (nghĩa là chiều rộng cung và chiều cao cung)

được sử dụng để đại diện cho các góc.

Hình 15.20 nhãn chiều rộng cung, chiều cao cung, chiều rộng và chiều cao của hình chữ nhật tròn.

Sử dụng cùng một giá trị cho chiều rộng cung và chiều cao cung tạo ra một vòng tròn ở mỗi vòng tròn
góc. Khi chiều rộng cung, chiều cao cung, chiều rộng và chiều cao có cùng giá trị, kết quả là một vòng
tròn. Nếu các giá trị cho chiều rộng và chiều cao là như nhau và các giá trị của arcWidth và arcHeight
bằng 0, kết quả là một hình vuông. Các phương thức draw3DRect (dòng 28) và fill3DRect (dòng 29) có
cùng các đối số. Hai cái đầu xác định góc trên cùng bên trái của hình chữ nhật. Hai đối số tiếp theo chỉ
định chiều rộng và chiều cao của hình chữ nhật, tương ứng. Đối số cuối cùng xác định xem hình chữ nhật
được nâng lên (đúng) hoặc hạ xuống (sai). Hiệu ứng ba chiều của draw3DRect xuất hiện dưới dạng hai
cạnh của hình chữ nhật trong màu gốc và hai cạnh trong một màu hơi đậm. Hiệu ứng ba chiều của
fill3DRect xuất hiện dưới dạng hai cạnh của hình chữ nhật trong màu vẽ ban đầu và tô màu và hai cạnh
khác trong một chút màu tối hơn. Hình chữ nhật nâng lên có các cạnh màu vẽ ban đầu ở trên cùng và
bên trái của hình chữ nhật. Hình chữ nhật được hạ thấp có các cạnh màu vẽ ban đầu ở phía dưới và bên
phải của hình chữ nhật. Hiệu ứng ba chiều rất khó nhìn thấy trong một số màu sắc. Các phương thức
drawOval và fillOval (Hình 15,18, dòng 32 Tiết33) có cùng bốn đối số- các ngôi sao. Hai cái đầu xác định
tọa độ trên cùng bên trái của hình chữ nhật giới hạn mưa hình bầu dục. Hai cái cuối cùng xác định chiều
rộng và chiều cao của hình chữ nhật giới hạn, tương ứng. Hình 15,21 cho thấy một hình bầu dục giới hạn
bởi một hình chữ nhật. Hình bầu dục chạm vào trung tâm của tất cả bốn cạnh của hình chữ nhật giới
hạn. (Hình chữ nhật giới hạn không được hiển thị trên màn hình.)

15.6 Vẽ Arcs
Một vòng cung được vẽ như một phần của hình bầu dục. Góc vòng cung được đo bằng độ. Arcs quét
(tức là, di chuyển dọc theo một đường cong) từ góc bắt đầu thông qua số độ được chỉ định bởi góc cung
của chúng. Góc bắt đầu biểu thị theo độ bắt đầu của cung. Góc vòng cung xác định tổng số độ mà qua
đó vòng cung quét. Hình 15,22 minh họa hai cung. Tập hợp các trục bên trái cho thấy một vòng cung
quét từ 0 độ đến xấp xỉ 110 độ. Arcs quét theo hướng ngược chiều đồng hồ được đo bằng độ dương.
Tập hợp các trục ở bên phải cho thấy một vòng cung quét từ 0 độ đến xấp xỉ 110degrees. Các vòng quét
theo chiều kim đồng hồ được đo theo độ âm. Lưu ý các hộp nét đứt quanh các cung trong Hình 15,22.
Khi vẽ một vòng cung , chúng tôi chỉ định một hình chữ nhật giới hạn cho một hình bầu dục. Vòng cung
sẽ quét dọc theo một phần của hình bầu dục. Các phương thức đồ họa drawArc và fillArc để vẽ các cung
tròn được tóm tắt trong hình 15,23.

Hình 15,22 | Góc hồ quang dương và âm.


Mô tả phương pháp
công khai void drawArc (int x, int y, int width, int height, int startAngle, int arcAngle)
Vẽ một cung tương ứng với hình chữ nhật giới hạn hình chữ nhật trên cùng bên trái x- và y-tọa độ
với chiều rộng và chiều cao quy định. Đoạn cung được vẽ bắt đầu từ startAngle và quét độ arcAngle.
công khai void fillArc (int x, int y, int width, int height, int startAngle, int arcAngle)
Vẽ một cung tròn đầy (nghĩa là một khu vực) so với hình chữ nhật giới hạn hình chữ nhật trên cùng
bên trái x-và y-tọa độ với chiều rộng và chiều cao được chỉ định. Đoạn cung được vẽ bắt đầu từ
startAngle và quét các cung tròn
Hình 15,23 | Phương pháp đồ họa để vẽ cung tròn.
Hình 15.24 Cung15.25 trình bày các phương pháp hồ quang của Hình 15,23. Ứng dụng này rút ra
sáu cung (ba không lấp đầy và ba điền). Để minh họa hình chữ nhật giới hạn giúp xác định nơi cung xuất
hiện, ba cung đầu tiên được hiển thị bên trong một hình chữ nhật màu đỏ có cùng các đối số x, y, chiều
rộng và chiều cao như các cung.

15.7 Vẽ đa giác và đa giác


Đa giác là các hình đa diện khép kín bao gồm các đoạn thẳng. Polylines là chuỗi các điểm kết nối.
Hình 15.26 thảo luận về các phương pháp để vẽ đa giác và polylines. Một số phương thức yêu cầu một
đối tượng Đa giác (gói java.awt). Các hàm tạo của Polygon lớp cũng được mô tả trong hình 15,26. Ứng
dụng của quả sung. 15,271515.28 vẽ đa giác và polylines.
Mô tả phương pháp
Các phương thức đồ họa để vẽ đa giác void void drawPolygon (int [] xPoints, int [] yPoints, int points)
Vẽ một đa giác. Tọa độ x của từng điểm được chỉ định trong mảng xPoints và tọa độ y của từng điểm
trong mảng yPoints. Đối số cuối cùng chỉ định số điểm. Phương pháp này vẽ một đa giác khép kín. Nếu
điểm cuối cùng khác với điểm đầu tiên, đa giác được đóng bởi một đường nối điểm cuối với điểm đầu
tiên.
công khai void drawPolyline (int [] xPoints, int [] yPoints, int points) Vẽ một chuỗi các đường được kết
nối. Tọa độ x của từng điểm được chỉ định trong mảng xPoints và tọa độ y của từng điểm trong mảng
yPoints. Đối số cuối cùng chỉ định số điểm. Nếu điểm cuối cùng khác với điểm đầu tiên, đa tuyến không
được đóng.
công khai void drawPolygon (Đa giác p)
Vẽ đa giác đã chỉ định.
công khai void fillPolygon (int [] xPoints, int [] yPoints, int points)
Vẽ một đa giác đầy. Tọa độ x của từng điểm được chỉ định trong mảng xPoints và tọa độ y của từng
điểm trong mảng yPoints. Đối số cuối cùng chỉ định số điểm. Phương pháp này vẽ một đa giác khép kín.
Nếu điểm cuối cùng khác với điểm đầu tiên, thì đa giác được đóng bởi một đường nối điểm cuối với
điểm đầu tiên.
công khai void fillPolygon (Đa giác p)
Vẽ đa giác điền được chỉ định. Đa giác được đóng lại
Hình 15,26 | Các phương thức đồ họa cho đa giác và các phương thức Đa giác lớp. (Phần 1 của 2.)
Phương thức và phương thức xây dựng đa giác
Đa giác công cộng ()
Xây dựng một đối tượng đa giác mới. Đa giác không chứa bất kỳ điểm nào. Đa giác công cộng (int []
xValues, int [] yValues, int numberOfPoints)
Xây dựng một đối tượng đa giác mới. Đa giác có các mặt numberOfPoints, với mỗi điểm bao gồm
tọa độ x từ xValues và tọa độ y từ yValues.
công khai void addPoint (int x, int y)
Thêm các cặp tọa độ x và y vào Đa giác.
Hình 15.28 | Tạo JFrame để hiển thị đa giác.
Dòng 15-16 của hình. 15,27 tạo hai mảng int và sử dụng chúng để chỉ định các điểm cho Đa giác đa
giác1. Lệnh xây dựng ThePolygon trong dòng 17 nhận mảng xValues, chứa tọa độ x của mỗi điểm; mảng
yValues, chứa tọa độ y của từng điểm; và 6 (số điểm trong đa giác). Dòng 18 hiển thị đa giác1 bằng cách
chuyển nó làm đối số cho phương thức Graphics drawPolygon.

Các dòng 21 Vang22 tạo hai mảng int và sử dụng chúng để chỉ định các điểm cho một loạt các
đường được kết nối. Mảng xValues2 chứa tọa độ x của từng điểm và mảng yValues2 chúng tọa độ của
từng điểm.Line23 sử dụng phương thức Graphics drawPolyline để hiển thị chuỗi các đường được kết nối
được chỉ định với các đối số xValues2, yValues2 và 7 (số điểm). Các dòng 26 Ném27 tạo hai mảng int và
sử dụng chúng để chỉ định các điểm của đa giác. Mảng xValues3 chứa tọa độ x của từng điểm và mảng
yValues3 tọa độ y của từng điểm. Dòng 28 hiển thị một đa giác bằng cách chuyển đến phương thức
Graphics fillPolygon hai mảng (xValues3 và yValues3) và số điểm cần vẽ (4).

Lỗi lập trình phổ biến 15.1


Một chỉ số mảng nằm ngoài giới hạn Ngoại lệ được ném nếu số điểm được chỉ định
trong đối số thứ ba đối với phương thức drawPolygonor fillPolygon lớn hơn số phần tử
trong mảng tọa độ xác định đa giác sẽ hiển thị
Dòng 31 tạo Polygon polygon2 không có điểm. Các dòng 32 Con36 sử dụng addpoint của phương
thức Đa giác để thêm các cặp tọa độ x và y vào Đa giác. Dòng 37 hiển thị Đa giác đa giác2 bằng cách
chuyển nó đến phương thức đồ họa fillPolygon.

15.8 API Java 2D API


Java 2D cung cấp các khả năng đồ họa hai chiều nâng cao cho các lập trình viên yêu cầu các thao tác
đồ họa chi tiết và phức tạp. API bao gồm các tính năng để xử lý nghệ thuật dòng, văn bản và hình ảnh
trong các gói java.awt, java.awt.image, java.awt.color, java.awt.font, java.awt.geom, java.awt.print và
java. awt.image.renderable. Các khả năng của API quá rộng để có trong sách giáo khoa này. Để biết tổng
quan, hãy xem bản demo Java 2D (được thảo luận trong Chương 23, Applet và Java Web Start) hoặc truy
cập download.oracle.com/javase/6/docs/technotes/guides/2d/. Trong phần này, chúng tôi tổng quan về
một số khả năng Java 2D.
Vẽ bằng APIisac Java2D được xuất bản với tham chiếu Graphics2D (gói java.awt). Graphics2D là một
lớp con trừu tượng của lớp Đồ họa, vì vậy nó có tất cả các khả năng đồ họa được trình bày trước đó
trong chương này. Trong thực tế, đối tượng thực tế được sử dụng để vẽ trong mọi phương thức
paintComponent là một thể hiện của một lớp con của Graphics2D được truyền cho phương thức
paintComponent và được truy cập thông qua Đồ họa siêu lớp. Để truy cập các khả năng của Graphics2D,
chúng ta phải truyền tham chiếu Đồ họa (g) đã truyền topaintComponent vào tham chiếu Graphics2D
bằng một câu lệnh như

Đồ họa2D g2d = (Đồ họa2D) g;

Hai ví dụ tiếp theo sử dụng kỹ thuật này.

Các dòng, Hình chữ nhật, Hình chữ nhật tròn, Arcs và Ellipses Ví dụ này thể hiện một số hình dạng
Java 2D từ gói java.awt.geom, bao gồm Line2D.Double, Hình chữ nhật 2D.Double,
RoundRonymous2D.Double, Arc2D.Double và Ellipse2D.Double. Lưu ý cú pháp của từng tên lớp. Mỗi lớp
đại diện cho một hình dạng với kích thước được chỉ định là giá trị kép. Có một phiên bản riêng của mỗi
giá trị withfloat được biểu thị (ví dụ: Ellipse2D.Float). Trong trường hợp, lớp tĩnh được kiểm tra của lớp
được chỉ định ở bên trái của dấu chấm (ví dụ: Ellipse2D). tên lớp ngoài. Trong quả sung. 15,291515.30,
chúng tôi vẽ các hình dạng Java 2D và sửa đổi các đặc điểm vẽ của chúng, chẳng hạn như thay đổi, độ
lấp đầy, hình dạng và biểu tượng rút tiền. Đây chỉ là một vài trong số nhiều khả năng do Java 2D cung
cấp.

Dòng 25 của Hình 15,29 tạo tham chiếu Đồ họa mà paintComponent nhận được cho tham chiếu
Graphics2D và gán nó cho g2d để cho phép truy cập vào các tính năng Java 2D.

Hình 15.30 | Tạo JFrame để hiển thị hình dạng. (Phần 2 của 2.)

Hình bầu dục, tô màu và đối tượng vẽ

Hình dạng đầu tiên chúng ta vẽ là một hình bầu dục chứa đầy màu sắc thay đổi dần. Các dòng 28 Ném29
gọi phương thức Graphics2D setPaint để đặt đối tượng Paint xác định màu cho hình dạng sẽ hiển thị.
Một đối tượng Paint thực hiện giao diện java.awt.Paint. Nó có thể là một cái gì đó đơn giản như một
trong các đối tượng Màu được giới thiệu trước trong Phần 15.3 (Lớp màu thực hiện Sơn) hoặc nó có thể
là một thể hiện của các lớp Java 2D API Gradient Gradient, SystemColor, TexturePaint,
linearGradientPaint hoặc RadialGradientPaint. Trong trường hợp này, chúng tôi sử dụng một đối tượng
GradientPaint.

Class GradientPaint giúp vẽ một hình dạng trong việc thay đổi màu sắc dần dần được gọi là gradient.
Hàm tạoGradientPaint được sử dụng ở đây yêu cầu bảy đối số. Hai cái đầu xác định tọa độ bắt đầu cho
gradient. Thứ ba chỉ định Màu bắt đầu cho bản nâng cấp. Thứ tư và thứ năm chỉ định tọa độ kết thúc
cho gradient.Thesixth chỉ định Màu kết thúc cho gradient. Đối số cuối cùng xác định xem độ dốc là chu
kỳ (đúng) oracyclic (false). Hai bộ tọa độ xác định hướng của gradient. Vì tọa độ thứ hai (35, 100) xuống
và bên phải tọa độ thứ nhất (5, 30), độ dốc đi xuống và sang phải theo một góc. Vì độ dốc này là tuần
hoàn (đúng), màu bắt đầu bằng màu xanh lam, dần dần chuyển sang màu vàng, sau đó dần dần trở lại
màu xanh. Nếu độ dốc là theo chu kỳ, màu sẽ chuyển từ màu đầu tiên được chỉ định (ví dụ: màu xanh)
sang màu thứ hai (ví dụ: , màu vàng).
Dòng 30 sử dụng phương thức Graphics2D để vẽ một đối tượng Shape đã điền vào một đối tượng
thực hiện giao diện Shape (gói java.awt). Trong trường hợp này, chúng tôi hiển thị một đối tượng
Ellipse2D.Double. Hàm tạo Ellipse2D.Double nhận được bốn đối số chỉ định hình chữ nhật giới hạn cho
hình elip hiển thị.

Hình chữ nhật, nét

Tiếp theo chúng ta vẽ một hình chữ nhật màu đỏ với đường viền dày. Dòng 33 gọi setPaint để đặt
đối tượng Paint thành Color.RED. Dòng 34 sử dụng phương thức Graphics2D setStroke để đặt các đặc
điểm của đường viền hình chữ nhật hình chữ nhật (hoặc các đường cho bất kỳ hình dạng nào khác).
Phương thức setStroke yêu cầu làm đối số của nó một đối tượng thực hiện giao diện Stroke (gói
java.awt). Trong trường hợp này, chúng tôi sử dụng một thể hiện của lớp BasicStroke. ClassBasicStroke
cung cấp một số hàm tạo để chỉ định độ rộng của dòng, cách dòng kết thúc (được gọi là mũ kết thúc),
cách các dòng kết hợp với nhau (được gọi là nối dòng) và các thuộc tính dấu gạch ngang của dòng (nếu
nó xếp một đường đứt nét). Hàm tạo ở đây chỉ định rằng đường kẻ phải rộng 10 pixel.

Dòng 35 sử dụng vẽ phương thức Graphics2D để vẽ một đối tượng Shape trong trường hợp này,
một hình chữ nhật2. Phương thức khởi tạo của TheRonymous2D.Double nhận các đối số chỉ định hình
chữ nhật Hình chữ nhật tọa độ x trên, bên trái, tọa độ y, chiều rộng và chiều cao.

Rounded Rectangles, BufferedImages andTexturePaint Objects

Tiếp theo, chúng ta vẽ hình chữ nhật xung quanh chứa đầy mô hình được tạo trong một đối tượng
BufferedImage (gói java.awt.image). Dòng 38 Con39 tạo đối tượng BufferedImage. Class BufferedImage
có thể được sử dụng để tạo ra hình ảnh có màu và thang độ xám. BufferedImage cụ thể này rộng 10
pixel và cao 10 pixel (như được chỉ định bởi hai đối số đầu tiên của hàm tạo). Đối số thứ ba
BufferedImage.TYPE_INT_RGB chỉ ra rằng hình ảnh được lưu trữ bằng màu sắc bằng cách sử dụng bảng
màu RGB.

Để tạo mô hình điền hình chữ nhật tròn, trước tiên chúng ta phải vẽ vào BufferedImage. Dòng 42 tạo
một đối tượng Graphics2D (bằng cách gọi phương thức BufferedImage createdGraphics) có thể được sử
dụng để vẽ vào BufferedImage. Các dòng 43 Ném50 sử dụng các phương thức setColor, fillRect và
drawRect để tạo mẫu.

Các dòng 53 Pha54 đặt đối tượng Paint thành một đối tượng TexturePaint (gói java.awt) mới. Một
đối tượng TexturePaint sử dụng hình ảnh được lưu trữ trong BufferedImage liên quan của nó (đối số
hàm tạo đầu tiên) làm kết cấu điền cho hình dạng đầy. Đối số thứ hai chỉ định vùng Hình chữ nhật từ
BufferedImage sẽ được sao chép qua kết cấu. Trong trường hợp này, Hình chữ nhật có cùng kích thước
với BufferedImage. Tuy nhiên, một phần nhỏ hơn của BufferedImage có thể được sử dụng.

Phương thức Lines55 chỉ có thể sử dụng phương thức Graphics2D để điền vào rút tiền đối tượng
Shape trong trường hợp này, RoundRonymous2D.Double. Hàm tạo cho lớp RoundRonymous2D.Double
nhận được sáu đối số chỉ định kích thước hình chữ nhật và chiều rộng cung và chiều cao cung được sử
dụng để xác định làm tròn các góc.

Tiếp theo chúng ta vẽ một vòng cung hình chiếc bánh với một đường trắng dày. Dòng 59 đặt đối
tượng Paint thành Color.WHITE.Line 60 đặt đối tượng Stroke thành BasicStroke mới cho ra đường trượt
6pixel. Các dòng 61 3162 sử dụng phương thức Graphics2D để vẽ một đối tượng Shape trong trường
hợp này, một đối số đầu tiên của hàm tạo Arc2D.Double .Arc2D.Double xác định tọa độ x phía trên bên
trái, tọa độ y phía trên bên trái, chiều rộng và chiều cao của hình chữ nhật giới hạn cho cung tròn. Đối số
thứ năm chỉ định góc cung. Đối số thứ sáu chỉ định góc cung. Đối số cuối cùng chỉ định cách đóng vòng
cung. Hằng số Arc2D.PIE chỉ ra rằng vòng cung được đóng lại bằng cách vẽ hai đường thẳng Một đường
thẳng từ điểm bắt đầu vòng cung đến tâm của hình chữ nhật giới hạn và một dòng từ tâm của hình chữ
nhật giới hạn đến điểm kết thúc. Class Arc2D cung cấp hai hằng số tĩnh khác để chỉ định cách đóng vòng
cung. Constant Arc2D.CHORD vẽ một đường thẳng từ điểm bắt đầu đến điểm kết thúc. Constant
Arc2D.OPEN chỉ định rằng không nên đóng vòng cung.

Dòng

Cuối cùng, chúng tôi vẽ hai đường bằng cách sử dụng các đối tượng Line2D, một vật rắn và một
đường đứt nét. Dòng 65 đặt đối tượng Paint thành Color.GREEN. Dòng 66 sử dụng vẽ phương thức
Graphics2D để vẽ đối tượng Shape trong trường hợp này, một thể hiện của lớp Line2D.Double. Các đối
số của hàm xây dựngLine2D.Double chỉ định tọa độ bắt đầu và tọa độ kết thúc của dòng.

Dòng 69 khai báo mảng float một phần tử chứa giá trị 10. Mảng này mô tả các dấu gạch ngang trong
dòng nét đứt. Trong trường hợp này, mỗi dấu gạch ngang sẽ dài 10 pixel. Để tạo các dấu gạch ngang có
độ dài khác nhau trong mô hình, chỉ cần cung cấp độ dài của mỗi dấu gạch ngang dưới dạng một phần
tử trong mảng. Dòng 70 đặt đối tượng Paint thành Color.YELLOW. Các dòng 71 Chỉ 72 đặt đối tượng
Stroke thành BasicStroke mới. Dòng này sẽ rộng 4 pixel và sẽ được làm tròn kết thúc
(BasicStroke.CAP_ROUND). Nếu các đường nối với nhau (như trong một hình chữ nhật ở các góc), phép
nối của chúng sẽ được làm tròn (BasicStroke.JOIN_ROUND). Đối số dấu gạch ngang chỉ định độ dài dấu
gạch ngang cho dòng. Đối số cuối cùng chỉ ra chỉ mục bắt đầu trong mảng dấu gạch ngang cho dấu gạch
ngang đầu tiên trong mẫu. Dòng 73 sau đó vẽ một dòng với Stroke hiện tại.

Tạo hình dạng của riêng bạn với các đường dẫn chung

Tiếp theo, chúng tôi trình bày một đường dẫn chung, một hình dạng được xây dựng từ các đường
thẳng và đường cong phức tạp. Một đường dẫn chung được biểu diễn với một đối tượng của lớp
GeneralPath (gói java.awt.geom). Ứng dụng của quả sung. 15.31 và 15.32 thể hiện vẽ một đường đi
chung theo hình ngôi sao năm cánh

Hình 15.32 | Tạo JFrame để hiển thị sao.

Lines18 Vang19 khai báo hai mảng int biểu thị tọa độ x-andy của các điểm trong ngôi sao. Dòng 22
tạo sao đối tượng GeneralPath. Dòng 25 sử dụng phương thức GeneralPath moveTo để chỉ định điểm
đầu tiên trong dấu sao. Câu lệnh cho các dòng trong 28 2829 sử dụng dòng phương thức GeneralPath
để vẽ một đường thẳng đến điểm tiếp theo trong ngôi sao. Mỗi cuộc gọi mới đến vẽ một dòng từ điểm
trước đến điểm hiện tại. Dòng 31 sử dụng phương thức GeneralPath closePath để vẽ một dòng từ điểm
cuối đến điểm được chỉ định trong lệnh gọi cuối cùng để di chuyển. Điều này hoàn thành con đường
chung. Dòng 33 sử dụng dịch phương thức Graphics2D để di chuyển gốc bản vẽ sang vị trí (150, 150). Tất
cả các thao tác vẽ hiện sử dụng vị trí (150, 150) là (0, 0). Câu lệnh for trong dòng 36 Pha45 vẽ ngôi sao 20
lần bằng cách xoay nó quanh điểm gốc mới. Dòng 38 sử dụng phương thức Graphics2D để xoay hình
được hiển thị tiếp theo. Đối số chỉ định góc quay tính bằng radian (với 360 ° = 2πradian). Dòng 44 sử
dụng phương thức Fill2 đồ họa để vẽ một phiên bản đầy sao.

15.9 Kết thúc


Trong chương này, bạn đã học cách sử dụng các khả năng đồ họa của Java, để tạo ra các bản vẽ đầy
màu sắc. Bạn đã học cách chỉ định vị trí của một hệ thống Javabocoordine khó hiểu và cách vẽ trên cửa
sổ bằng phương thức paintComponent. Bạn đã được giới thiệu Màu sắc và bạn đã học cách sử dụng lớp
này để chỉ định các màu khác nhau ảnh hưởng đến các thành phần RGBc của chúng. Bạn đã sử dụng hộp
thoại JColorChooser để cho phép người dùng chọn màu trong chương trình. Sau đó, bạn đã học cách
làm việc với phông chữ khi vẽ văn bản trên cửa sổ. Bạn đã học cách tạo một đối tượng Phông chữ từ tên
phông chữ, kiểu và kích thước, cũng như cách truy cập các số liệu của phông chữ. Từ đó, bạn đã học
được cách vẽ các hình dạng khác nhau trên một cửa sổ, ví dụ như hình chữ nhật (thường, roundand3D),
hình bầu dục và đa giác, cũng như các đường và vòng cung. Sau đó, bạn đã sử dụng API Java 2D để tạo
ra các hình dạng phức tạp hơn và để điền vào chúng với các mô hình nâng cấp. Các mô hình chính, bao
gồm các phương thức, được sử dụng để tạo ra các phương thức của nó và các phương thức của nó.
Chúng tôi giới thiệu các biểu thức chính quy cho khớp mẫu trong chuỗi và trình bày cách xác thực đầu
vào của người dùng bằng các biểu thức thông thường.

Tóm lược
Mục 15.1 Giới thiệu
• Hệ tọa độ Java Java (trang 632) là sơ đồ để xác định mọi điểm (trang 643) trên màn hình.

• Một cặp tọa độ (tr. 632) có tọa độ x (ngang) và tọa độ y (dọc).

• Các tọa độ được sử dụng để chỉ ra nơi đồ họa sẽ được hiển thị trên màn hình.

• Đơn vị tọa độ được đo bằng pixel (tr. 632). Một pixel là một màn hình hiển thị đơn vị độ phân giải
nhỏ nhất.

Mục 15.2 Bối cảnh đồ họa và đối tượng đồ họa


• Bối cảnh đồ họa Java (tr. 634) cho phép vẽ trên màn hình.

• Đồ họa lớp (trang 632) có chứa đối xứng, đường thẳng, hình chữ nhật và hình chữ nhật. Các
phương pháp cũng được bao gồm cho thao tác phông chữ và thao tác màu. • Đối tượng AGraphics quản
lý bối cảnh đồ họa và vẽ các pixel trên màn hình đại diện cho văn bản và các đối tượng đồ họa khác, ví
dụ: đường thẳng, hình elip, hình chữ nhật và các đa giác khác (tr. 654).

• Đồ họa lớp là một lớp trừu tượng. Mỗi triển khai Java có một lớp con Đồ họa cung cấp các khả
năng vẽ. Việc triển khai này bị lớp Đồ họa ẩn khỏi chúng tôi, cung cấp giao diện cho phép chúng tôi sử
dụng đồ họa theo cách độc lập với nền tảng.

• Phương thức paintComponent có thể được sử dụng để vẽ đồ họa trong bất kỳ thành phần
JComponent nào.

• Phương thức paintComponent nhận một đối tượng Đồ họa được hệ thống truyền cho phương
thức khi một thành phần Xoay nhẹ cần được sơn lại.

• Khi một ứng dụng thực thi, bộ chứa ứng dụng gọi phương thức paintComponent. Để
paintComponent được gọi lại, một sự kiện phải xảy ra.

• Khi aJComponent được hiển thị, phương thức paintComponent của nó được gọi.
• Callingmethod repaint (p. 635) trên một thành phần cập nhật đồ họa được vẽ trên thành phần
đó.

Mục 15.3 Kiểm soát màu


• Class Class (tr. 632) khai báo các phương thức và hằng số để thao tác màu trong chương trình
Java.

• Mọi màu được xử lý từ thành phần từ agared, agreen và ablue. Ngoài ra, phần tiếp theo được
gọi là các giá trị RGB (tr. 636). Các thành phần RGB xác định số lượng màu đỏ, xanh lá cây và xanh dương
tương ứng. Giá trị RGB càng lớn, lượng màu cụ thể đó càng lớn.

• Các phương thức màu getRed, getGreen và getBlue (tr. 636) trả về các giá trị int từ 0 đến 255
tương ứng với số lượng màu đỏ, xanh lục và xanh lam.

• Phương thức đồ họa getColor (tr. 636) trả về một đối tượng Màu với màu vẽ hiện tại.

• Phương thức đồ họa setColor (tr. 636) đặt màu vẽ hiện tại.

• Phương thức đồ họa fillRect (tr. 636) drawsaronymousfillsbythe Đối tượng đồ họa siêu tốc.

• Phương thức đồ họa drawString (tr. 638) vẽ một Chuỗi theo màu hiện tại.

• Thành phần GUIJColorChooser (tr. 639) cho phép người dùng ứng dụng chọn màu.

• Phương thức tĩnh JColorChooser showDialog (tr. 641) hiển thị hộp thoại JColorChooser phương
thức.

Mục 15.4 Thao tác phông chữ


• Phông chữ lớp (trang 632) chứa các phương thức và hằng số để thao tác phông chữ.

• Lớp Phông chữ Ngôn ngữ xây dựng chính tả, tên phông chữ (trang 643), phông chữ. • Kiểu
phông chữ AFont muối có thể là Font.PLAIN, Font.ITALIC hoặc Font.BOLD (mỗi kiểu là một trường tĩnh
của Phông chữ lớp). Các kiểu phông chữ có thể được sử dụng kết hợp (ví dụ: Font.ITALIC + Font.BOLD).

• Kích thước phông chữ được đo bằng điểm. Một điểm là 1/72 inch.

• Phương thức đồ họa setFont (tr. 643) đặt phông chữ vẽ trong đó văn bản sẽ được hiển thị.

• Phương thức phông chữ getStyle (tr. 645) trả về một giá trị số nguyên biểu thị kiểu Font Font
hiện tại.

• Phương thức phông chữ getSize (tr. 643) trả về kích thước phông chữ theo điểm.

• Phương thức phông chữ getName (tr. 643) trả về tên phông chữ hiện tại dưới dạng chuỗi.

• Phương thức phông chữ getF Family (tr. 645) trả về tên của họ phông chữ mà phông chữ hiện
tại thuộc về. Tên của họ phông chữ là nền tảng cụ thể.

• Lớp FontMetrics (tr. 645) chứa các phương thức để lấy thông tin phông chữ.

• Số liệu phông chữ (tr. 645) bao gồm chiều cao, gốc và hàng đầu.
Mục 15,5 Vẽ đường, hình chữ nhật và hình bầu dục
• Các phương thức đồ họa fillRoundRect (p. 649) và drawRoundRect (p. 649) vẽ các hình chữ
nhật với các góc tròn.

• Các phương thức đồ họa draw3DRect (p. 651) và fill3DRect (p. 651) vẽ các hình chữ nhật ba
chiều.

• Các phương thức đồ họa drawOval (p. 651) và fillOval (p. 651) vẽ hình bầu dục.

Mục 15.6 Vẽ Arcs


• Một hình cung (tr. 651) được vẽ như một phần của hình bầu dục.

• Arcs quét từ góc bắt đầu theo số độ được chỉ định bởi góc cung của chúng (tr. 651).

• Các phương thức đồ họa drawArc (p. 651) và fillArc (p. 651) được sử dụng để vẽ các cung.

Mục 15.7 Vẽ đa giác và Polylines


• Đa giác lớp chứa các phương thức để tạo đa giác.

• Đa giác là các hình đa diện khép kín bao gồm các đoạn thẳng.

• Polylines (tr. 654) là một chuỗi các điểm được kết nối.

• Phương thức đồ họa drawPolyline (tr. 656) hiển thị một loạt các đường được kết nối.

• Các phương thức đồ họa drawPolygon (p. 656) và fillPolygon (p. 657) được sử dụng để vẽ đa
giác.

• Addpoint phương thức đa giác (tr. 657) thêm các cặp tọa độ x và y vào Đa giác.

Mục 15.8 API Java 2D


• API Java 2D (tr. 657) cung cấp các khả năng đồ họa hai chiều nâng cao.

• Lớp Graphics2D (tr. 632) Lớp con của Graphics Graphics được sử dụng để vẽ bằng API Java 2D.

• Các lớp Java 2D API Java để vẽ các hình dạng bao gồm Line2D.Double, Oval2D.Double,
RoundRonymous2D.Double, Arc2D.Double và Ellipse2D.Double (tr. 657).

• Lớp GradientPaint (trang 632) trợ giúp rút tiền thay đổi giao diện theo chiều ngang gọi
làagagient (trang 660).

• Phương thức fill2 đồ họa (tr. 660) vẽ một đối tượng được điền bất kỳ loại nào thực hiện giao
diện Shape (tr. 660).

• Class BasicStroke (tr. 632) giúp chỉ định các đặc điểm vẽ của các đường.

• Vẽ phương thức Graphics2D (tr. 660) được sử dụng để vẽ đối tượng Shape.

• Các lớp GradientPaint và TexturePaint (tr. 632) giúp chỉ định các đặc điểm để điền vào các hình
dạng bằng màu sắc hoặc các mẫu.
• Đường dẫn chung (tr. 662) là một hình dạng được xây dựng từ các đường thẳng và đường
cong phức tạp và được biểu diễn bằng một đối tượng của lớp GeneralPath (trang 662).

• Phương thức GeneralPath moveTo (tr. 663) chỉ định điểm đầu tiên trong đường dẫn chung.

• Dòng phương thức GeneralPathTo (tr. 663) vẽ aline đến điểm tiếp theo trong đường dẫn. Mỗi
dòng newcallto Để vẽ một dòng từ điểm trước đến điểm hiện tại.

• Phương thức GeneralPath closePath (tr. 664) vẽ một đường thẳng từ điểm cuối cùng đến điểm
được chỉ định trong lệnh gọi cuối cùng để di chuyển. Điều này hoàn thành con đường chung.

• Dịch phương thức Graphics2D (tr. 664) được sử dụng để di chuyển gốc bản vẽ sang vị trí mới.

• Xoay phương thức Graphics2D (tr. 664) được sử dụng để xoay hình được hiển thị tiếp theo.

Bài tập tự kiểm tra


15.1 Điền vào chỗ trống trong mỗi câu sau đây:

a) Trong Java 2D, phương thức của lớp đặt các đặc điểm của một đường được sử dụng để vẽ
hình.

b) Lớp giúp chỉ định phần tô màu cho hình dạng sao cho phần tô dần thay đổi từ màu này sang
màu khác.

c) Phương thức của lớp Đồ họa vẽ một đường thẳng giữa hai điểm.

d) RGB là viết tắt của, và.

e) Kích thước phông chữ được đo bằng đơn vị gọi là.

f) Lớp giúp chỉ định điền vào hình dạng bằng cách sử dụng mô hình được vẽ trong
BufferedImage.

15.2 Cho biết mỗi điều sau đây là đúng hay sai. Iffalse, giải thích tại sao.

a) Hai đối số đầu tiên của phương thức Đồ họa drawOval chỉ định tọa độ tâm của hình bầu dục. b)
Trong hệ tọa độ Java, tọa độ x tăng dần từ trái sang phải và tọa độ y từ trên xuống dưới.

c) Phương thức đồ họa fillPolygon vẽ một đa giác đầy trong màu hiện tại.

d) Phương thức đồ họa drawArc cho phép các góc âm.

e) Phương thức đồ họa getSize trả về kích thước của phông chữ hiện tại tính bằng centimet.

f) Tọa độ pixel (0, 0) nằm ở trung tâm chính xác của màn hình.

15.3 Tìm (các) lỗi trong mỗi điều sau đây và giải thích cách sửa lỗi. Giả sử g là một đối tượng Đồ họa.

a) g.setFont ("SansSerif");

b) g.erase (x, y, w, h); // xóa hình chữ nhật tại (x, y)

c) Phông chữ f = Phông chữ mới ("Serif", Phông chữ.BOLDITALIC, 12); d) g.setColor (255, 255, 0);
// đổi màu thành màu vàng
Đáp án bài tập tự ôn tập
15.1

a) setStroke, Graphics2D.

b) GradientPaint.

c) vẽLine.

d) đỏ, lục, lam.

e) điểm.

f) TexturePaint.

15.2 a) Sai. Hai đối số đầu tiên xác định góc trên bên trái của hình chữ nhật giới hạn.

b) Đúng.

c) Đúng.

d) Đúng.

e) Sai. Cỡ chữ được đo bằng điểm.

f) Sai. Tọa độ (0,0) tương ứng với góc trên bên trái của thành phần GUI mà bản vẽ xảy ra.

15.3 a) Phương thức setFont lấy một đối tượng Phông làm đối số mà không phải là Chuỗi.

b) Lớp Graphics không có phương thức xóa. Phương thức ClearRect nên được sử dụng.

c) Phông chữ.BOLDITALIC không phải là kiểu phông chữ hợp lệ. Để có được một phông chữ in
nghiêng đậm, hãy sử dụng Font.BOLD + Font.ITALIC.

d) Phương thức setColor lấy một đối tượng Màu làm đối số, không phải ba số nguyên.

Bài tập
15.4 Điền vào chỗ trống trong mỗi câu sau đây:

a) Lớp API Java 2D được sử dụng để vẽ hình bầu dục. b) Các phương thức vẽ và điền vào lớp
Graphics2D yêu cầu một đối tượng kiểu làm đối số của chúng.

c) Ba hằng số xác định kiểu phông chữ là và.

d) Phương thức Graphics2D đặt màu vẽ cho các hình dạng Java 2D.

15,5 Cho biết mỗi điều sau đây là đúng hay sai. Iffalse, giải thích tại sao.

a) Phương thức đồ họa drawPolygon tự động kết nối các điểm cuối của đa giác.

b) Phương thức đồ họa drawLine vẽ một đường thẳng giữa hai điểm.
c) Phương thức đồ họa fillArc sử dụng độ để chỉ định góc.

d) Trong hệ tọa độ Java, các giá trị trên trục y tăng dần từ trái sang phải.

e) Đồ họa kế thừa trực tiếp từ lớp Object

f) Đồ họa là một lớp trừu tượng.

g) Lớp Font kế thừa trực tiếp từ lớp Đồ họa.

15.6 (ConcentricCirclesUsingMethod drawArc) Viết một ứng dụng vẽ một chuỗi tám vòng tròn đồng
tâm. Các vòng tròn nên được phân tách bằng 10 pixel. Sử dụng phương thức đồ họa drawArc.

15.7 (Vòng tròn đồng tâm sử dụng lớp Ellipse2D.Double) Sửa đổi giải pháp của bạn thành Bài tập 15.6 để
vẽ hình bầu dục bằng cách sử dụng lớp Ellipse2D.Double và vẽ phương thức của lớp Graphics2D.

15.8 (Dòng ngẫu nhiên sử dụng Lớp Line2D.Double) Sửa đổi giải pháp của bạn thành Bài tập 15.7 để vẽ
các đường ngẫu nhiên bằng màu sắc ngẫu nhiên và độ dày đường ngẫu nhiên. Sử dụng lớp
Line2D.Double và vẽ phương thức của lớp Graphics2D để vẽ các đường.

15.9 (Ngẫu nhiên)

Viết một ứng dụng hiển thị các hình tam giác được tạo ngẫu nhiên với các màu khác nhau. Mỗi hình tam
giác nên được lấp đầy bằng một màu khác nhau. Sử dụng lớp GeneralPath và phương thức điền vào lớp
Graphics2D để vẽ các hình tam giác.

15.10 (Ký tự ngẫu nhiên) Viết một ứng dụng vẽ ngẫu nhiên các ký tự theo các phông chữ, kích cỡ và màu
sắc khác nhau.

15.11 (Lưới sử dụng phương thức drawLine) Viết một ứng dụng vẽ lưới 8 nhân 8. Sử dụng phương thức
đồ họa drawLine.

15.12 (Lưới sử dụng Lớp Line2D.Double) Sửa đổi giải pháp của bạn thành Bài tập 15.11 để vẽ lưới bằng
cách sử dụng các thể hiện của lớp Line2D.Double và vẽ phương thức của lớp Graphics2D.

15.13 (Lưới sử dụng phương thức drawRect) Viết một ứng dụng vẽ lưới 10 nhân 10. Sử dụng phương
thức GraphicsRect.

15,14 (Lưới sử dụng lớp hình chữ nhật2D.Double) Sửa đổi giải pháp của bạn thành Bài tập 15.13 để vẽ
lưới bằng cách sử dụng lớp hình chữ nhật2. Sự cố và phương thức vẽ của lớp Graphics2D.

15.15 (DrawTetrahedrons) Viết một ứng dụng vẽ một khối tứ diện (hình dạng kích thước với bốn mặt
hình tam giác). Sử dụng lớp GeneralPath và vẽ phương thức của lớp Graphics2D.

15.16 (DrawCubes) Viết một ứng dụng vẽ một khối. Sử dụng lớp GeneralPath và vẽ đối xứng của lớp
Graphics2D.

15,17 (Vòng kết nối sử dụng lớp Ellipse2D.Double) Viết một ứng dụng yêu cầu người dùng nhập bán kính
của hình tròn dưới dạng số dấu phẩy động và vẽ hình tròn, cũng như các giá trị của đường kính, chu vi và
diện tích hình tròn. Sử dụng giá trị 3.14159 forπ. [Lưu ý: Bạn cũng có thể sử dụng hằng số Math.PI được
xác định trước cho giá trị của π. Hằng số này chính xác hơn giá trị 3.14159. Class Math được khai báo
trong gói java.lang, vì vậy bạn không cần nhập nó.] Sử dụng các công thức sau (r là bán kính):
đường kính = 2r

chu vi = 2πr

diện tích = πr2

Người dùng cũng nên được nhắc về một bộ tọa độ ngoài bán kính. Sau đó vẽ vòng tròn và hiển thị
đường kính, chu vi và diện tích của nó, sử dụng đối tượng Ellipse2D.Double để biểu diễn vòng tròn và
phương thức vẽ của lớp Graphics2D để hiển thị nó.

15,18 (Trình bảo vệ màn hình) Viết một ứng dụng mô phỏng trình bảo vệ màn hình. Ứng dụng nên vẽ
ngẫu nhiên các dòng bằng phương thức drawLine của lớp Graphics. Sau khi vẽ 100 dòng, ứng dụng sẽ tự
xóa và bắt đầu vẽ lại các dòng. Để cho phép chương trình vẽ liên tục, hãy giả định để sơn lại như là dòng
cuối cùng trong phương thức vẽ Thành phần. Bạn có nhận thấy bất kỳ vấn đề với điều này trên hệ thống
của bạn?

15.19 (Bộ đếm thời gian sử dụng ScreenSaver) Gói javax.swing có chứa Bộ đếm thời gian được sắp xếp
theo kiểu không thể thực hiện được của phương thức gọi ActionPerformed của giao diện ActionListener
trong một khoảng thời gian cố định (được chỉ định bằng mili giây). Sửa đổi giải pháp của bạn thành Bài
tập 15,18 để loại bỏ lệnh gọi để sơn lại từ phương thức paintComponent. Khai báo lớp của bạn để thực
hiện ActionListener. (TheactionPerformed phương thức chỉ đơn giản là gọi lại.) Khai báo biến thể loại
biến thời gian gọi là bộ định thời trong lớp của bạn. Trong hàm tạo cho lớp của bạn, hãy viết các câu
lệnh sau:

timer = new Timer( 1000, this );

timer.start();

Điều này tạo ra một thể hiện của lớp Timer sẽ gọi đối tượng này là phương thức ActionPerformed sau
mỗi 1000 mili giây (tức là, mỗi giây).

15.20 (Trình bảo vệ màn hình cho một số dòng ngẫu nhiên) Sửa đổi giải pháp của bạn thành Bài tập
15.19 để cho phép người dùng nhập số lượng dòng ngẫu nhiên sẽ được rút ra trước khi ứng dụng xóa
chính mình và rút lại các dòng rút tiền. Usea JTextField để có được giá trị. Người dùng sẽ có thể nhập
một số mới intothe JTextField bất cứ lúc nào trong quá trình thực hiện chương trình. Sử dụng một lớp
bên trong để thực hiện xử lý sự kiện cho JTextField.

15,21 (Trình bảo vệ màn hình với hình dạng) Sửa đổi giải pháp của bạn thành Bài tập 15.19 sao cho nó
sử dụng việc tạo số ngẫu nhiên để chọn các hình dạng khác nhau để hiển thị. Sử dụng các phương thức
của Đồ họa lớp.

15,22 (ScreenSaverUsingtheJava2DAPI) Sửa đổi giải pháp của bạn thành Bài tập 15,21 để sử dụng các
lớp và khả năng vẽ của Java2DAPI. Vẽ các hình dạng như hình chữ nhật và hình elip, với độ dốc được tạo
ngẫu nhiên. Sử dụng lớp GradientPaint để tạo gradient.

15,23 (Đồ họa rùa) Sửa đổi giải pháp của bạn để Tập thể dục nhân số lượng vị trí với 10 (hoặc bất kỳ giá
trị nào bạn chọn). Thực hiện bản vẽ với các tính năng Java 2D API.
15.24 (Chuyến tham quan Hiệp sĩ) Tạo ra một phiên bản đồ họa của vấn đề Hiệp sĩ Chuyến đi (Bài tập
7.22, Bài tập 7.23 và Bài tập 7.26). Khi mỗi lần di chuyển được thực hiện, ô thích hợp của bàn cờ phải
được cập nhật với số lần di chuyển thích hợp. Nếu kết quả của chương trình là một chuyến tham quan
đầy đủ hoặc một chuyến tham quan kín, chương trình sẽ hiển thị một thông báo phù hợp. Nếu bạn
thích, hãy sử dụng Hẹn giờ lớp (xem Bài tập 15.19) để giúp tạo hiệu ứng cho Chuyến tham quan Hiệp sĩ.

15.25 (Rùa và thỏ) Tạo ra một phiên bản đồ họa của mô phỏng Rùa và thỏ (Bài tập 7.28). Mô phỏng
ngọn núi bằng cách vẽ một vòng cung kéo dài từ góc dưới bên trái của cửa sổ đến góc trên bên phải.
Con rùa và thỏ rừng nên chạy lên núi. Thực hiện đầu ra đồ họa để thực sự in rùa và thỏ trên cung cho
mỗi lần di chuyển. [Gợi ý: Kéo dài thời gian của cuộc đua từ 70 đến 300 để cho phép bạn có một khu vực
đồ họa lớn hơn.]

15,26 (Vẽ các tinh thần) Viết một ứng dụng sử dụng phương thức Graphics drawPolyline để vẽ một hình
xoắn ốc tương tự như hình 15,33....

15,27 (Biểu đồ hình tròn) Viết chương trình nhập bốn số và vẽ biểu đồ dưới dạng biểu đồ hình tròn. Sử
dụng lớp Arc2D.Double và phương thức điền vào lớp Graphics2D để thực hiện bản vẽ. Vẽ mỗi miếng
bánh trong một màu riêng biệt.

15.28 (Chọn hình dạng) Viết một ứng dụng cho phép người dùng chọn một hình dạng từ JComboBox và
vẽ nó 20 lần với các vị trí và kích thước ngẫu nhiên trong phương thức paintComponent. Mục đầu tiên
trong JComboBox phải là hình dạng mặc định được hiển thị lần đầu tiên paintComponent được gọi.

15,29 (Màu ngẫu nhiên) Sửa đổi Bài tập 15.28 để vẽ mỗi trong số 20 hình có kích thước ngẫu nhiên theo
màu được chọn ngẫu nhiên. Sử dụng tất cả 13 đối tượng Màu được xác định trước trong một mảng
Màu.

15.30 (Hộp thoại JColorChooser) Sửa đổi Bài tập 15.28 để cho phép người dùng chọn màu mà hình dạng
sẽ được vẽ từ hộp thoại JColorChooser.

(Tùy chọn) Nghiên cứu tình huống GUI và đồ họa: Thêm Java 2D

15.31 Java 2D giới thiệu nhiều khả năng mới để tạo đồ họa độc đáo và ấn tượng. Chúng tôi sẽ thêm một
tập hợp nhỏ các tính năng này vào ứng dụng vẽ mà bạn đã tạo trong Bài tập 14,17. Trong phiên bản này,
bạn sẽ cho phép người dùng chỉ định độ dốc để điền vào hình dạng và thay đổi các đặc tính của nét vẽ
để vẽ các đường và đường viền của hình dạng. Người dùng sẽ có thể chọn màu nào tạo độ dốc và đặt
chiều rộng và chiều dài dấu gạch ngang của đột quỵ. Trước tiên, bạn phải cập nhật phân cấp MyShape
để hỗ trợ chức năng Java 2D. Thực hiện các thay đổi sau trong lớp MyShape:

a) Thay đổi phương thức trừu tượng rút ra loại tham số từ đồ họa sang Graphics2D.

b) Thay đổi tất cả các biến loại Màu thành loại Sơn để bật hỗ trợ cho độ dốc. [Lưu ý: Nhắc lại rằng lớp
Màu thực hiện giao diện Paint.]

c) Thêm một biến thể hiện của kiểu Stroke trong lớp MyShape và tham số Stroke trong hàm tạo để khởi
tạo biến thể hiện mới. Hành trình mặc định phải là một thể hiện của lớp BasicStroke.
Các lớp MyLine, MyBoundedShape, MyOval và MyRonymous nên mỗi lớp thêm một tham số Stroke
cho các hàm tạo của chúng. Trong các phương thức vẽ, mỗi hình dạng nên đặt Paint và Stroke trước khi
vẽorfillingashape.SinceGraphics2D isasub classof Graphics, wecancContuetouse Các phương thức đồ
họa drawLine, drawOval, fillOval và cài đặt.

Tiếp theo, bạn sẽ cập nhật DrawPanel để xử lý các tính năng Java 2D. Thay đổi tất cả các biến màu
thành biến sơn. Khai báo một biến đối tượng currentStroke loại Stroke và cung cấp một phương thức
thiết lập cho nó. Cập nhật các cuộc gọi đến các hàm tạo hình dạng riêng lẻ để bao gồm các đối số Paint
và Stroke. Trong phương thức paintComponent, truyền tham chiếuGraphics để gõ Graphics2D và sử
dụng tham chiếu Graphics2D trong mỗi lệnh gọi phương thức MyShape.

Tiếp theo, làm cho các tính năng Java 2D mới có thể truy cập được từ GUI. Tạo một JPanel của các
thành phần GUI để thiết lập các tùy chọn Java 2D. Thêm các thành phần này ở đầu DrawFrame bên dưới
bảng điều khiển hiện chứa các điều khiển hình dạng tiêu chuẩn (xem Hình 15.34). Các thành phần GUI
này phải bao gồm:

a) Một hộp kiểm để chỉ định có vẽ bằng gradient hay không.

b) Hai nút JB mà mỗi nút hiển thị hộp thoại aJColorChooser để cho phép người dùng chọn màu thứ
nhất và thứ hai trong gradient. (Chúng sẽ thay thế JComboBox được sử dụng để chọn màu trong Bài tập
14,17.)

c) Một trường văn bản để nhập chiều rộng Stroke.

d) Một trường văn bản để nhập chiều dài dấu gạch ngang. e) Một hộp kiểm để chọn xem vẽ đường
đứt nét hay nét liền. Nếu người dùng chọn vẽ bằng một gradient, hãy đặt Paint trên DrawPanel thành
một gradient của hai màu được người dùng chọn.

Hình 15.34 | Vẽ bằng Java 2D


GradientPaint mới (0, 0, màu 1, 50, 50, màu 2, đúng ) )

tạo một GradientPaint quay vòng theo đường chéo từ phía trên bên trái sang phía dưới bên phải mỗi 50
pixel. Các biến màu1 và color2 đại diện cho các màu được người dùng chọn. Nếu người dùng không
chọn sử dụng gradient, thì chỉ cần đặt Paint trên DrawPanel là Màu đầu tiên được người dùng chọn.

Đối với các nét, nếu người dùng chọn một đường liền nét, thì hãy tạo Stroke bằng biểu thức

BasicStroke mới (chiều rộng, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND)

trong đó chiều rộng biến là chiều rộng được chỉ định bởi người dùng trong trường văn bản độ rộng
dòng. Nếu người dùng chọn một đường đứt nét, thì hãy tạo Stroke bằng biểu thức

BasicStroke mới (chiều rộng, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND, 10, dấu


gạch ngang, 0)

trong đó chiều rộng một lần nữa là chiều rộng trong trường độ rộng đường và dấu gạch ngang là một
mảng có một phần tử có giá trị là độ dài được chỉ định trong trường độ dài dấu gạch ngang. Các đối
tượng Bảng điều khiển và Đột quỵ phải được chuyển đến đối tượng hình dạng Trình xây dựng mô tả khi
hình dạng được tạo trong DrawPanel.

Tạo nên sự khác biệt


15.32 (Hiển thị loại lớn cho người có thị lực kém) Khả năng tiếp cận của máy tính và Internet đối với
mọi người, bất kể khuyết tật, đang trở nên quan trọng hơn khi các công cụ này đóng vai trò trong cuộc
sống cá nhân và công việc của chúng tôi. bởi Tổ chức Y tế Thế giới
(www.who.int/mediacentre/factsheets/fs282/en/), 124 triệu người trên toàn thế giới có thị lực kém. Để
tìm hiểu thêm về tầm nhìn thấp, hãy kiểm tra mô phỏng tầm nhìn thấp dựa trênGUI tại
www.webaim.org /simutions/lowvision.php. Những người có thị lực kém có thể thích chọn phông chữ
và / hoặc cỡ chữ lớn hơn khi đọc tài liệu điện tử và trang web. Java có năm phông chữ logic logic tích
hợp sẵn được đảm bảo có sẵn trong bất kỳ triển khai Java nào, bao gồm Serif, Sans-serif và Monospaces.
Viết một ứng dụng GUI cung cấp JTextArea trong đó người dùng có thể nhập văn bản. Cho phép người
dùng chọn Serif, Sans-serif hoặc Monospaces từ JComboBox. Cung cấp một JCheckBox đậm, nếu được
chọn sẽ làm cho văn bản in đậm. Bao gồm Kích thước phông chữ và Giảm kích thước phông chữ JButton
cho phép người dùng chia tỷ lệ kích thước của phông chữ lên hoặc xuống, tương ứng, tại một điểm tại
một thời điểm. Bắt đầu với cỡ chữ là 18 điểm. Đối với mục đích của bài tập này, hãy đặt kích thước
phông chữ onthe JComboBox, JButtonsand JCheckBox thành 20 điểm để một người có thị lực kém sẽ có
thể đọc văn bản trên chúng.

You might also like