Come impostare JFrame in modo che appaia centrato, indipendentemente dalla risoluzione del monitor? [chiuso]


197

Mentre lavoro con Java, trovo difficile posizionare la mia finestra principale al centro dello schermo quando avvio l'applicazione.

C'è un modo in cui posso farlo? Non deve essere centrato verticalmente, l'allineamento orizzontale è l'obiettivo più importante per me. Ma anche l'allineamento verticale è il benvenuto.

Risposte:


232

L'ho sempre fatto in questo modo:

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

dove thisè coinvolto il JFrame.


1
So che questa risposta è davvero vecchia ma c'è un modo possibile per farlo in un contesto statico? Sto decidendo tra il lavorare verso quello o semplicemente abbandonare il vuoto statico pubblico principale (String [] args) che io per qualunque motivo volessi usare.
2xedo,

14
Funzionerà in una configurazione a monitor singolo, ma con due monitor potrebbe apparire a cavallo tra i due (supponendo che abbiano la stessa risoluzione). L'utilizzo setLocationRelativeTo(null)lo centrerà sul monitor principale anche in una configurazione multi-monitor.
Rangi Keen,

1
Tieni presente che devi impostare il JFrame visibile PRIMA di centrarlo.
Hunter S,

4
@HunterS: questo non è corretto. In effetti, si consiglia di non renderlo visibile fino a dopo averlo centrato. In questo modo non verrà visualizzato e quindi saltare in giro. Finché hai impacchettato il telaio o impostato le dimensioni prima del codice in questa risposta, starai bene.
Erick Robertson,

520

Uso setLocationRelativeTo(null)

Questo metodo ha un effetto speciale quando lo passi a null. Secondo il Javadoc:

Se il componente è null o la GraphicsConfiguration associata a questo componente è null, la finestra viene posizionata al centro dello schermo.

Questo dovrebbe essere fatto dopo aver impostato la dimensione o chiamando pack(), ma prima di renderlo visibile, in questo modo:

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

102
+1 se si utilizza il metodo pack (), setLocationRelativeTodeve essere usato dopo la chiamata del metodo pack ()
Ravindra Gullapalli

6
@Imray perché probabilmente non funziona con la configurazione a doppio monitor. : P
Ankit

17
Sembra che quel metodo dovrebbe essere chiamato dopo .setSize().
Kamil,

6
Funziona in una configurazione multi-monitor e, come indicato nei commenti, deve essere chiamato dopo pack () e setSize () se vengono chiamati affatto.
Paul Gregoire,

2
@Ankit funziona perfettamente con la mia configurazione a doppio monitor. La risposta "migliore" è sempre scelta dall'OP.
Kent,


29

Basta fare clic sul modulo e accedere alle proprietà di JFrame, quindi alla scheda Codice e selezionare Generate Center.

inserisci qui la descrizione dell'immagine


non ci ho mai pensato. Comunque, che ne dici del codice che funziona dietro se stesso dopo aver fatto clic su questo ....? @HenkVanBoeijen
gumuruh,

11

Semplice come questo ...

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

oppure se si utilizza una cornice, impostare la cornice su

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

Per chiarimenti, dai documenti :

Se il componente è null o la GraphicsConfiguration associata a questo componente è null, la finestra viene posizionata al centro dello schermo.


7

sto usando NetBeans IDE 7.2.1 come mio sviluppatore ambientale e lì hai un'opzione per configurare le proprietà di JForm.

nelle proprietà JForm vai alla scheda 'Codice' e configura 'Genera centro'. dovrai prima impostare la Politica sulla dimensione del modulo su "Genera codice di ridimensionamento".


6

Sto usando NetBeans IDE 7.3 e questo è il modo in cui accentrerò la centralizzazione del mio JFrame. Assicurati di fare clic sul pannello JFrame e vai alla barra delle proprietà di JFrame, fai clic sulla barra del codice e seleziona la casella di controllo Genera centro.


2

Se usi NetBeans, fai semplicemente clic sulla cornice nella vista di progettazione, quindi sulla scheda del codice nelle sue proprietà. Quindi, seleziona "Genera centro". Ciò porterà a termine il lavoro.


1

Se esplicitamente setPreferredSize(new Dimension(X, Y));, è meglio usare:

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


1

È possibile utilizzare questo metodo, che consente a JFrame di essere centrato e schermo intero allo stesso tempo.

yourframe.setExtendedState(JFrame.MAXIMIZED_BOTH);

0

Nella GUI di Net Beans: vai alle proprietà jframe ( fai clic con il tasto destro su jFrame in Navigator), sotto il codice , proprietà della politica di dimensione del modulo seleziona Genera codice di ridimensionamento . Nella stessa finestra, deseleziona Genera posizione e seleziona Genera dimensione e centro .

Buona programmazione. Ramana

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.