Monitör çözünürlüğünden bağımsız olarak JFrame'i ortalanmış olarak nasıl ayarlayabilirim? [kapalı]


197

Java ile çalışırken uygulamayı başlattığımda ana penceremi ekranın ortasına yerleştirmekte zorlanıyorum.

Bunu yapmamın bir yolu var mı? Dikey olarak ortalanması gerekmiyor, yatay hizalama benim için daha önemli bir hedef. Ancak dikey hizalama da kabul edilir.

Yanıtlar:


233

Her zaman bu şekilde yaptım:

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

thisJFrame nereye dahil?


1
Bu cevabın gerçekten eski olduğunu biliyorum, ancak bunu statik bir bağlamda yapmanın olası bir yolu var mı? Ben buna doğru çalışma ya da sadece kullanmak istediği herhangi bir nedenle ben genel statik void main (String [] args) bırakarak arasında karar.
2xedo

14
Bu, tek bir monitör kurulumunda çalışacaktır, ancak çift monitörle, ikisinin arasında durarak görünebilir (aynı çözünürlükte olduklarını varsayarak). Kullanılması setLocationRelativeTo(null)çoklu monitör kurulumunda bile birincil monitörde ortalar.
Rangi Keen

1
JFrame'i ortalamadan ÖNCE görünür olarak ayarlamanız gerektiğini unutmayın.
Hunter S

4
@HunterS: bu yanlış. Aslında, ortaladıktan SONRA görünene kadar görünmemesi önerilir. Bu şekilde görünmez ve sonra atlar. Çerçeveyi paketlediğiniz veya boyutları bu yanıttaki koddan önce ayarladığınız sürece, iyi olacaksınız.
Erick Robertson

521

kullanım setLocationRelativeTo(null)

Bu yöntemin ilettiğinizde özel bir etkisi vardır a null. Javadoc'a göre:

Bileşen null veya bu bileşenle ilişkilendirilmiş GraphicsConfiguration null ise, pencere ekranın ortasına yerleştirilir.

Bu, boyutu ayarladıktan veya aradıktan sonra pack(), ancak şu şekilde görünür olarak ayarlanmadan önce yapılmalıdır :

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

102
Pack () yöntemi kullanılıyorsa +1, setLocationRelativeTopack () yöntem çağrısından sonra kullanılmalıdır
Ravindra Gullapalli

6
@Imray çünkü muhtemelen çift monitör yapılandırmasıyla çalışmaz. : P
Ankit

17
Bu yöntemin sonradan çağrılması gerektiği anlaşılıyor .setSize().
Kamil

6
Bu, çoklu monitör kurulumunda çalışır ve yorumlarda belirtildiği gibi, eğer çağrılırsa pack () ve setSize () öğelerinden sonra çağrılmalıdır.
Paul Gregoire

2
@Ankit, çift monitör kurulumumla mükemmel çalışıyor. "En iyi" cevap her zaman OP tarafından seçilir.
Kent


29

Sadece forma tıklayın ve JFrame özelliklerine gidin, ardından Kod sekmesine gidin ve kontrol edin Generate Center.

resim açıklamasını buraya girin


Bunu hiç düşünmemiştim. Her neyse, biz tıkladıktan sonra arkasında çalışan kod hakkında ne ....? @HenkVanBoeijen
Gumuruh

11

Bu kadar basit ...

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

veya bir çerçeve kullanıyorsanız, çerçeveyi

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

Açıklama için dokümanlardan :

Bileşen null veya bu bileşenle ilişkilendirilmiş GraphicsConfiguration null ise, pencere ekranın ortasına yerleştirilir.


7

NetBeans IDE 7.2.1 benim geliştirici çevre olarak kullanıyorum ve orada JForm özelliklerini yapılandırmak için bir seçenek var.

JForm Özellikleri'nde 'Kod' sekmesine gidin ve 'Oluşturma Merkezi'ni yapılandırın. önce Form Size Politikasını 'Yeniden Boyutlandırma Kodu Oluştur' olarak ayarlamanız gerekir.


6

NetBeans IDE 7.3 kullanıyorum ve JFrame'imi merkezileştirmeye nasıl devam edeceğim JFrame Paneline tıklayıp JFrame özellik çubuğuna gittiğinizden, Kod çubuğuna tıklayın ve Generate Center onay kutusunu seçtiğinizden emin olun.


2

NetBeans kullanıyorsanız, tasarım görünümünde kareye, ardından özelliklerindeki kod sekmesine tıklamanız yeterlidir. Ardından, 'Merkez Oluştur' seçeneğini işaretleyin. Bu işi halledecek.


1

Açıkça setPreferredSize(new Dimension(X, Y));kullanırsanız, kullanmak daha iyidir:

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


1

JFrame'in aynı anda ortalanmasını ve tam ekran olmasını sağlayan bu yöntemi kullanabilirsiniz.

yourframe.setExtendedState(JFrame.MAXIMIZED_BOTH);

0

Net Fasulye GUI içinde - JFrame (hiç halindeyken sağ tıklama ile JFrame Navigator) özellikleri altında kod , form boyutu politikası özelliği seçmek yeniden boyutlandırma Kod Oluştur . Aynı pencerede, Konum Oluştur seçeneğinin işaretini kaldırın ve Boyut ve Merkez Oluştur'u işaretleyin .

Programlamanın keyfini çıkarın. Ramana

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.