Di utas lain saya menyatakan bahwa saya suka memusatkan GUI saya dengan melakukan sesuatu seperti ini:
JFrame frame = new JFrame("Foo");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(new HexagonGrid());
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
Tetapi Andrew Thompson memiliki pendapat yang berbeda, sebagai gantinya menelepon
frame.pack();
frame.setLocationByPlatform(true);
dan ingin tahu pikiran ingin tahu mengapa?
java
swing
user-interface
Hovercraft Penuh Belut
sumber
sumber
Jawaban:
Menurut saya, GUI di tengah layar terlihat begitu .. "splash-screen'ish". Saya terus menunggu mereka menghilang dan GUI yang sebenarnya muncul!
Sejak Java 1.5 kami telah memiliki akses
Window.setLocationByPlatform(boolean)
. yang..Lihat efek dari contoh ini yang menempatkan 3 GUI ke posisi default yang dipilih oleh OS - pada Windows 7, Linux dengan Gnome & Mac OS X.
(3 lot) 3 GUI ditumpuk dengan rapi. Ini mewakili 'jalan paling tidak mengejutkan' bagi pengguna akhir, karena itu adalah bagaimana OS dapat memposisikan 3 contoh editor teks biasa (atau apa pun, dalam hal ini). Terima kasih saya kepada trashgod untuk Linux & Mac. gambar-gambar.
Berikut adalah kode sederhana yang digunakan:
sumber
ii
bukan hanyai
? Apakah itu mematuhi beberapa konvensi atau itu preferensi pribadi (atau mungkin sesuatu yang sama sekali berbeda)?ii
bukani
. Ketika saya mengambil bagian dalam kompetisi pemrograman, saya sering harus mencari indeks loop ke, katakanlah,+1
atau-1
darinya untuk memperbaikinya dengan satu kesalahan. Dalam kasus tersebut, mencariii
jauh lebih mudah daripada mencarii
, terlepas dari editor yang saya gunakan. Demikian pula, saya menggunakanjj
dankk
untuk indeks loop bersarang. :)Saya sepenuhnya setuju bahwa
setLocationByPlatform(true)
ini adalah cara terbaik untuk menentukan posisi JFrame baru tetapi pada pengaturan dual-monitor Anda bisa mendapatkan masalah. Dalam kasus saya, anak JFrame muncul di monitor 'yang lain'. Contoh: Saya punya GUI utama saya di Layar 2, saya memulai JFrame baru dengansetLocationByPlatform(true)
dan itu terbuka di Layar 1. Jadi di sini adalah solusi yang lebih lengkap, saya pikir:sumber