Lab Event Handling

แล็บนี้เราจะลองทำ โปรแกรมคูณเลขง่ายๆดู
ตอนที่ 1
โจทย์
ห้องสมุดเล็กๆแห่งหนึ่งรับหนังสือแต่ละครั้งเป็นลังหลายๆลัง ถ้าให้แต่ละลังมีจำนวนหนังสือเท่ากัน ผู้ดูแลห้องสมุดต้องการให้นักเรียนทำโปรแกรมง่ายๆให้เขาใช้งานในการรับของหนึ่งครั้งดังนี้

ตัวอย่างโปรแกรม เป็นดังรูป



โดยจะมีช่องขาวๆ ที่พิมพ์ลงไปได้ (เรียกว่า JTextBox) สองช่อง เมื่อพิมพ์ลงไปแล้วกดปุ่ม (ปุ่มนั้นสร้างด้วยคลาส JButton) Calculate Total จะปรากฎว่า ผลคูณจะแสดงออกมาใน JTextBox ที่พิมพ์ลงไปไม่ได้ ส่วนตัวหนังสือที่อธิบายต่างๆก็เป็น JLabel หมด ให้วินโดวมีขนาด 354, 112

ก่อนอื่น จงทำวินโดว์ออกมาให้ได้หน้าตาแบบนี้ก่อน ไม่ต้องขนาดเท่าเป๊ะ ไม่ต้องสัดส่วนเหมือนเป๊ะ ใช้การวางเลย์เอ้าท์ทำให้ได้รูปร่างก็พอ ยังไม่ต้องคำนวณ ให้เริ่มเขียนคลาส จากโครงนี้  (นี่เป็นโครงของโค้ดที่เอามาจากหนังสือเรียนของ dietel) เปลี่ยนโค้ดได้ตามใจ สามารถลบโค้ดเดิมทำใหม่หมดได้ แต่ชื่อต่างๆขอให้คงไว้
เอาล่ะ ถ้าทำเสร็จแล้ว ยังมีต่อ คราวนี้เราจะมาทำให้มันคำนวณจริงๆซะที พอกดปุ่มปั๊บ ให้มันคำนวณแล้วโชว์ผลปุ๊บ

ทำได้เลย ทำเสร็จแล้วต่อตอนที่ 2

ตอนที่ 2

เพิ่มเติมจากตอนที่ 1  

ตอนที่ 3

จะสังเกตว่า ถ้าเราเกิดใส่อะไรก็ตามที่ไม่ใช่ตัวเลขลงไปในช่อง input เช่น

แล้วไปกด calculate จะปรากฏว่ามี error message เกี่ยวกับ java.lang.NumberFormatException ขึ้นที่ console เต็มไปหมด หรือถ้ารันจากจาร์เลย พอกด Calculate ใน executable jar ก็จะไม่เกิดอะไรขึ้น นี่เป็นเพราะว่า เราคาดหวังว่าจะได้แต่สตริงที่แปลงเป็นตัวเลขได้ เข้ามาที่ input ถ้าแปลงไม่ได้ โปรแกรมก็ทำอะไรต่อไปไม่ได้นั่นเอง

งั้นเรามาเปลี่ยนแปลงโปรแกรมหน่อยดีกว่า โดย



·         การตั้งชื่อ project ให้ตั้งชื่อตามรูปแบบต่อไปนี้

LAB##_<รหัสนิสิต> เช่น LAB08_5270271821

สําหรับแต่ละไฟล์ที่เขียน  ให้ตั้งชื่อไฟล์ที่เป็น .java ให้ตรงกับชื่อของ class ในไฟล์นั้นๆ และให้ขึ้นต้นไฟล์ด้วยข้อมูลเกี่ยวกับตัวเองดังนี้ 
/*

*                LAB##

*                รหัสนิสิต

*                ชื่อ-นามสกุล

*                หมายเลขหอง หมายเลขเครื่องที่ใช้

*/

เช่น

/*

*                LAB08

*                5270271821

*                นายเพื่อ สกุลไทย

*                อง 111 เครื่อง 101

*/

·         ไฟล์ที่ส่ง ให้export ออกมาในรูปแบบ executable jar (ดูวิธีทำที่ด้านล่าง)โดยให้มี source code (.java) อยู่ภายใน jar ด้  และให้ตั้งชื่อตามรูปแบบดังต่อไปนี้    (โดยให้ใช้อักษรพิมพ์ใหญ่/เล็กในรูปแบบเดียวกับที่แสดงในตัวอย่างด้านล่าง)

LAB08_<รหัสนิสิต>.jar    

 

   E-mail ที่ส่ง ให้ตั้งชื่อ Subject ของ E-mail ตามรูปแบบดังต่อไปนี้  โดยให้ใช้ตัวอักษรพิมพ์ใหญและเล็กในรูปแบบ

เดียวกับที่แสดงในตัวอย่างด้านล่าง 

LAB08_<รหัสนิสิต>    เชน รหัสของผม(TA) คือ 5270271821 ก็จะมี Subject ของ E-mail เป็น LAB08_5270271821  

 

*** ถ้าหากมี comment หรืออะไรเพิ่มเติม  ให้เขียนไว้ใน body ของ E-mail   ห้ามเขียนไว้ใน Subject ของ E-mail ***

 

   กําหนดส่งคือ วันศุกร์ ที่ 13 สิงหาคม เวลา 0:00 AM (เวลาเที่ยงคืนของคืนวันพฤหัส)

*** ห้ามลอก  ถ้าพบจะให้0 คะแนนในครั้งนั้นๆ ***





วิธีทำ executable jar (คือจาร์ไฟล์ที่ double click แล้วรันเลย)




ไกด์ สำหรับคนที่ทำยังไม่ได้จริงๆ (ไม่ควรดู นอกจากจะไม่ไหวจริงๆเท่านั้น)
ตอนที่ 1
สำหรับคนที่ยังงงๆหรือทำไม่ได้ ผมจะค่อยๆสอนไปทีละขั้นนะ ขอย้ำอีกทีว่า ให้คิดไปด้วย อย่าเอาแต่ทำตามอย่างเดียว ไม่งั้นเดี๋ยวไม่เก็ตนะ
ถ้าเราต้องการกดปุ่ม (หรือกดอะไรก็ตาม แล้วให้โปรแกรมทำโน่นนี่)
เอาล่ะ สำหรับการสร้างตัวฟัง เพื่อจะฟังปุ่มนั้น เราใช้ตัวฟังประเภท actionListener (ตัวฟังที่ฟังเหตุการณ์อย่างเช่นการติ๊กถูกผิดในช่อง จะเป็นประเภทอื่น เรียกไม่เหมือนกัน) ซึ่งเราสามารถสร้างตัวฟังแล้วไปแปะกับปุ่มได้เลย

ใช้โค้ดนี่

calculateJButton.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent event){
                                    // โค้ดที่จะรันเมื่อ ตัวฟังรู้ว่ามีปุ่มถูกกด
                }
  } );


หลักๆน่าจะเท่านี้ละ ทีนี้ก็เหลือแค่ให้เราทำการคำนวณให้ได้เท่านั้น ผมจะ hint ให้นิดหน่อยก็แล้วกันนะ

ไกด์ ตอนที่ 2
เอาล่ะ หลักการยังเหมือนเดิม ในเมื่อเราจะทำให้ เมื่อ คนพิมพ์ลงไปในช่อง input แล้ว text ในช่องแสดงผลหายไป

เราก็ทำได้ โดยหลักการดังนี้

ไกด์ ตอนที่3

ข้อนี้เป็นการจัดการกับโค้ดตรงที่เราคิดว่าอาจเกิดปัญหา error หรือ ....Exception ในขณะที่รันอยู่ (error เพราะว่าแปลงเป็น integer ไม่ได้ )
วิธีการจัดการกับปัญหาประเภทนี้ คือ ตรงโค้ดที่เราสงสัย หรือคาดว่า จะเกิด error ขึ้นนั้น ให้เราเขียนครอบโค้ดส่วนนั้น
ด้วย  try block ดังตัวอย่างข้างล่างนี้

try{

// โค้ดส่วนที่ทำให้เกิด error

}catch (Exception e ){

//ถ้าเกิด error ขึ้นจริง โค้ดจะมาทำในนี้ ซึ่งในนี้จะเป็นส่วนที่เราเขียนโค้ดจัดการกับ error หรือเปิด dialog เตือนผู้ใช้
// โปรแกรมได้