ใครช่วยอธิบายหน่อยได้ไหมว่า Swing กับ AWT ต่างกันอย่างไร
มีกรณีใดบ้างที่ AWT มีประโยชน์ / แนะนำให้ใช้มากกว่าการสวิงหรือในทางกลับกัน?
ใครช่วยอธิบายหน่อยได้ไหมว่า Swing กับ AWT ต่างกันอย่างไร
มีกรณีใดบ้างที่ AWT มีประโยชน์ / แนะนำให้ใช้มากกว่าการสวิงหรือในทางกลับกัน?
คำตอบ:
AWT เป็นอินเทอร์เฟซ Java สำหรับรหัส GUI ของระบบดั้งเดิมที่มีอยู่ในระบบปฏิบัติการของคุณ มันจะไม่ทำงานเหมือนกันในทุกระบบแม้ว่ามันจะพยายาม
Swing เป็นจาวา GUI บริสุทธิ์ที่มากกว่าหรือน้อยกว่า มันใช้ AWT เพื่อสร้างหน้าต่างระบบปฏิบัติการจากนั้นวาดรูปภาพของปุ่ม, ป้าย, ข้อความ, ช่องทำเครื่องหมาย, ฯลฯ ลงในหน้าต่างนั้นและตอบสนองต่อการคลิกเมาส์รายการคีย์ ฯลฯ ทั้งหมดเพื่อตัดสินใจว่าจะทำอย่างไร แทนที่จะปล่อยให้ระบบปฏิบัติการจัดการกับมัน ดังนั้น Swing จึงเป็นอุปกรณ์พกพาได้ 100% และเหมือนกันในทุกแพลตฟอร์ม (แม้ว่ามันจะเป็นสกินเนลและมี "รูปลักษณ์และความรู้สึกที่เสียบได้" ซึ่งสามารถทำให้มันดูมากกว่าหรือน้อยกว่า
สิ่งเหล่านี้เป็นวิธีที่แตกต่างกันอย่างมากสำหรับชุดเครื่องมือ GUI และมีผลที่ตามมามากมาย คำตอบสำหรับคำถามของคุณจะพยายามสำรวจทั้งหมด :) นี่คือคู่:
AWT เป็นอินเทอร์เฟซข้ามแพลตฟอร์มดังนั้นแม้ว่าจะใช้ระบบปฏิบัติการพื้นฐานหรือชุดเครื่องมือ GUI พื้นฐานสำหรับการทำงาน แต่ก็ไม่ได้ให้การเข้าถึงทุกสิ่งที่ชุดเครื่องมือเหล่านั้นสามารถทำได้ วิดเจ็ต AWT ขั้นสูงหรือใหม่กว่าที่อาจมีอยู่บนแพลตฟอร์มหนึ่งอาจไม่ได้รับการสนับสนุนจากอีกแพลตฟอร์มหนึ่ง คุณสมบัติของวิดเจ็ตที่ไม่เหมือนกันในทุกแพลตฟอร์มอาจไม่ได้รับการสนับสนุนหรือแย่กว่านั้นอาจทำงานได้แตกต่างกันไปในแต่ละแพลตฟอร์ม ผู้คนเคยลงทุนความพยายามมากมายเพื่อให้แอปพลิเคชัน AWT ทำงานได้อย่างต่อเนื่องในทุกแพลตฟอร์ม - ตัวอย่างเช่นพวกเขาอาจพยายามโทรออกเป็นโค้ดเนทีฟจาก Java
เนื่องจาก AWT ใช้วิดเจ็ต GUI ดั้งเดิมระบบปฏิบัติการของคุณจึงรู้และจัดการวางไว้ตรงหน้ากันขณะที่วิดเจ็ต Swing เป็นพิกเซลที่ไม่มีความหมายภายในหน้าต่างจากมุมมองของระบบปฏิบัติการของคุณ Swing จัดการการจัดวางและวางวิดเจ็ตของคุณเอง การผสม AWT กับ Swing นั้นไม่ได้รับการสนับสนุนอย่างสูงและสามารถนำไปสู่ผลลัพธ์ที่ไร้สาระเช่นปุ่มดั้งเดิมที่ปิดบังทุกอย่างในกล่องโต้ตอบที่พวกเขาอยู่เพราะทุกอย่างถูกสร้างขึ้นด้วย Swing
เนื่องจาก Swing พยายามที่จะทำทุกสิ่งที่เป็นไปได้ใน Java นอกเหนือจากรูทีนกราฟิคดิบๆที่ได้รับจากหน้าต่าง GUI ดั้งเดิมมันเคยถูกลงโทษด้านประสิทธิภาพค่อนข้างมากเมื่อเทียบกับ AWT สิ่งนี้ทำให้ Swing แกว่งไปแกว่งมาช้า อย่างไรก็ตามสิ่งนี้หดตัวลงอย่างมากในช่วงหลายปีที่ผ่านมาเนื่องจาก JVM ที่ได้รับการปรับปรุงให้ดีขึ้นเครื่องจักรที่เร็วขึ้นและการเพิ่มประสิทธิภาพของ (ฉันคิดว่า) การทำงานภายในสวิง วันนี้แอปพลิเคชัน Swing สามารถรันเร็วพอที่จะให้บริการหรือแม้กระทั่งมีกำลังใจและแทบจะแยกไม่ออกจากแอปพลิเคชันที่ใช้วิดเจ็ตดั้งเดิม บางคนจะบอกว่าใช้เวลานานเกินไปกว่าจะถึงจุดนี้ แต่ส่วนใหญ่จะบอกว่าคุ้มค่า
ท้ายที่สุดคุณอาจต้องการตรวจสอบ SWT (ชุดเครื่องมือ GUI ที่ใช้สำหรับ Eclipse และทางเลือกอื่นสำหรับทั้ง AWT และ Swing) ซึ่งค่อนข้างเป็นการย้อนกลับไปสู่แนวคิด AWT ในการเข้าถึงวิดเจ็ตเนทีฟผ่าน Java
ความแตกต่างที่ฐานที่ทุกคนกล่าวถึงเป็นที่หนึ่งคือมีน้ำหนักมากและอื่น ๆ คือมีน้ำหนักเบา ผมขออธิบายโดยทั่วไปสิ่งที่ระยะน้ำหนักหนักหมายถึงก็คือว่าเมื่อคุณกำลังใช้ส่วนประกอบ AWT ที่รหัสพื้นเมืองที่ใช้สำหรับการรับองค์ประกอบมุมมองถูกสร้างขึ้นโดยระบบปฏิบัติการ , thats ทำไมมันรูปลักษณ์และความรู้สึกเปลี่ยนแปลงจาก OS ระบบปฏิบัติการ ในฐานะที่เป็นในส่วนแกว่งความรับผิดชอบของJVM ในการสร้างมุมมองสำหรับส่วนประกอบ คำสั่งที่ฉันเห็นก็คือการแกว่งที่เป็น MVC ตามและ awt ไม่ได้
สวิง VS AWT โดยทั่วไป AWT มาก่อนและเป็นชุดของส่วนประกอบ UI รุ่นหนา (หมายถึงพวกเขาเป็น wrappers สำหรับวัตถุระบบปฏิบัติการ) ในขณะที่ Swing สร้างขึ้นบน AWT พร้อมชุดส่วนประกอบที่มีน้ำหนักเบายิ่งขึ้น
งาน Java UI ที่ร้ายแรงใด ๆ ที่ทำใน Swing ไม่ใช่ AWT ซึ่งใช้สำหรับแอปเพล็ตเป็นหลัก
เท่าที่ AWT อาจมีประโยชน์มากกว่า Swing -
ผลที่ตามมาหลายอย่างเกิดจากความแตกต่างระหว่าง AWT และ Swing
AWT เป็นโค้ดเลเยอร์บาง ๆ ที่ด้านบนของระบบปฏิบัติการในขณะที่ Swing มีขนาดใหญ่กว่ามาก สวิงยังมีฟังก์ชันที่สมบูรณ์ยิ่งขึ้น การใช้ AWT คุณต้องใช้หลายสิ่งด้วยตัวเองในขณะที่ Swing สร้างขึ้นมาสำหรับงานที่ต้องใช้ GUI มาก AWT ให้ความรู้สึกดั้งเดิมในการทำงานเมื่อเทียบกับ Swing เนื่องจาก Swing ใช้ฟังก์ชันการทำงานของ GUI เองแทนที่จะอาศัยระบบปฏิบัติการโฮสต์จึงสามารถเสนอสภาพแวดล้อมที่สมบูรณ์ยิ่งขึ้นบนทุกแพลตฟอร์มที่ Java ทำงาน AWT มีข้อ จำกัด มากขึ้นในการจัดหาฟังก์ชั่นเดียวกันในทุกแพลตฟอร์มเนื่องจากบางแพลตฟอร์มไม่ใช้ตัวควบคุมที่มีลักษณะเหมือนกันในรูปแบบเดียวกัน
คอมโพเนนต์การแกว่งถูกเรียกว่า "จริงจัง" เนื่องจากไม่จำเป็นต้องมีอ็อบเจ็กต์ OS ดั้งเดิมเพื่อใช้งานฟังก์ชัน JDialog
และJFrame
มีน้ำหนักมากเพราะพวกมันมีเพื่อน ดังนั้นส่วนประกอบเช่นJButton
,
JTextArea
ฯลฯ มีน้ำหนักเบาเพราะไม่มีเพียร์ระบบปฏิบัติการ
เพียร์เป็นเครื่องมือที่จัดไว้ให้โดยระบบปฏิบัติการดังกล่าวเป็นวัตถุปุ่มหรือวัตถุฟิลด์รายการ
แกว่ง:
AWT:
AWT 1 AWT ใช้พื้นที่หน่วยความจำมากขึ้น 2 AWT ขึ้นอยู่กับแพลตฟอร์ม 3 AWT ต้องการแพ็คเกจ javax.awt
ชิงช้า 1 สวิงใช้พื้นที่หน่วยความจำน้อยกว่า 2 องค์ประกอบการแกว่งเป็นแพลตฟอร์มอิสระ 3 Swing ต้องการแพ็กเกจ javax.swing