Bagaimana cara mengatur JFrame agar tampak terpusat, terlepas dari resolusi monitor? [Tutup]


197

Saat bekerja dengan Java, saya merasa sulit untuk memposisikan jendela utama saya di tengah layar ketika saya memulai aplikasi.

Apakah ada cara saya bisa melakukan itu? Tidak harus terpusat secara vertikal, perataan horizontal adalah tujuan yang lebih penting bagi saya. Tapi penyejajaran vertikal juga diterima.

Jawaban:


232

Saya selalu melakukannya dengan cara ini:

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

di mana thisJFrame terlibat.


1
Saya tahu jawaban ini benar-benar tua tetapi apakah ada cara yang mungkin untuk melakukan ini dalam konteks statis? Saya memutuskan antara bekerja ke arah itu atau hanya menjatuhkan public static void main (String [] args) yang saya gunakan untuk alasan apa pun.
2xedo

14
Ini akan berfungsi dalam pengaturan monitor tunggal, tetapi dengan dual monitor mungkin terlihat mengangkangi keduanya (dengan asumsi mereka adalah resolusi yang sama). Menggunakan setLocationRelativeTo(null)akan memusatkannya pada monitor utama bahkan dalam pengaturan multi-monitor.
Rangi Keen

1
Ingatlah bahwa Anda harus mengatur JFrame terlihat sebelum Anda memusatkannya.
Hunter S

4
@ Pemburu: ini tidak benar. Bahkan, disarankan untuk tidak membuatnya terlihat sampai SETELAH Anda memusatkannya. Dengan cara ini tidak akan muncul dan kemudian melompat-lompat. Selama Anda telah mengemas frame atau mengatur dimensi sebelum kode dalam jawaban ini, Anda akan baik-baik saja.
Erick Robertson

520

Menggunakan setLocationRelativeTo(null)

Metode ini memiliki efek khusus ketika Anda melewatinya a null. Menurut Javadoc:

Jika komponennya nol, atau konfigurasi GraphicsC terkait dengan komponen ini adalah nol, jendela diletakkan di tengah layar.

Ini harus dilakukan setelah mengatur ukuran atau panggilan pack(), tetapi sebelum mengaturnya terlihat, seperti ini:

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

102
+1 jika metode pack () digunakan, setLocationRelativeToharus digunakan setelah pemanggilan metode pack ()
Ravindra Gullapalli

6
@Imray karena mungkin tidak bekerja dengan konfigurasi dual monitor. : P
Ankit

17
Sepertinya metode itu harus dipanggil setelah .setSize().
Kamil

6
Ini berfungsi dalam pengaturan multi-monitor dan seperti yang dinyatakan dalam komentar itu harus dipanggil setelah paket () dan setSize () jika mereka dipanggil sama sekali.
Paul Gregoire

2
@Ankit berfungsi dengan baik dengan pengaturan dual monitor saya. Jawaban "terbaik" selalu dipilih oleh OP.
Kent


29

Cukup klik pada formulir dan pergi ke properti JFrame, lalu tab Kode dan centang Generate Center.

masukkan deskripsi gambar di sini


Saya tidak pernah memikirkan hal ini. Lagi pula, bagaimana dengan kode yang bekerja di belakang itu sendiri setelah kami mengklik ini ....? @HenkVanBoeijen
gumuruh

11

Sesederhana ini ...

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

atau jika Anda menggunakan bingkai kemudian atur bingkai ke

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

Untuk klarifikasi, dari dokumen :

Jika komponennya nol, atau konfigurasi GraphicsC terkait dengan komponen ini adalah nol, jendela diletakkan di tengah layar.


7

saya menggunakan NetBeans IDE 7.2.1 sebagai lingkungan pengembang saya dan di sana Anda memiliki opsi untuk mengkonfigurasi properti JForm.

di JForm Properties, buka tab 'Code' dan konfigurasikan 'Generate Center'. Anda harus terlebih dahulu mengatur Kebijakan Ukuran Formulir ke 'Buat Kode Ubah Ukuran'.


6

Saya menggunakan NetBeans IDE 7.3 dan ini adalah cara saya memusatkan JFrame saya. Pastikan Anda mengklik JFrame Panel dan pergi ke bilah properti JFrame Anda, klik pada bilah Kode dan pilih kotak centang Generate Center.


2

Jika Anda menggunakan NetBeans, cukup klik bingkai pada tampilan desain, lalu tab kode pada propertinya. Selanjutnya, periksa 'Hasilkan Pusat'. Itu akan menyelesaikan pekerjaan.


1

Jika Anda secara eksplisit setPreferredSize(new Dimension(X, Y));maka lebih baik menggunakan:

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


1

Anda dapat menggunakan metode ini, yang memungkinkan JFrame berada di tengah dan layar penuh secara bersamaan.

yourframe.setExtendedState(JFrame.MAXIMIZED_BOTH);

0

Di Net Beans GUI - buka properti jframe ( klik kanan pada jFrame di Navigator), di bawah kode , properti kebijakan ukuran formulir pilih Generate Resize Code . Di jendela yang sama, Untick Hasilkan Posisi dan centang Hasilkan Ukuran dan Tengah .

Nikmati pemrograman. Ramana

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.