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.

Program Amatir
sumber

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.

Mendongkrak
sumber
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);
JRL
sumber
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
59

Anda dapat menelepon JFrame.setLocationRelativeTo(null)ke pusat jendela. Pastikan untuk meletakkan ini sebelumnyaJFrame.setVisible(true)

Greg
sumber
20
+1 jika metode pack () digunakan, setLocationRelativeToharus digunakan setelah pemanggilan metode pack ()
Ravindra Gullapalli
29

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

masukkan deskripsi gambar di sini

علاء علام
sumber
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.

Vogel612
sumber
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'.

Asaf Magen
sumber
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.

Gstuntz
sumber
2

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

Kingsley Ijike
sumber
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);


sumber
1

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

yourframe.setExtendedState(JFrame.MAXIMIZED_BOTH);
Aplikasi itu
sumber
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

KV Ramana
sumber