Làm cách nào để đặt JFrame xuất hiện ở giữa, bất kể độ phân giải màn hình? [đóng cửa]


197

Khi làm việc với Java, tôi thấy khó đặt vị trí cửa sổ chính của mình ở giữa màn hình khi tôi khởi động ứng dụng.

Có cách nào tôi có thể làm điều đó? Nó không phải là trung tâm theo chiều dọc, liên kết ngang là mục tiêu quan trọng hơn đối với tôi. Nhưng liên kết dọc cũng được chào đón.

Câu trả lời:


232

Tôi luôn làm theo cách này:

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

nơi thislà JFrame có liên quan.


1
Tôi biết câu trả lời này thực sự cũ nhưng có cách nào khả thi để làm điều này trong bối cảnh tĩnh không? Tôi đang quyết định giữa việc làm việc theo hướng đó hoặc chỉ bỏ công khai khoảng trống tĩnh chính (Chuỗi [] args) mà tôi vì bất kỳ lý do gì muốn sử dụng.
2xedo

14
Điều này sẽ hoạt động trong một thiết lập màn hình duy nhất, nhưng với màn hình kép, nó có thể xuất hiện hai chân (giả sử chúng có cùng độ phân giải). Việc sử dụng setLocationRelativeTo(null)sẽ tập trung vào màn hình chính ngay cả trong thiết lập nhiều màn hình.
Rangi Keen

1
Hãy nhớ rằng bạn phải đặt JFrame hiển thị TRƯỚC KHI bạn căn giữa nó.
Hunter S

4
@HunterS: điều này không chính xác. Trên thực tế, không nên đặt nó hiển thị cho đến khi SAU bạn tập trung vào nó. Bằng cách này, nó sẽ không xuất hiện và sau đó nhảy xung quanh. Miễn là bạn đã đóng gói khung hoặc đặt kích thước trước mã trong câu trả lời này, bạn sẽ ổn.
Erick Robertson

520

Sử dụng setLocationRelativeTo(null)

Phương pháp này có tác dụng đặc biệt khi bạn vượt qua nó a null. Theo Javadoc:

Nếu thành phần là null hoặc GraphicsConfiguration được liên kết với thành phần này là null, cửa sổ sẽ được đặt ở giữa màn hình.

Điều này nên được thực hiện sau khi đặt kích thước hoặc gọi pack(), nhưng trước khi cài đặt nó hiển thị, như thế này:

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

102
+1 nếu phương thức pack () được sử dụng, setLocationRelativeTonên được sử dụng sau lệnh gọi phương thức pack ()
Ravindra Gullapalli

6
@Imray vì có lẽ nó không hoạt động với cấu hình màn hình kép. : P
Ankit

17
Có vẻ như phương pháp đó nên được gọi sau .setSize().
Kamil

6
Điều này hoạt động trong một thiết lập đa màn hình và như đã nêu trong các bình luận, nó phải được gọi sau pack () và setSize () nếu chúng được gọi ở tất cả.
Paul Gregoire

2
@Ankit nó hoạt động hoàn hảo với thiết lập màn hình kép của tôi. Câu trả lời "tốt nhất" luôn được OP chọn.
Kent

59

Bạn có thể gọi JFrame.setLocationRelativeTo(null)để trung tâm cửa sổ. Hãy chắc chắn để đặt cái này trướcJFrame.setVisible(true)


20
+1 nếu phương thức pack () được sử dụng, setLocationRelativeTonên được sử dụng sau lệnh gọi phương thức pack ()
Ravindra Gullapalli

29

Chỉ cần nhấp vào biểu mẫu và đi đến các thuộc tính JFrame, sau đó chọn tab Mã và kiểm tra Generate Center.

nhập mô tả hình ảnh ở đây


tôi chưa bao giờ nghĩ về điều này Dù sao, làm thế nào về mã hoạt động đằng sau chính nó sau khi chúng ta nhấp vào đây ....? @HenkVanBoeijen
gumuruh

11

Đơn giản như thế này ...

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

hoặc nếu bạn đang sử dụng khung thì đặt khung thành

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

Để làm rõ, từ các tài liệu :

Nếu thành phần là null hoặc GraphicsConfiguration được liên kết với thành phần này là null, cửa sổ sẽ được đặt ở giữa màn hình.


7

Tôi đang sử dụng NetBeans IDE 7.2.1 làm môi trường cho nhà phát triển của mình và ở đó bạn có một tùy chọn để định cấu hình các thuộc tính JForm.

trong Thuộc tính JForm, hãy chuyển đến tab 'Mã' và định cấu hình 'Trung tâm tạo'. trước tiên bạn sẽ cần đặt Chính sách kích thước biểu mẫu thành 'Tạo mã thay đổi kích thước'.


6

Tôi đang sử dụng NetBeans IDE 7.3 và đây là cách tôi tập trung vào JFrame của mình Hãy chắc chắn rằng bạn nhấp vào Bảng điều khiển JFrame và đi tới thanh thuộc tính JFrame của bạn, nhấp vào thanh Mã và chọn hộp kiểm Tạo trung tâm.


2

Nếu bạn sử dụng NetBeans, chỉ cần nhấp vào khung trên dạng xem thiết kế, sau đó là tab mã trên các thuộc tính của nó. Tiếp theo, kiểm tra 'Tạo trung tâm'. Điều đó sẽ hoàn thành công việc.


1

Nếu bạn rõ ràng setPreferredSize(new Dimension(X, Y));thì tốt hơn là sử dụng:

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


1

Bạn có thể sử dụng phương pháp này, cho phép JFrame được căn giữa và toàn màn hình cùng một lúc.

yourframe.setExtendedState(JFrame.MAXIMIZED_BOTH);

0

Trong Đậu GUI Net - đi đến JFrame ( click chuột phải vào JFrame trong Navigator) tài sản, dưới đang , hình thức chính sách kích thước bất động sản chọn Generate Resize Mã . Trong cùng một cửa sổ, Untick Tạo vị tríđánh dấu Tạo kích thước và trung tâm .

Thích lập trình. Ramana

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.