Apa cara termudah untuk memusatkan a java.awt.Window
, seperti a JFrame
atau a JDialog
?
java
swing
user-interface
awt
Andrew Swan
sumber
sumber
setLocation()
,setLocationRelativeTo()
dansetLocationByPlatform()
atau semua AWT, bukan Swing. ;)Jawaban:
Dari tautan ini
sumber
pack()
dan itu menempatkan sudut kiri atas bingkai di tengah layar saya. Setelah memindahkan garis ke bawah, garispack()
itu berada di tengah dengan benar.Ini harus bekerja di semua versi Java
sumber
setLocationRelativeTo(null)
harus dipanggil setelah Anda menggunakansetSize(x,y)
, atau menggunakanpack()
.sumber
Perhatikan bahwa teknik setLocationRelativeTo (null) dan Tookit.getDefaultToolkit (). GetScreenSize () hanya berfungsi untuk monitor utama. Jika Anda berada di lingkungan multi-monitor, Anda mungkin perlu mendapatkan informasi tentang monitor spesifik tempat jendela aktif sebelum melakukan penghitungan semacam ini.
Terkadang penting, terkadang tidak ...
Lihat GraphicsEnvironment javadocs untuk info lebih lanjut tentang bagaimana mendapatkan ini.
sumber
Di Linux kodenya
Letakkan jendela saya ke lokasi acak setiap kali saya meluncurkannya, dalam lingkungan multi-tampilan. Dan kodenya
"potong" jendela menjadi dua dengan menempatkannya tepat di tengah, yaitu di antara dua layar saya. Saya menggunakan metode berikut untuk memusatkannya:
Membuat jendela muncul tepat di tengah tampilan pertama. Ini mungkin bukan solusi termudah.
Bekerja dengan baik di Linux, Windows dan Mac.
sumber
Saya akhirnya mendapatkan sekumpulan kode ini untuk bekerja di NetBeans menggunakan Swing GUI Forms untuk memusatkan jFrame utama:
ATAU
ATAU
sumber
Berikut ini tidak berfungsi untuk JDK 1.7.0.07:
Itu menempatkan sudut kiri atas di tengah - tidak sama dengan menengahkan jendela. Yang lainnya juga tidak berfungsi, melibatkan frame.getSize () dan dimensional.getSize ():
Metode getSize () diwarisi dari kelas Komponen, dan oleh karena itu frame.getSize juga mengembalikan ukuran jendela. Jadi, dengan mengurangkan setengah dimensi vertikal dan horizontal dari dimensi vertikal dan horizontal, untuk menemukan koordinat x, y tempat meletakkan sudut kiri atas, memberi Anda lokasi titik tengah, yang pada akhirnya juga memusatkan jendela. Namun, baris pertama dari kode di atas berguna, "Dimensi ...". Lakukan saja ini untuk memusatkannya:
JLabel mengatur ukuran layar. Ada di FrameDemo.java tersedia di tutorial java di situs Oracle / Sun. Saya mengaturnya menjadi setengah tinggi / lebar ukuran layar. Lalu, saya pusatkan dengan menempatkan kiri atas pada 1/4 dimensi ukuran layar dari kiri, dan 1/4 dimensi ukuran layar dari atas. Anda bisa menggunakan konsep serupa.
sumber
di bawah ini adalah kode untuk menampilkan bingkai di tengah atas jendela yang ada.
}
} public static void main (String [] args) melempar Exception {
}
Di bawah ini adalah keluaran dari cuplikan kode di atas:
sumber
frame.setLocation(x, 0);
sepertinya salah - bukankah seharusnya begituframe.setLocation(x, y);
?int y = (int) ((dimension.getHeight() - frame.getHeight()) / 2);
ada dalam kode hanya untuk menunjukkan bahwa Anda juga dapat memusatkan pada sumbu vertikal? Oke, saya pikir Anda baru saja lupa menggunakannya, maaf atas masalah.Ada sesuatu yang sangat sederhana yang mungkin Anda abaikan setelah mencoba memusatkan jendela menggunakan salah satu
setLocationRelativeTo(null)
atausetLocation(x,y)
dan akhirnya sedikit keluar dari tengah.Pastikan Anda menggunakan salah satu dari metode ini setelah menelepon
pack()
karena Anda akan menggunakan dimensi jendela itu sendiri untuk menghitung di mana harus meletakkannya di layar. Sampaipack()
dipanggil, dimensinya tidak seperti yang Anda pikirkan sehingga membuang perhitungan ke tengah jendela. Semoga ini membantu.sumber
Contoh: Di dalam myWindow () pada baris 3 adalah kode yang Anda butuhkan untuk mengatur jendela di tengah layar.
sumber
frame.setLocationRelativeTo (null);
Contoh lengkap:
sumber
Kode berikut memusatkan
Window
di tengah monitor saat ini (yaitu di mana penunjuk mouse berada).sumber
Anda juga bisa mencoba ini.
sumber
Sebenarnya bingkai
.getHeight()
dangetwidth()
tidak mengembalikan nilai, periksa denganSystem.out.println(frame.getHeight());
langsung memasukkan nilai untuk lebar dan tinggi, maka itu akan bekerja dengan baik di tengah. misal: seperti di bawah inikeduanya 450 adalah lebar bingkai dan tinggi saya
sumber
sumber
Urutan panggilan penting:
pertama -
kedua -
sumber