วิธีตั้งค่า JFrame ให้ปรากฏกึ่งกลางโดยไม่คำนึงถึงความละเอียดของจอภาพ [ปิด]


197

ในขณะที่ทำงานกับ Java ฉันพบว่ามันยากที่จะวางตำแหน่งหน้าต่างหลักในกึ่งกลางของหน้าจอเมื่อฉันเริ่มแอปพลิเคชัน

มีวิธีใดที่ฉันสามารถทำได้? ไม่จำเป็นต้องอยู่กึ่งกลางแนวตั้งการวางแนวนอนเป็นเป้าหมายที่สำคัญสำหรับฉัน แต่การจัดตำแหน่งแนวตั้งก็ยินดีต้อนรับ

คำตอบ:


233

ฉันทำเช่นนี้เสมอ:

Dimension dim = Toolkit.getDefaultToolkit().getScreenSize();
this.setLocation(dim.width/2-this.getSize().width/2, dim.height/2-this.getSize().height/2);

ที่thisเป็น JFrame ที่เกี่ยวข้อง


1
ฉันรู้ว่าคำตอบนี้เก่ามาก แต่มีวิธีใดที่เป็นไปได้ในบริบทนี้ ฉันกำลังตัดสินใจระหว่างการทำงานต่อหรือแค่ปล่อยโมฆะหลักคงที่สาธารณะ (String [] args) ที่ฉันด้วยเหตุผลใดก็ตามที่ต้องการใช้
2xedo

14
สิ่งนี้จะทำงานในการตั้งค่าจอภาพเดียว แต่ด้วยจอภาพสองจอมันอาจจะดูคร่อมทั้งสอง (สมมติว่าพวกเขามีความละเอียดเดียวกัน) การใช้setLocationRelativeTo(null)จะอยู่ตรงกลางของจอภาพหลักแม้ในการตั้งค่าหลายจอภาพ
Rangi Keen

1
โปรดทราบว่าคุณต้องตั้งค่า JFrame ที่มองเห็นได้ก่อนที่จะตั้งศูนย์กลาง
Hunter S

4
@HunterS: นี่ไม่ถูกต้อง ในความเป็นจริงเราแนะนำไม่ให้ตั้งค่าให้มองเห็นได้จนกว่าคุณจะอยู่กึ่งกลาง วิธีนี้มันจะไม่ปรากฏขึ้นแล้วกระโดดไปรอบ ๆ ตราบใดที่คุณบรรจุเฟรมหรือตั้งค่าขนาดไว้ข้างหน้ารหัสในคำตอบนี้คุณจะสบายดี
Erick Robertson

521

ใช้ setLocationRelativeTo(null)

nullวิธีการนี้มีผลพิเศษเมื่อคุณผ่านมัน ตามที่ Javadoc:

หากองค์ประกอบนั้นเป็นโมฆะหรือ GraphicsConfiguration ที่เกี่ยวข้องกับส่วนประกอบนี้จะเป็นค่าว่างหน้าต่างจะถูกวางไว้ที่กึ่งกลางของหน้าจอ

สิ่งนี้ควรทำหลังจากตั้งค่าขนาดหรือการโทรpack()แต่ก่อนการตั้งค่าสามารถมองเห็นได้เช่นนี้:

frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);

102
+1 ถ้าใช้วิธี pack () setLocationRelativeToควรใช้หลังจาก pack () การเรียกใช้เมธอด
Ravindra Gullapalli

6
@Imray เพราะอาจเป็นไปไม่ได้กับการกำหนดค่าจอภาพสองจอ : P
Ankit

17
.setSize()ดูเหมือนว่าวิธีการที่ควรจะเรียกว่าหลังจากที่
Kamil

6
สิ่งนี้ทำงานในการตั้งค่าหลายจอภาพและตามที่ระบุไว้ในความคิดเห็นจะต้องถูกเรียกหลังจากแพ็ค () และ setSize () ถ้าพวกเขาถูกเรียกเลย
Paul Gregoire

2
@ Kit มันทำงานอย่างสมบูรณ์แบบด้วยการตั้งค่าจอภาพสองจอของฉัน คำตอบ "ดีที่สุด" ถูกเลือกโดย OP เสมอ
Kent


29

เพียงคลิกที่รูปแบบและไป JFrame Generate Centerคุณสมบัติแล้วแท็บโค้ดและการตรวจสอบ

ป้อนคำอธิบายรูปภาพที่นี่


ฉันไม่เคยคิดเกี่ยวกับเรื่องนี้ อย่างไรก็ตามรหัสที่ใช้ทำงานได้เองหลังจากเราคลิกที่นี่ .... ? @HenkVanBoeijen
2560

11

ง่ายเหมือนนี้ ...

setSize(220, 400);
setLocationRelativeTo(null);  

หรือหากคุณใช้เฟรมให้ตั้งค่าเฟรมเป็น

frame.setSize(220, 400);
frame.setLocationRelativeTo(null);  

สำหรับการชี้แจงจากเอกสาร :

หากองค์ประกอบนั้นเป็นโมฆะหรือ GraphicsConfiguration ที่เกี่ยวข้องกับส่วนประกอบนี้จะเป็นค่าว่างหน้าต่างจะถูกวางไว้ที่กึ่งกลางของหน้าจอ


7

ฉันใช้ NetBeans IDE 7.2.1 เป็นสิ่งแวดล้อมนักพัฒนาของฉันและคุณมีตัวเลือกในการกำหนดค่าคุณสมบัติ JForm

ในคุณสมบัติของ JForm ไปที่แท็บ 'รหัส' และกำหนดค่า 'สร้างศูนย์' คุณจะต้องตั้งค่านโยบายขนาดฟอร์มเป็น 'สร้างรหัสการปรับขนาด' ก่อน


6

ฉันใช้ NetBeans IDE 7.3 และนี่คือวิธีที่ฉันใช้เกี่ยวกับการรวมศูนย์ JFrame ของฉันตรวจสอบให้แน่ใจว่าคุณคลิกที่แผง JFrame และไปที่แถบคุณสมบัติ JFrame ของคุณคลิกที่แถบรหัสและเลือกศูนย์สร้างกล่องกาเครื่องหมาย


2

ถ้าคุณใช้ NetBeans เพียงคลิกที่เฟรมในมุมมองออกแบบจากนั้นแท็บรหัสบนคุณสมบัติของมัน ถัดไปตรวจสอบ 'สร้างศูนย์' ที่จะทำให้งานเสร็จ


1

หากคุณใช้อย่างชัดเจนsetPreferredSize(new Dimension(X, Y));จะเป็นการดีกว่าที่จะใช้:

setLocation(dim.width/2-this.getPreferredSize().width/2, dim.height/2-this.getPreferredSize().height/2);


1

คุณสามารถใช้วิธีนี้ซึ่งอนุญาตให้ JFrame อยู่กึ่งกลางและเต็มหน้าจอในเวลาเดียวกัน

yourframe.setExtendedState(JFrame.MAXIMIZED_BOTH);

0

ใน Net Beans GUI - ไปที่ jframe ( คลิกขวา)บนJFrameในนาวิเกเตอร์) คุณสมบัติภายใต้รหัส , นโยบายรูปแบบขนาดของสถานที่ให้เลือกสร้างโค้ดปรับขนาด ในหน้าต่างเดียวกันให้เลิกเลือกสร้างตำแหน่งและทำเครื่องหมายสร้างขนาดและศูนย์เห็บสร้างขนาดและศูนย์

เพลิดเพลินกับการเขียนโปรแกรม Ramana

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