Lab Event Handling

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

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



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

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

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

ตอนที่ 2

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

ตอนที่ 3

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

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

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




พอทำเสร็จแล้ว ทำเป็น executable jar ไว้ แล้วส่ง
มาที่ progmethcp@gmail.com ภายในวันพุธที่ 5 สิงหาคม  โดยในเมล์ subject ต้องเขียนเป็น studentId_Event01 และชื่อไฟล์จะต้องเป็น studentId_Event01.jar   ตัวอย่างเช่น 5032117621_Event01.jar

studentID คือเลขประจำตัวนิสิต



วิธีทำ 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 เตือนผู้ใช้
// โปรแกรมได้