รูปแบบการออกแบบสำหรับการจัดการหน้าต่างในแอพ Java Swing


9

ฉันเพิ่งเริ่มสร้างแอป Java Swing เล็ก ๆ น้อย ๆ ของฉัน เมื่อโปรแกรมเปิดขึ้นมันจะเปิดหน้าต่างเดียวที่เรียบง่ายพร้อมป้ายชื่อและปุ่มคู่ การคลิกปุ่มใดปุ่มหนึ่งเหล่านั้นควรจะล้างหน้าจอต้อนรับและแทนที่ด้วยแผงที่แตกต่างกันโดยสิ้นเชิง

ฉันไม่แน่ใจว่าวิธีที่ดีที่สุดในการสร้างฟังก์ชั่นนั้นคืออะไร วิธีหนึ่งก็คือการส่งผ่านJFrameข้อโต้แย้งของฉันไปสู่ ​​... เพียงเกี่ยวกับองค์ประกอบอื่น ๆ ทั้งหมด แต่นั่นทำให้ฉันรู้สึกแฮ็ค หรือมีการทำให้แต่ละพาเนลเป็นสองเท่าเป็นผู้ฟังการกระทำ แต่ก็ดูไม่ถูกต้องเช่นกัน

มีรูปแบบการออกแบบที่ฉันควรใช้ที่นี่หรือไม่? "แทนที่เนื้อหาของหน้าต่างหลักและหน้าต่างเดียว" จะต้องเป็นการดำเนินการทั่วไปที่สมเหตุสมผล ชื่อรูปแบบจะเพียงพอ ฉันสามารถใช้ Google ด้วยตัวเองได้จากที่นั่น (ฉันจะไม่ปฏิเสธคำอธิบายใด ๆ อีกต่อไป)


นี่เป็นคำถามเกี่ยวกับเทคนิคการเขียนโปรแกรมจริงคุณอาจได้รับคำตอบเพิ่มเติมเกี่ยวกับ Stack Overflow
Alex Feinman

คำตอบ:


6

เมื่อสร้างแอพพลิเคชั่น Swing ฉันมักจะใช้มันกับ Mediator Pattern ในรูปแบบนี้คลาส Mediator (โดยปกติคือ JFrame หลัก) จัดการส่วน GUI ที่แตกต่างกัน (โดยปกติคือ JPanels, JMenus ... ) และดูแลการสื่อสารระหว่างพวกเขา

ตัวอย่างเช่นหากมีเหตุการณ์เกิดขึ้นใน JPanel1 JPanel1 จะแจ้งผู้ไกล่เกลี่ย (JFrame) JFrame จะดำเนินการโดยแก้ไข JPanel2

FYI: ทุกโครงการของฉันเป็นแอพ GUI ขนาดเล็กถึงกลางดังนั้นฉันไม่แน่ใจว่ารูปแบบนี้จะปรับขนาดได้ดี แต่ถ้าคุณสามารถออกแบบสถาปัตยกรรมที่เพียงพอรูปแบบคนกลางอาจเป็นฐานที่มั่นคง


4

คุณสามารถให้เมธอดหลักแสดง JDialog ได้ เมื่อกล่องโต้ตอบปิดลง JFrame หลักจะถูกสร้างและแสดง

JDialog ให้วิธีการแบบคงที่ที่ใช้งานง่ายซึ่งแสดงข้อความโต้ตอบกับเนื้อหาและปุ่มที่กำหนดเองและส่งคืนรหัสของปุ่มที่ถูกคลิก โดยการทดสอบค่านี้วิธีหลักของคุณสามารถตัดสินใจที่จะแสดงเฟรมหลักหรือออก (หรืออะไรก็ได้) โปรดอ่าน Javadoc

ไม่เหมือนกับเฟรมเวิร์ก UI ที่เก่ากว่าบางแอปพลิเคชัน Swing ไม่ได้เชื่อมโยงกับเฟรมหรือหน้าต่างเฉพาะ คุณสามารถสร้างหน้าต่างได้มากเท่าที่คุณต้องการ แอปพลิเคชั่นจะสิ้นสุดลงเมื่อเธรดทั้งหมดจบลงไม่ใช่เมื่อมีการกำจัดหน้าต่างทั้งหมด โดยทั่วไปจะทำได้ด้วย System.exit (0)

ฉันไม่รู้ว่ามีรูปแบบการออกแบบเฉพาะสำหรับกรณีนั้นหรือไม่ ฉันแนะนำกวดวิชา Java Swing


1
-1 นี่คือคำถามรูปแบบการออกแบบ แนะนำการเปลี่ยนรายละเอียดที่ฉันได้รับและลงท้ายด้วย "ฉันไม่รู้ว่ามีรูปแบบการออกแบบเฉพาะหรือไม่" ไม่ตอบ
Pops

2
คำตอบของเขานั้นแม่นยำมาก คุณไม่มีปัญหาเกี่ยวกับรูปแบบการออกแบบคุณจำเป็นต้องเรียนรู้วิธีทำงานของฟอร์มและกล่องโต้ตอบก่อน
Alex

2

เฟรมเวิร์ก UI จำนวนมากมีกฎที่แตกต่างกันเกี่ยวกับหน้าต่าง 'หลัก' หรือ 'ใช้งาน' วิธีหนึ่งในการจัดการความซับซ้อนนั้นคือการมีหน้าต่างหลักของคุณซึ่งควบคุมการวนรอบข้อความหลักให้เป็นสิ่งที่มองไม่เห็น จากนั้นให้หน้าต่างและไดอะล็อกอื่นทั้งหมดเป็นลูกของหน้าต่างนั้น

วิธีนี้มีข้อดีหลายประการโดยเฉพาะอย่างยิ่งเมื่อต้องรับมือกับการกดคีย์ทั่วโลกและเหตุการณ์เมาส์รวมถึงการบันทึกระดับสูงและการจัดการข้อยกเว้น

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.