java-chapter 14 creating graphics with dwindow

16

Click here to load reader

Upload: wongyos-keardsri

Post on 25-May-2015

1.685 views

Category:

Documents


1 download

DESCRIPTION

Chapter 14 Creating Graphics with DWindow

TRANSCRIPT

Page 1: Java-Chapter 14 Creating Graphics with DWindow

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

Page 2: Java-Chapter 14 Creating Graphics with DWindow

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

วาดรปภาพ

Page 3: Java-Chapter 14 Creating Graphics with DWindow

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

Page 4: Java-Chapter 14 Creating Graphics with DWindow

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

ตงสทใชในการวาดบนวนโดว

Page 5: Java-Chapter 14 Creating Graphics with DWindow

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 ตามลาดบ

Page 6: Java-Chapter 14 Creating Graphics with DWindow

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 คะแนน)

Page 7: Java-Chapter 14 Creating Graphics with DWindow

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 ของลกบอลแตละลก

Page 8: Java-Chapter 14 Creating Graphics with DWindow

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 คะแนน)

Page 9: Java-Chapter 14 Creating Graphics with DWindow

219

© สงวนลขสทธ พฤศจกายน 2553 (ปรบปรงครงท 7 ฉบบใชตวภาค 2/2553) เรยบเรยงโดย วงศยศ เกดศร (แบงค)

Computer Programming using Java ANSWER : Creating Graphics with DWindow - 14

1) เมทอด main(…) ทสรางอาเรยของออบเจคชนด Flag ใชแทนธงชาตของแตละประเทศ ทประกอบไปดวย 7 ประเทศทกลาวมา โดยมขนาดของวนโดวเปน 150 x 90 พรอมกาหนดใหแตละออบเจคแสดงภาพธงชาตของแตละประเทศขนบนวนโดว

//คลาส Flag

Page 10: Java-Chapter 14 Creating Graphics with DWindow

220

© สงวนลขสทธ พฤศจกายน 2553 (ปรบปรงครงท 7 ฉบบใชตวภาค 2/2553) เรยบเรยงโดย วงศยศ เกดศร (แบงค)

Computer Programming using Java 14 - Creating Graphics with DWindow : ANSWER

//คลาส NationalFlag

Page 11: Java-Chapter 14 Creating Graphics with DWindow

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)

Page 12: Java-Chapter 14 Creating Graphics with DWindow

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

Page 13: Java-Chapter 14 Creating Graphics with DWindow

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 ตวชนดสตรงทเปนชอแฟมขอมล เพอใชสาหรบเปดแฟมขอมลนน

Page 14: Java-Chapter 14 Creating Graphics with DWindow

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

ตวอยางแฟมขอมล

Page 15: Java-Chapter 14 Creating Graphics with DWindow

225

© สงวนลขสทธ พฤศจกายน 2553 (ปรบปรงครงท 7 ฉบบใชตวภาค 2/2553) เรยบเรยงโดย วงศยศ เกดศร (แบงค)

Computer Programming using Java ANSWER : Creating Graphics with DWindow - 14

//เมทอดประจาออบเจคแบบ public ชอ showBarGraph(…) เพอใชแสดงผลการนบระดบผลการ เรยนทง 8 ระดบในรปแบของ กราฟแทง ขนบนวนโดว ดงตวอยางผลลพธตอไปน

//เมทอดประจาออบเจคแบบ public ชอ close(…) เพอปดแฟมขอมล } //End of class

Page 16: Java-Chapter 14 Creating Graphics with DWindow

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