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

Đ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

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 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 ứng dụng có giao diện đồ hoạ hay còn gọi là GUI(Grapthical User Interface) 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 Window Toolkit (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ụng trực tiếp mã native của hệ nền, chính vì vậy nó phụ thuộc rất nhiề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ớn các thành phần trong thư viện Swing đều được tô vẽ trực tiếp trên canvas bằng mã lệnh của Java, ngoại trừ các thành phần là lớp con của lớp java.awt Windown hoặc Java.awt.Panel vốn phả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 awt vẫn được hỗ trợ trong Java 2, tuy nhiên Sun khuyên bạn nên sử dụng các thành phần Swing thay cho các thành phần awt, tuy nhiên các thành phần trong thư viện Swing không thể thay tất cả các thành phần trong thư viện awt Chúng chỉ thay thế một phần awt như: Button, Panel, TextField, Còn cá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 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 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: 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.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ần awt như: button, checkbox, radio button, scrollbar, list,… chỉ sử dụng được khi ta đưa nó vào khung chứa (container) Một số đối tượng container trong Java:  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 Panel khá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 ứng dụ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ông qua 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ư đối tượ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ớn choán nhiều chỗ trên màn hình như những hình ảnh hay văn bản nhiều dòng  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ạ 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 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 đặt Button vào JPanel Việc làm này có thể gây lỗi 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) 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ện chứ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ỗ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 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 2.2 Chương trình 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) + Cách 1: import java.awt.*; import java.applet.*; import javax.swing.*; public class vd3 extends java.applet.Applet { public void paint(Graphics g) { super.paintComponents(g); //chuỗi kí tự g.drawString("welcome to Java",40,40); } public static void main(String[] args) { JFrame frame = new JFrame("DrawMessage"); frame.getContentPane().add(new vd3()); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setSize(300,200); frame.setVisible(true); } +Cách 2: import java.awt.*; import java.applet.*; import javax.swing.*; public class thu extends java.applet.Applet { //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” // public static void main(String[] args) { JFrame frame = new JFrame("DrawMessage"); frame.getContentPane().add(new thu()); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setSize(300,200); frame.setVisible(true); } // public void paint(Graphics g) { g.drawBytes(bytesToDraw, 0, bytesToDraw.length, 10,50); } } +Cách 3: import java.awt.*; import java.applet.*; import javax.swing.*; public class thu extends java.applet.Applet { Char [] charsToDraw={‘A’,’B’,’C’,’D’,’E’,’F’,’G’}; // public static void main(String[] args) { JFrame frame = new JFrame("DrawMessage"); frame.getContentPane().add(new thu()); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setSize(300,200); frame.setVisible(true); } // public void paint(Graphics g) { g.drawBytes(charsToDraw, 0, charsToDraw.length, 10,20); } } 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 2D API sẽ sử dụng Nó có những khả năng như xử lý ảnh, alpha-based compositing, 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ái niệm hiển thị Hiển thị là quá trình mà máy đồ họa Java 2D (chính là lớp java.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ện Java 2D nằm ở khả năng hiển thị linh hoạt của lớp Graphics2D Ở đây ta tìm hiể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ị: Chúng ta hãy bắt đầu bằng việc chỉ ra sự khác nhau giữa 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 Ví dụ: 1 hình rộng 4 inch trên màn hình (máy vi tính) thì cũng rộng như 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 Tuy nhiên, 1 máy in có thể có kích thước là 300, 600, hoặc thậm chí 1200 hoặc nhiề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ự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 • Trong gói geom (geometry- hình học) có interface Shape và hiện thực của các lớp Polygon, RectangularShape, Rectangle, Line2D, CubicCurve2D, Area, GeneralPath, QuadCurve2D 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) 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ủa chương trình vẽ đường thẳng DrawLines.java Chương trình vẽ đường thẳng import java.applet.*; import java.awt.*; import javax.swing.*; import java.awt.event.*; public class Duongthang extends Applet { public static void main(String[] args) { JFrame frame = new JFrame("DrawMessage"); frame.getContentPane().add(new Duongthang()); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setSize(300,200); frame.setVisible(true); } public void paint (Graphics g) { g.drawLine(0,0,200,100); g.drawLine(20,120,250,120); } } 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 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 phương thức sau sẽ giúp ta vẽ hình chữ nhật với các dạng khác nhau: 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) VD: chương trình vẽ hình chữ nhật import java.applet.*; import java.awt.*; import javax.swing.*; import java.awt.event.*; public class Hinhchunhat extends Applet { public static void main(String[] args) { JFrame frame = new JFrame("DrawMessage"); frame.getContentPane().add(new Hinhchunhat()); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setSize(300,200); frame.setVisible(true); } public void paint(Graphics g) { g.drawRect(10,10,150,100); } } 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 ảnh 2D dùng cho những hình ả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 đự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ú ý 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 nhữ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ựa như những nút nhấn (button) mà ta vẫn thường thấy Cách vẽ hình chữ nhật 3D không khác gì cách vẽ hình chữ nhật bình thường chỉ có điều ta cần cho biế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, Boolean raised) // Vẽ hình chữ nhật 3D và tô bên trong Public void fill3DRect(int x, int y, int width, int height, Boolean raised) Nếu raised=true hình chữ nhật sẽ ở dạng nổi còn raised=false hình chữ nhật sẽ ở dạng chìm Ví dụ: Chương trình vẽ hình chữ nhật 3 chiều import java.awt.*; import java.applet.*; import javax.swing.*; import java.awt.event.*; import java.awt.Component.*; public class HCN_3D extends Applet { public static void main(String[] args) { JFrame frame = new JFrame("DrawMessage"); frame.getContentPane().add(new HCN_3D()); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setSize(300,200); frame.setVisible(true); } public void paint(Graphics g) { //Ðat mau trung voi mau nen g.setColor(getBackground()); //Ve hinh chu nhat g.draw3DRect(10,10,60,40,true); //Ve hinh chu nhat chim ko duoc to ben trong g.draw3DRect(100,10,60,40,false); //Ve hinh chu nhat chim duoc to ben trong g.fill3DRect(100,80,60,40,false); } } 2 Vẽ vòng tròn và hình ellip Vòng tròn chỉ là trường hợp đặc biệt của hình Ellip, lớp Graphics của java cung cấp cho ta phương thức drawOval và fillOval dùng để vẽ vừa vòng tròn vừa ellip, hai hình này gọi chung là hình bầu dục (Oval) Cũng như các hình trước fillOval dùng để tô đầy bên trong của hình //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ước width 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ạ độ đỉnh gó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 đặt width=height Ví dụ: Chương trình vẽ vòng tròn và ellip import java.awt.*; import java.applet.*; import javax.swing.*; import java.awt.event.*; public class btlon extends Panel { public static void main(String[] args) { JFrame frame = new JFrame("DrawMessage"); frame.getContentPane().add(new btlon()); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setSize(300,200); frame.setVisible(true); } public void paint(Graphics g) { //Vẽ hình tròn có đường kính là 60 g.drawOval(0,0,60,60); //Vẽ hình elip rộng 40 và cao 20 g.fillOval(0,100,60,40); } } 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 PHƯƠNG) I Chương trình: import javax.swing.*; import javax.swing.event.*; import java.awt.*; import java.awt.event.*; import java.awt.Component; public class btlon extends JFrame implements ActionListener { //Chuong trinh chinh public static void main(String arg[]) { new btlon().setVisible(true); } // -private int x; private int y; 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) { this.x=x; } public int getx() { return this.x; } public void sety(int y) //XAC DINH DIEM DAT CUA CON TRO CHUOT { this.y=y; } public int gety() //GET { return this.y; } public btlon() //HAM TAO { super("Chuong trinh demo cac cong cu Graphic cua Java"); //TITLE Container tuyen=getContentPane(); tuyen.setLayout(new BorderLayout()); main.add(mnufile); //add MENU VAO CONTAINER main.add(mnucolor); main.add(mnuKhoi); mnufile.add(clears); mnufile.add(Rect); mnufile.add(Oval); mnufile.add(Rectangle2); mnufile.add(filloval); mnucolor.add(iRed); mnucolor.add(iYellow); mnucolor.add(iBlue); mnucolor.add(iGreen); mnucolor.add(iGray); mnucolor.add(iPink); mnucolor.add(iOrange); mnucolor.add(icyan); mnuKhoi.add(iCylinder); setJMenuBar(main); //p1 chua nhan va file van ban JPanel p1 = new JPanel(new FlowLayout()); p1.add(new JLabel("Gia tri 1 :")); p1.add(a = new JTextField(3)); p1.add(new JLabel("Gia tri 2 :")); p1.add(b = new JTextField(3)); p1.add(new JLabel("Gia tri 3 :")); p1.add(c = new JTextField(3)); p1.add(new JLabel("Gia tri 4 :")); p1.add(d = new JTextField(3)); //Them p1 vao frame getContentPane().setLayout(new BorderLayout()); getContentPane().add(p1, BorderLayout.CENTER); iRed.addActionListener(this); iYellow.addActionListener(this); iBlue.addActionListener(this); iGreen.addActionListener(this); iGray.addActionListener(this); iPink.addActionListener(this); iOrange.addActionListener(this); icyan.addActionListener(this); iCylinder.addActionListener(this); Rect.addActionListener(this); Rectangle2.addActionListener(this); Oval.addActionListener(this); filloval.addActionListener(this); clears.addActionListener(this); addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { setVisible(false); dispose(); System.exit(0); } }); addMouseListener(new MouseHanlder(this)); setSize(500,500); } //XU LY su kien public void actionPerformed(ActionEvent ev) { String actionCommand = ev.getActionCommand(); if (ev.getSource()==iRed) this.color=Color.red; if (ev.getSource()==iYellow) this.color=Color.yellow; if (ev.getSource()==iBlue) this.color=Color.blue; if (ev.getSource()==iGreen) this.color=Color.green; if (ev.getSource()==iGray) this.color=Color.gray; if (ev.getSource()==iPink) this.color=Color.pink; if (ev.getSource()==iOrange) this.color=Color.orange; if (ev.getSource()==icyan) this.color=Color.cyan; if (ev.getSource()==clears) { this.clear=true; this.repaint(); this.hinh=""; } if (ev.getSource()==Rect) { this.clear=false; this.hinh="rect"; this.repaint(); } if (ev.getSource()==Rectangle2) { this.clear=false; this.hinh="tri"; this.repaint(); } if (ev.getSource()==Oval) { this.clear=false; this.hinh="oval"; this.repaint(); } if (ev.getSource()==filloval) { this.clear=false; this.hinh="foval"; this.repaint(); } if (ev.getSource()==iCylinder) { this.clear=false; this.hinh="Cylinder"; this.repaint(); } } public void update(Graphics g) { paint(g); } public void paint(Graphics g) { if (this.clear !=true && this.hinh.equals("rect")) { int num1 = (Integer.parseInt(a.getText().trim())); int num2 = (Integer.parseInt(b.getText().trim())); g.setColor(this.color); g.drawRect(this.getx(),this.gety(),num1, num2); } if (this.clear !=true && this.hinh.equals("oval")) { int num1 = (Integer.parseInt(a.getText().trim())); g.setColor(this.color); g.drawOval(this.getx(),this.gety(),num1,num1); } if (this.clear !=true && this.hinh.equals("tri")) { int num1 = (Integer.parseInt(a.getText().trim())); int num2 = (Integer.parseInt(b.getText().trim())); g.setColor(this.color); g.fillRect(this.getx(),this.gety(),num1,num2); } if (this.clear !=true && this.hinh.equals("foval")) { int num1 = (Integer.parseInt(a.getText().trim())); g.setColor(this.color); g.fillOval(this.getx(),this.gety(),num1,num1); } if (this.clear !=true && this.hinh.equals("Cylinder")) { int num1 = (Integer.parseInt(a.getText().trim())); int num2 = (Integer.parseInt(b.getText().trim())); int num3 = (Integer.parseInt(c.getText().trim())); g.setColor(this.color); g.drawOval(this.getx(), this.gety(),num1,num2); g.drawLine(this.getx(), this.gety()+num2/2, this.getx(), this.gety()+num2/2+num3 ); g.drawLine(this.getx()+num1, this.gety()+num2/2, this.getx()+num1, this.gety()+num2/2+num3 ); g.drawOval(this.getx(), this.gety()+num3,num1,num2); } if (this.hinh.equals("")) { g.setColor(getBackground()); g.fillRect(this.getx(),this.gety(),300,300); } } } //CLASS MOUSEHANDLER class MouseHanlder extends MouseAdapter { private btlon draw; public MouseHanlder(btlon d) { draw=d; } //TOA DO CHUOT public void mousePressed(MouseEvent e) { draw.setx(e.getX()); draw.sety(e.getY()); } public void mouseReleased(MouseEvent e) { draw.repaint(); } } II Hướng dẫn sử dụng  Chương trình có 3 menu là: 1 Vẽ hình: cho phép người sử dụng lựa chọn để vẽ các hình: a Xóa b Hình chữ nhật1 (chỉ có viền khung) c Hình tròn1 (Chỉ có đường viền) d Hình chữ nhật2 (được tô bên trong) e Hình tròn 2 (được tô bên trong) 2 Màu: cho phép người dùng chọn một trong các màu sau để vẽ: a Đỏ b Vàng c Xanh nước biển d Xanh lá cây e Hồng f Màu xám g Màu lục lam 3  1 2 3 4 5 6 7 h Cam 3D: có hai tính năng sau: a Vẽ hình trụ tròn b Vẽ hình lập phương Cách sử dụng: Vẽ hình chữ nhật: Để vẽ được hình chữ nhật bạn phải nhập hai chỉ số vào 2 ô: giá trị 1 và giá trị 2 là kích thước chiều dài và chiều rộng của hình chữ nhật Vẽ hình tròn: Bạn phải nhập đường kính của hình tròn vào ô giá trị 1 để vẽ hình tròn Vẽ hình tam giác: Bạn phải nhập 4 giá trị vào 4 ô: giá trị 1, giá trị 2, giá trị 3, giá trị 4 lần lượt là tọa độ x,y cúa 2 đỉnh của tam giác mà bạn muốn vẽ (Đỉnh thứ ba là tọa độ vị trí mà con trỏ chuột kích xuống) Xóa Khi bạn muốn xóa 1 hình nào đó bạn chọn chức năng xóa và kích chuột vào hình mà bạn muốn xóa Sử dụng màu Bạn chọn màu để vẽ các hình trên menu Màu Vẽ hình trụ Bạn nhập vào các ô giá trị 1, giá trị 2, giá trị 3 vẽ hình trụ Vẽ hình lập phương TÀI LIỆU THAM KHẢO - Giáo trình lý thuyết và bài tập Java _ Trần Tiến Dũng - Bài giảng môn Lập trình Java – Ngô Công Thắng - Đề cương bài giảng Java cơ sở _ Trường ĐH Sư phạm kỹ thuật Hưng Yên Nhóm biên soạn Hoàng Trọng Thế, Nguyễn Duy Tân - Bài giảng lập trình java – Huỳnh Công Pháp, Khoa CNTT, ĐHNK - Và một số tài liệu tham khảo khác ... / /Vẽ hình trịn có đường kính 60 g.drawOval(0,0,60,60); / /Vẽ hình elip rộng 40 cao 20 g.fillOval(0,100,60,40); } } 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 PHƯƠNG)...A.TÌM HIỂU VỀ ĐỒ HOẠ TRONG JAVA: VẼ CHỮ, VẼ HÌNH 2D VÀ 3D Một khả Java cho phép ta xây dựng ứng dụng có giao diện đồ hoạ hay gọi GUI(Grapthical User Interface) Khi Java phát hành, thành phần đồ. .. java. awt.Graphics2D) nhận lớp đồ họa hình, văn bản, ảnh vẽ chúng lên thiết bị xuất hình hay máy in Sức mạnh thư viện Java 2D nằm khả hiển thị linh hoạt lớp Graphics2D Ở ta tìm hiểu số điều Java 2D bao

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