Lab  Object: Introduction to the use of Graphics, ArrayList และ Iterator

เราต้องการสร้างโปรแกรมที่ทำงานเหมือนกับ screensaver ดังนี้ โดยเมื่อเริ่มโปรแกรม ให้สุ่มวาดสี่เหลี่ยม (สุ่มสีและขนาดด้วย)ดังรูป


เมื่อเวลาผ่านไป สี่เหลี่ยมอื่นๆจะถูกวาดทับลงมาเรื่อยๆ ดังรูป


เมื่อกด clear จะเห็นว่าสี่เหลี่ยมทุกอันที่เคยถูกวาดจะหายไปหมด แล้วโปรแกรมก็เริ่มสุ่มวาดสี่เหลี่ยมใหม่ตั้งแต่ต้น

โอเค เรามาดูสรุปการทำงานของโค้ดโดยรวม ก่อนที่จะไปเขียนคลาสทีละคลาสกัน การทำงานของโปรแกรมโดยรวมเป็นดังนี้

เมื่อรันโปรแกรม
    ให้เริ่มจับเวลา ใช้ Timer ได้

เมื่อ timer ติ๊ก (ทุก 0.25 วินาที)
    ให้สุ่มค่า x, y, width, height ของสี่เหลี่ยมที่จะวาดบนจอ
    สุ่มเลือกสี
    สร้างสี่เหลี่ยมขึ้นมาด้วยค่าที่สุ่มข้างต้น
    เอาสี่เหลี่ยมที่สร้างขึ้นใหม่นี้ ใส่ ArrayList    // ArrayList คือ อาร์เรย์สำหรับใส่ object      
                                                                              //ที่ขยายขนาดได้เองโดยอัตโนมัติ
    สั่ง repaint ตัว JPanel ที่เราจะวาดสี่เหลี่ยมลงไปนี้ // การรีเพ้นท์ คือการเคลียร์จอ แล้วเรียกเมธอด
                                                                                       //paintComponent

เมื่อ paintComponent ถูกเรียกใช้
    สร้าง Iterator สำหรับ ArrayList  // Iterator คือ ออบเจ็กต์ที่ "จ้อง" ไปยังตำแหน่งใดตำแหน่งหนึ่งในลิสต์ ตัว
                                                           // Iterator นั้นมีเมธอดหลายๆอันสำหรับ เปลี่ยนจุดจ้อง
                                                           // หรือเลื่อนไปมองจุดอื่นในลิสต์ เช่นเมธอด hasNext() จะบอกเราได้ว่า
                                                           //ตำแหน่งถัดไปในลิสต์นั้นมีหรือไม่ ส่วนเมธอด next()
                                                           //นั้นก็จะรีเทิร์นของในตำแหน่งถัดไปในลิสต์ออกมา (โดยที่ตำแหน่งที่ "จ้อง"
                                                           //ก็จะย้ายไปเป็นตำแหน่งถัดไปในลิสต์นั้นด้วย)
    ใช้ Iterator ช่วยในการวนลูปดูทุกสี่เหลี่ยมใน ArrayList  และทำการวาดแต่ละสี่เหลี่ยมออกมา

เมื่อกดปุ่ม clear
    เคลียร์ของที่อยู่ใน ArrayList ทั้งหมด
    สั่ง repaint() ตัว JPanel ที่เราใช้วาด

สิ่งที่ต้องทำ อย่างแรกคือ 
สร้างคลาส MyRectangle
   public void draw( Graphics g )
   {
      g.setColor( fillColor ); //เซ็ตสีที่จะใช้
      g.fillRect( x, y, width, height ); // วาดสี่เหลี่ยม  x, y นับจากด้านซ้ายบนของตัววินโดว์ที่เราไปวาด

   } // end method draw


ต่อไป สร้างคลาส DrawJPanel ซึ่งเป็น JPanel ที่เราจะเอาไว้วาดสี่เหลี่ยม โครงอยู่นี่
  // Random object to create random numbers
   private Random randomNumber = new Random();   //ไปค้นเมธอดของคลาสนี้ซะ

   // Timer object to generate events
   private Timer drawTimer;

   // ArrayList object to hold MyRectangle objects
   private ArrayList rectangleArrayList = new ArrayList();  //ไปค้นเมธอดซะ จะได้รู้วิธีใช้

   // array of possible MyRectangle colors
   private Color[] colors = { Color.BLUE, Color.ORANGE, Color.PINK,
      Color.CYAN, Color.MAGENTA, Color.YELLOW, Color.BLACK,
      Color.WHITE, Color.RED, Color.GREEN };

้้้่้้้้สิ่งที่ต้องทำขั้นสุดท้ายคือ เอา DrawJPanel ไปใส่ในโปรแกรมหลักให้ถูก  ทำซะ วันนี้ไม่มีทำ JUnit


ส่งในวันที่ทำแล็บ ภายในเวลาเที่ยงคืน ส่งในรูปของ executable jar file นะ ต้องใส่ source มาด้วย ส่งเมล์โปรแกรมที่ทำเสร็จแล้วมาที่ progmethcp@gmail.com โดยในเมล์ subject ต้องเขียนเป็น studentID_Screensaver_secNumber และไฟล์ต้องมีชื่อว่า studentID_Screensaver_secNumber.jar

studentID คือเลขประจำตัวนิสิต
secNumber คือเบอร์ตอนเรียน