ฉันเห็นว่ามันแตกต่างจากคำตอบที่ยอมรับ
1) ฉันควรหลีกเลี่ยงการใช้วิธีการเหล่านั้นอย่างสมบูรณ์หรือไม่?
ไม่เคยหลีกเลี่ยง! พวกเขาอยู่ที่นั่นเพื่อแสดงข้อ จำกัด ขนาดของส่วนประกอบของคุณไปยังผู้จัดการรูปแบบ คุณสามารถหลีกเลี่ยงการใช้สิ่งเหล่านี้ได้หากคุณไม่ได้ใช้ตัวจัดการเลย์เอาท์ใด ๆ และพยายามที่จะจัดการเลย์เอาต์ภาพด้วยตัวคุณเอง
น่าเสียดายที่ Swing ไม่ได้มาพร้อมขนาดเริ่มต้นที่เหมาะสม อย่างไรก็ตามแทนที่จะตั้งค่าขนาดขององค์ประกอบเป็น OOP ที่ดีกว่าเพื่อสืบส่วนประกอบของคุณเองด้วยค่าเริ่มต้นที่เหมาะสม (ในกรณีนี้คุณเรียก setXXX ในคลาสที่สืบทอด) หรืออีกวิธีหนึ่งคุณสามารถแทนที่เมธอด getXXX สำหรับเอฟเฟกต์เดียวกัน
2) มีการกำหนดวิธีการด้วยเหตุผล ดังนั้นเมื่อไรฉันจึงควรใช้ ในบริบทใด มีวัตถุประสงค์อะไร?
เสมอ. เมื่อคุณสร้างส่วนประกอบให้ตั้งค่าขนาด min / Preferred / max ที่เหมือนจริงตามการใช้งานของส่วนประกอบนั้น ตัวอย่างเช่นหากคุณมี JTextField สำหรับการป้อนสัญลักษณ์ประเทศเช่นสหราชอาณาจักรขนาดที่ต้องการจะต้องกว้างพอที่จะใส่ตัวอักษรสองตัว (ด้วยตัวอักษรปัจจุบัน ฯลฯ ) แต่อาจไม่มีความหมายที่จะทำให้มันใหญ่ขึ้น ท้ายที่สุดแล้วสัญลักษณ์ประเทศเป็นสองตัวอักษร ตรงกันข้ามถ้าคุณมี JTextField สำหรับป้อนเช่นชื่อลูกค้าสามารถมีขนาดที่ต้องการเช่นขนาดพิกเซล 20 ตัวอักษร แต่สามารถขยายให้ใหญ่ขึ้นได้หากปรับขนาดเลย์เอาท์ดังนั้นกำหนดขนาดสูงสุดเป็นเพิ่มเติม ในขณะเดียวกันการมี JTextField กว้าง 0px นั้นไม่มีจุดหมายดังนั้นให้ตั้งขนาดขั้นต่ำที่เหมือนจริง
3) อะไรคือผลกระทบเชิงลบจากการใช้วิธีการเหล่านั้น?
(ฉันคิดได้แค่เพิ่มความสะดวกในการพกพาระหว่างระบบที่มีความละเอียดหน้าจอต่างกัน)
ไม่มีผลกระทบเชิงลบ สิ่งเหล่านี้เป็นคำแนะนำสำหรับผู้จัดการโครงร่าง
4) ฉันไม่คิดว่า LayoutManager ใด ๆ สามารถตอบสนองทุกรูปแบบที่ต้องการได้อย่างแท้จริง
ฉันจำเป็นต้องใช้ LayoutManager ใหม่สำหรับรูปแบบเล็ก ๆ น้อย ๆ ทุกรูปแบบหรือไม่
ไม่ไม่แน่นอน วิธีการตามปกติคือการจัดเรียงเค้าโครงขั้นพื้นฐานที่แตกต่างกันเช่นเค้าโครงแนวนอนและแนวตั้ง
ตัวอย่างเช่นรูปแบบด้านล่าง:
<pre>
+--------------+--------+
| ###JTABLE### | [Add] |
| ...data... |[Remove]|
| ...data... | |
| ...data... | |
+--------------+--------+
</pre>
กำลังมีสองส่วน ส่วนซ้ายและขวาเป็นเค้าโครงแนวนอน ส่วนที่ถูกต้องคือ JPanel ที่เพิ่มเข้าไปในเค้าโครงแนวนอนและ JPanel นี้มีรูปแบบแนวตั้งที่วางปุ่มในแนวตั้ง
แน่นอนว่าสิ่งนี้สามารถเติบโตได้ยากด้วยเค้าโครงชีวิตจริง ดังนั้นตัวจัดการโครงร่างแบบกริดเช่น MigLayout จะดีกว่ามากถ้าคุณกำลังจะพัฒนาสิ่งที่ร้ายแรง
5) ถ้าคำตอบที่ 4 คือ "ใช่" สิ่งนี้จะนำไปสู่การเพิ่มจำนวนคลาส LayoutManager ซึ่งจะยากต่อการรักษาหรือไม่?
ไม่แน่นอนคุณจะไม่พัฒนาผู้จัดการเลย์เอาท์เว้นแต่คุณต้องการบางสิ่งที่พิเศษมาก
6) ในสถานการณ์ที่ฉันต้องกำหนดสัดส่วน ...
ระหว่างชายด์ของ Component (เช่น child1 ควรใช้ 10% ของ space, child2 40%, child3 50%) เป็นไปได้หรือไม่ที่จะบรรลุโดยไม่ต้องใช้ LayoutManager ที่กำหนดเอง?
โดยทั่วไปเมื่อตั้งค่าขนาดที่ต้องการแล้วคุณอาจไม่ต้องการทำอะไรเป็นเปอร์เซ็นต์ เนื่องจากเปอร์เซ็นต์นั้นไม่มีจุดหมาย (เช่นไม่มีจุดหมายที่จะมี JTextField 10% ของขนาดหน้าต่าง - เนื่องจากสามารถย่อขนาดหน้าต่างเพื่อให้ JTextField กลายเป็นความกว้าง 0px หรือสามารถขยายหน้าต่างเพื่อให้ JTextField ข้ามจอแสดงผลสองจอบนหน้าจอเดียว ตั้งค่าการแสดงผลหลายจอ)
แต่บางครั้งคุณอาจใช้เปอร์เซ็นต์เพื่อควบคุมขนาดของหน่วยการสร้างที่ใหญ่กว่าของ gui ของคุณ (ตัวอย่างเช่นพาเนล)
คุณสามารถใช้ JSplitPane ซึ่งคุณสามารถกำหนดอัตราส่วนของทั้งสองด้านล่วงหน้าได้ หรือคุณสามารถใช้ MigLayout ซึ่งอนุญาตให้คุณตั้งค่าข้อ จำกัด ดังกล่าวเป็นเปอร์เซ็นต์พิกเซลและหน่วยอื่น ๆ
JEditorPane
กับ HTML ที่ไม่แนะนำความกว้าง OTOH ฉันไม่แน่ใจว่าฉันพลาดอะไรไปหรือเปล่า ฉันจะตรวจสอบคำตอบของเธรดอย่างระมัดระวัง แต่สนใจหากคุณมีความคิดเห็นใด ๆ โดยเฉพาะอย่างยิ่งในกรณีหลัง