java-chapter 14 creating graphics with dwindow
DESCRIPTION
Chapter 14 Creating Graphics with DWindowTRANSCRIPT
211
© สงวนลขสทธ พฤศจกายน 2553 (ปรบปรงครงท 7 ฉบบใชตวภาค 2/2553) เรยบเรยงโดย วงศยศ เกดศร (แบงค)
Computer Programming using Java ANSWER : Creating Graphics with DWindow - 14
CHAPTER 14
การสรางกราฟกดวยดวนโดว
(Creating Graphics with DWindow)
1. ความรเบองตนเกยวกบดวนโดว (Introduction to DWindow)
1. ลกษณะของดวนโดว 1) ดวนโดว (DWindow) เปนคลาสคลาสหนงในซอฟตแวรเจแลป (JLab) ทสรางขนเพอใชอานวยความสะ-
ดวกในการประมวลผลทางดานกราฟกของภาษาจาวา
2) ดวนโดวถกพฒนาโดย รศ.ดร.สมชาย ประสทธจตระกล ภาควชาวศวกรรมคอมพวเตอร คณะวศวกรรม-
ศาสตร จฬาลงกรณมหาวทยาลย ซงเปนคนเดยวกบผ ทพฒนาเจแลป
3) ดวนโดวใชงานไดเฉพาะในเจแลปเทานน ไมสามารถใชงานรวมกบซอฟตแวรอนๆ ได
4) ตวอยางการทางานของดวนโดว เชน ลากเสนตรง วาดสเหลยม วาดวงร อานภาพจากแฟมภาพมาแสดง
บนวนโดว ขอแผนทจดภาพของภาพทปรากฏบนวนโดวไปประมวลผล เปนตน
2. การเรยกใชงานดวนโดว 1) กอนเรยกใชงานดวนโดว ใหนาเขาคลาส DWindow โดยใชคาสง import jlab.graphics.DWindow;
ไวทหวคลาสทจะประมวลผลเสมอ ดงตวอยางตอไปน
2) ทาการสรางดวนโดวโดยการ new (เหมอนการ new ออบเจคทวไป)
3) มมบนสดทางซายของวนโดวมพกด (x, y) เปน (0, 0) โดยทคาพกด x จะเพมขนเมอไปทางขวา ในขณะท
คาพกด y จะเพมขนเมอลงดานลาง
1 2 3 4 5 6 7
import jlab.graphics.DWindow; ... public class TestDWindow { public static void main(String [] args) { ... } }
1 2 3 4 5 6
import jlab.graphics.DWindow; public class TestDWindow { public static void main(String [] args) { DWindow w = new DWindow(…); } }
DWindow
พกด (0, 0)
x
y
212
© สงวนลขสทธ พฤศจกายน 2553 (ปรบปรงครงท 7 ฉบบใชตวภาค 2/2553) เรยบเรยงโดย วงศยศ เกดศร (แบงค)
Computer Programming using Java 14 - Creating Graphics with DWindow : ANSWER
2. รายละเอยดของคลาสดวนโดว (DWindow Class)
(อางองจากหนงสอ“เรมเรยนเขยนโปรแกรม: ฉบบวาจาจาวา” แตงโดย รศ.ดร.สมชาย ประสทธจตระกล , 2552)
1. ตวแปรประจาคลาส (Class Variables) รายละเอยดของตวแปร คาอธบาย
static int BLACK คา RGB ของสดา
static int BLUE คา RGB ของสนาเงน
static int BROWN คา RGB ของสนาตาล
static int CYAN คา RGB ของสฟา
static int GRAY คา RGB ของสเทา
static int GREEN คา RGB ของสเขยว
static int MAGENTA คา RGB ของสมวงแดง
static int ORANGE คา RGB ของสสม
static int PINK คา RGB ของสชมพ
static int PURPLE คา RGB ของสมวงออน
static int RED คา RGB ของสแดง
static int SILVER คา RGB ของสเงน
static int VIOLET คา RGB ของสมวง
static int WHITE คา RGB ของสขาว
static int YELLOW คา RGB ของสเหลอง
2. ตวสราง (Constructors) รายละเอยดของตวสราง และคาอธบาย
DWindow() .
ตวสรางวนโดวทมขนาด 200 x 200
DWindow(double width, double height) .
ตวสรางวนโดวทมขนาด width x height
3. เมทอด (Methods) รายละเอยดของเมทอด และคาอธบาย
void clearBackground().
ลางภาพทปรากฏบนวนโดวออกใหหมด แลวแสดงสพนหลงทไดตงไว
void draw(DImage img, double xc, double yc) .
วาดรปภาพ
213
© สงวนลขสทธ พฤศจกายน 2553 (ปรบปรงครงท 7 ฉบบใชตวภาค 2/2553) เรยบเรยงโดย วงศยศ เกดศร (แบงค)
Computer Programming using Java ANSWER : Creating Graphics with DWindow - 14
รายละเอยดของเมทอด และคาอธบาย
void drawEllipse(double xc, double yc, double w, double h) .
วาดเสนขอบของวงร
void drawEllipse(int c, double xc, double yc, double w, double h) .
วาดเสนขอบของวงร แบบระบส
void drawLine(double x1, double y1, double x2, double y2) .
ลากเสนตรงบนวนโดว
void drawLine(int c, double x1, double y1, double x2, double y2) .
ลากเสนตรงบนวนโดว แบบระบส
void drawRect(double x, double y, double w, double h) .
วาดเสนขอบของสเหลยมผนผา
void drawRect(int c, double x, double y, double w, double h) .
วาดเสนขอบของสเหลยมผนผา แบบระบส
void drawString(String s, double size, double x, double y) .
แสดงสตรงบนวนโดว
void drawString(int c, String s, double size, double x, double y) .
แสดงสตรงบนวนโดว แบบระบส
void fade(double level) .
ทาทกจดภาพบนวนโดวในจางลง
void fillEllipse(double xc, double yc, double w, double h) .
วาดวงรทบ
void fillEllipse(int c, double xc, double yc, double w, double h) .
วาดวงรทบ แบบระบส
void fillRect(double x, double y, double w, double h) .
วาดสเหลยมผนผาทบ
void fillRect(int c, double x, double y, double w, double h) .
วาดสเหลยมผนผาทบ แบบระบส
static int getB(int c) .
คนคาของแมสนาเงนของส c มคาระหวาง 0 ถง 255
static int getG(int c) .
คนคาของแมสเขยวของส c มคาระหวาง 0 ถง 255
214
© สงวนลขสทธ พฤศจกายน 2553 (ปรบปรงครงท 7 ฉบบใชตวภาค 2/2553) เรยบเรยงโดย วงศยศ เกดศร (แบงค)
Computer Programming using Java 14 - Creating Graphics with DWindow : ANSWER
รายละเอยดของเมทอด และคาอธบาย
int getHeight().
คนความสงของวนโดว
DPoint getMouse().
คนพกดของตวชเมาสบนวนโดว
int[][] getPixmap().
คนแผนทจดภาพของวนโดว
static int getR(int c) .
คนคาของแมสแดงของส c มคาระหวาง 0 ถง 255
int getWidth().
คนความกวางของวนโดว
void loadImage(String fileName) .
อานแฟมภาพมาแสดงบนวนโดว ปรบขนาดวนโดวตามขนาดภาพ
void loadImage(String fileName, double w, double h) .
อานแฟมภาพมาแสดงบนวนโดว ปรบขนาดของภาพและวนโดวใหเปน wxh
static int mixRGB(double r, double g, double b) .
คนคาสทไดจากการผสมแมสแดง เขยว นาเงน
static int mixRGB(double a, double r, double g, double b) .
คนคาสทไดจากการผสมแมสแดง เขยว นาเงน และคาอลฟา
void onMouseDragged(DPoint p) .
ระบบเรยกเมทอดนใหอตโนมตเมอมการลากเมาสบนวนโดวน
void onMouseMoved(DPoint p) .
ระบบเรยกเมทอดนใหอตโนมตเมอมการเลอนเมาสบนวนโดวน.
static int randomColor().
คนคาสสมๆ
void saveImage(String fileName) .
บนทกภาพบนวนโดวลงในแฟมภาพ
void setBackground(int c) .
ตงสพนหลงของวนโดว
void setForeground(int c) .
ตงสทใชในการวาดบนวนโดว
215
© สงวนลขสทธ พฤศจกายน 2553 (ปรบปรงครงท 7 ฉบบใชตวภาค 2/2553) เรยบเรยงโดย วงศยศ เกดศร (แบงค)
Computer Programming using Java ANSWER : Creating Graphics with DWindow - 14
รายละเอยดของเมทอด และคาอธบาย
void setPixmap(int[][] p) .
แสดงภาพใหมบนวนโดวตามแผนทจดภาพ p ทไดรบ
void setRepaintDuringSleep(boolean enable) .
ตงใหวนโดวแสดงภาพขณะ sleep หรอไม
void setSize(int width, int height) .
ตงขนาดของวนโดว
void sleep(long millis) .
สงใหหยดการทางานชวขณะ
DPoint waitForMouseClicked().
รอจนกวาจะมการคลกเมาส
โจทยขอท 1 [ระดบปานกลาง] จงเขยนโปรแกรมภาษาจาวาใหสมบรณเพอ ใชคลาส DWindow สรางวน-โดวขนาด 300 x 200 ซงภายในมลกบอลหนงลกสแดงทม รศม 25 Pixels โดยมจดเรมตนทจดตรงกลางของวนโดว พรอมทงใหลกบอลเดงตามกรอบของวนโดวไปเรอยๆ โดยไปทางแกน x ครงละ 2 Pixels และไปทางแกน y ครงละ 1 Pixels และกาหนดใหคา fade เปน 0.5 และในการเปลยนตาแหนงหรอเคลอนทแตละครงจะใหมการหลบ (Sleep) ครงละ 10 msec โดยโปรแกรมจะทางานไปเรอยๆ จนกวาจะหยดโปรแกรม (15 คะแนน)
import jlab.graphics.DWindow; public class TestBall {
public static void main(String[] args) {
//สรางวนโดวขนาด 300 x 200
//กาหนดใหตวแปร x และ y เกบตาแหนงกงกลางของวนโดว และใหตวแปร r เกบคารศมของลกบอล
//กาหนดใหตวแปร dx และ dy มคาเทากบจานวน Pixels ทจะเคลอนเปลยนตาแหนงตอหนงครง ในแกน x และแกน y ตามลาดบ
216
© สงวนลขสทธ พฤศจกายน 2553 (ปรบปรงครงท 7 ฉบบใชตวภาค 2/2553) เรยบเรยงโดย วงศยศ เกดศร (แบงค)
Computer Programming using Java 14 - Creating Graphics with DWindow : ANSWER
while (true) {
//กาหนดคา fade เปน 0.5
//สรางลกบอลหนงลกตามขอกาหนดขางตน
//คาสงในการเปลยนตาแหนงของลกบอล (ลกบอลเคลอนท ) โดยจะตองมการตรวจสอบวาลก บอลชนผนงของวนโดวหรอไม ถาชนใหมการเดงกลบเสมอ
//คาสงหลบ 10 msec เพอใหกบทางานหยดชวขณะ } //End of while } //End of main } //End of class
โจทยขอท 2 [ระดบยาก] จงเขยนโปรแกรมภาษาจาวาใหสมบรณเพอใชคลาส DWindow สรางวนโดวขนาด 250 x 200 ซงภายในมลกบอล 50 ลก แบบหลากส (สมเลอกส) ทมรศม 5 Pixels โดยทกลก จะมจดเรมตนทจดตรงกลางของวนโดว และลกบอล ทกลกจะ เดงตามกรอบของวนโดว โดยเคลอนทไปตามแกน x และแกน y แบบสม ซงกาหนดใหคา fade เปน 0.3 และในการเคลอนทแตละครงจะใหมการหลบ (Sleep) ครงละ 20 msec โดยโปรแกรมจะทางานไปเรอยๆ จนกวาจะหยดโปรแกรม (20 คะแนน)
217
© สงวนลขสทธ พฤศจกายน 2553 (ปรบปรงครงท 7 ฉบบใชตวภาค 2/2553) เรยบเรยงโดย วงศยศ เกดศร (แบงค)
Computer Programming using Java ANSWER : Creating Graphics with DWindow - 14
import jlab.graphics.DWindow; public class TestMultiBalls {
public static void main(String[] args) {
//สรางวนโดวขนาด 250 x 200
//กาหนดใหอาเรย x และ y เกบตาแหนงกงกลางวนโดวของลกบอลแตละลก //กาหนดใหอาเรย r เกบรศมของลกบอลแตละลก //กาหนดใหอาเรย dx และ dy เกบคา Pixel ทใชในการเคลอนทของลกบอลแตละลก โดย ใชการ สมตวเลขระหวาง -4 ถง 4 //กาหนดใหอาเรย c เกบคาสของลกบอลแตละลกโดยการสมแมสขนมาแลวผสมใหเปนสเดยวกน
while (true) {
//กาหนดคา fade เปน 0.3
//สรางลกบอล 50 ลก พรอมทงกาหนดคาตางๆ ขางตนใหกบลกบอลแตละลก และใหลกบอล เคลอนทไปตามแนวแกน x และ y ตามคา dx และ dy ของลกบอลแตละลก
218
© สงวนลขสทธ พฤศจกายน 2553 (ปรบปรงครงท 7 ฉบบใชตวภาค 2/2553) เรยบเรยงโดย วงศยศ เกดศร (แบงค)
Computer Programming using Java 14 - Creating Graphics with DWindow : ANSWER
//คาสงหลบ 20 msec เพอใหกบทางานหยดชวขณะ } //End of while } //End of main } //End of class
โจทยขอท 3 [ระดบยาก] จงเขยนโปรแกรมภาษาจาวาใหสมบรณเพอ สรางคลาส Flag ทไวสาหรบสรางธงชาตของประเทศตางๆ และคลาส NationalFlag เพอเรยกใชงานคลาส Flag ซงมรายละเอยดดงตอ ไปน (25 คะแนน) คลาส Flag (15 คะแนน) 1) แอตทรบวประจาออบเจคแบบ private ชนด DWindow ชอ w 2) ตวสรางแบบไมมพารามเตอรเพอกาหนดคาวนโดวใหมขนาด 200 x 150 3) ตวสรางแบบ 2 พารามเตอรทเปนจานวนจรง เพอกาหนดคาวนโดวใหมขนาดตามทระบ 4) ตวสรางแบบ 1 พารามเตอรทเปนชนด DWindow เพอกาหนดคาวนโดวใหเทากบ DWindow ทระบ 5) เมทอดประจาออบเจคแบบ public void ชอ thailand(…) เพอแสดงธงชาตไทยขนบนวนโดว 6) เมทอดประจาออบเจคแบบ public void ชอ japan(…) เพอแสดงธงชาตญปนขนบนวนโดว 7) เมทอดประจาออบเจคแบบ public void ชอ germany(…) เพอแสดงธงชาตเยอรมนขนบนวนโดว 8) เมทอดประจาออบเจคแบบ public void ชอ france(…) เพอแสดงธงชาตฝรงเศสขนบนวนโดว 9) เมทอดประจาออบเจคแบบ public void ชอ italy(…) เพอแสดงธงชาตอตาลขนบนวนโดว 10) เมทอดประจาออบเจคแบบ public void ชอ danmark(…) เพอแสดงธงชาตเดนมารกขนบนวนโดว 11) เมทอดประจาออบเจคแบบ public void ชอ unitedarab(…) เพอแสดงธงชาตสหรฐอาหรบเอม
เรตสขนบนวนโดว คลาส NationalFlag (10 คะแนน)
219
© สงวนลขสทธ พฤศจกายน 2553 (ปรบปรงครงท 7 ฉบบใชตวภาค 2/2553) เรยบเรยงโดย วงศยศ เกดศร (แบงค)
Computer Programming using Java ANSWER : Creating Graphics with DWindow - 14
1) เมทอด main(…) ทสรางอาเรยของออบเจคชนด Flag ใชแทนธงชาตของแตละประเทศ ทประกอบไปดวย 7 ประเทศทกลาวมา โดยมขนาดของวนโดวเปน 150 x 90 พรอมกาหนดใหแตละออบเจคแสดงภาพธงชาตของแตละประเทศขนบนวนโดว
//คลาส Flag
220
© สงวนลขสทธ พฤศจกายน 2553 (ปรบปรงครงท 7 ฉบบใชตวภาค 2/2553) เรยบเรยงโดย วงศยศ เกดศร (แบงค)
Computer Programming using Java 14 - Creating Graphics with DWindow : ANSWER
//คลาส NationalFlag
221
© สงวนลขสทธ พฤศจกายน 2553 (ปรบปรงครงท 7 ฉบบใชตวภาค 2/2553) เรยบเรยงโดย วงศยศ เกดศร (แบงค)
Computer Programming using Java ANSWER : Creating Graphics with DWindow - 14
โจทยขอท 4 [ระดบยาก] จงเขยนโปรแกรมภาษาจาวาใหสมบรณเพอสรางคลาส TrafficSign ทแทนปายสญญาณจราจร และคลาส TestTrafficSign เพอเรยกใชงานคลาส TrafficSign ซงมรายละ เอยดดงตอไปน (20 คะแนน) 1) คลาส TrafficSign มรายละเอยดดงตอไปน (15 คะแนน)
import jlab.graphics.DWindow; public class TrafficSign {
//แอตทรบวประจาออบเจคแบบ private ชนด DWindow ชอ w
//ตวสรางแบบไมมพารามเตอรเพอกาหนดใหวนโดวมขนาดเปน 100 x 200 และมสพนหลงเปนสดา //เมทอดประจาออบเจคแบบ public void ชอ showRed(…) เพอแสดงสญญาณไฟแดงขนบนวนโดว และปรบสญญาณไฟอนๆ ใหเปนสจาง (fade = 0.8)
//เมทอดประจาออบเจคแบบ public void ชอ showYellow(…) เพอแสดงสญญาณไฟเหลองขนบน วนโดวและปรบสญญาณไฟอนๆ ใหเปนสจาง (fade = 0.8)
222
© สงวนลขสทธ พฤศจกายน 2553 (ปรบปรงครงท 7 ฉบบใชตวภาค 2/2553) เรยบเรยงโดย วงศยศ เกดศร (แบงค)
Computer Programming using Java 14 - Creating Graphics with DWindow : ANSWER
//เมทอดประจาออบเจคแบบ public void ชอ showGreen(…) เพอแสดงสญญาณไฟเขยวขนบน วนโดวและปรบสญญาณไฟอนๆ ใหเปนสจาง (fade = 0.8)
//เมทอดประจาออบเจคแบบ public void ชอ sleep(…) ทรบพารามเตอรเปนจานวนเตม 1 คา เพอทาใหวนโดวหยดการทางานชวขณะ
} //End of class
223
© สงวนลขสทธ พฤศจกายน 2553 (ปรบปรงครงท 7 ฉบบใชตวภาค 2/2553) เรยบเรยงโดย วงศยศ เกดศร (แบงค)
Computer Programming using Java ANSWER : Creating Graphics with DWindow - 14
2) คลาส TestTrafficSign มรายละเอยดดงตอไปน (5 คะแนน)
import jlab.graphics.DWindow; public class TestTrafficSign {
public static void main(String[] args) {
//สรางออบเจคชอ t ทมชนดเปน TrafficSign
//เขยนคาสงเพอวนแสดงไฟสญญาณจราจร โดยใหแสดงเรยงตามลาดบตงแตไฟแดง ไฟเหลอง และไฟเขยว โดยใหมการหยดเวนชวงครงละ 2000 msec
} //End of main } //End of class
โจทยขอท 5 [ระดบยาก] จงเขยนโปรแกรมภาษาจาวาใหสมบรณเพอสรางคลาส Grade ทใชอานแฟม ขอมลผลการเรยนของรายวชาหนงๆ เขามา แลวทาการนบจานวนผลการเรยนในแตละระดบ พรอมทงแสดงผลออกมาในรปของกราฟแทง และสรางคลาส TestGrade เพอเรยกใชงานคลาส Grade ซงมรายละ เอยดดงตอไปน (30 คะแนน)
import jlab.graphics.DWindow; import java.util.Scanner; import java.io.*; public class Grade {
//แอตทรบวประจาออบเจคชนด Scanner ชอ file
//ตวสรางทรบพารามเตอร 1 ตวชนดสตรงทเปนชอแฟมขอมล เพอใชสาหรบเปดแฟมขอมลนน
224
© สงวนลขสทธ พฤศจกายน 2553 (ปรบปรงครงท 7 ฉบบใชตวภาค 2/2553) เรยบเรยงโดย วงศยศ เกดศร (แบงค)
Computer Programming using Java 14 - Creating Graphics with DWindow : ANSWER
//ตวสรางทรบพารามเตอร 1 ตวชนด File ทเปนแฟมขอมลใดๆ เพอใชสาหรบเปดแฟมขอมลนน //เมทอดประจาออบเจคแบบ public ชอ countGrade(…) เพอใชนบจานวนผลการเรยนแตละระดบ ของรายวชาหนงๆ จากแฟมขอมล พรอมทงคนคากลบ (คนคาเปนอาเรย)
//เมทอดประจาออบเจคแบบ public ชอ findMax(…) รบพารามเตอร 1 ตวทเปนอาเรยทไดจากการ นบผลการเรยนแตละระดบ เพอหาคาผลการเรยนทมมากทสดจากระดบผลการเรยนทงหมด 8 ระดบ
53300121 A 53300221 D+ 53300321 F ...
ตวอยางแฟมขอมล
225
© สงวนลขสทธ พฤศจกายน 2553 (ปรบปรงครงท 7 ฉบบใชตวภาค 2/2553) เรยบเรยงโดย วงศยศ เกดศร (แบงค)
Computer Programming using Java ANSWER : Creating Graphics with DWindow - 14
//เมทอดประจาออบเจคแบบ public ชอ showBarGraph(…) เพอใชแสดงผลการนบระดบผลการ เรยนทง 8 ระดบในรปแบของ กราฟแทง ขนบนวนโดว ดงตวอยางผลลพธตอไปน
//เมทอดประจาออบเจคแบบ public ชอ close(…) เพอปดแฟมขอมล } //End of class
226
© สงวนลขสทธ พฤศจกายน 2553 (ปรบปรงครงท 7 ฉบบใชตวภาค 2/2553) เรยบเรยงโดย วงศยศ เกดศร (แบงค)
Computer Programming using Java 14 - Creating Graphics with DWindow : ANSWER
import java.util.Scanner; import java.io.*; public class TestGrade {
public static void main(String[] args) throws IOException {
//สรางออบเจคจากคลาส Grade โดยเปดอานแฟมขอมล "d:/data.txt" พรอมทงคานวนหา จานวนผลการเรยนในแตละระดบ และแสดงผลลพธในรปแบบของกราฟแทงใหสวยงาม
} //End of main } //End of class