Centrare una finestra in Java

Mattepuffo's logo
Centrare una finestra in Java

Centrare una finestra in Java

In questo articolo vedremo un semplice modo per centrare i frame nello schermo indipendentemente dalla dimensione.

Il mio JFrame è creato con NetBeans e non lo posterò tutto, ma solo la parte interessata:

import java.awt.*;
.....
public FrameBanca() {
initComponents();
Dimension dim = getToolkit().getScreenSize();
this.setLocation(dim.width / 2 - this.getWidth() / 2, dim.height / 2 - this.getHeight() / 2);
}
......

 

La prima cosa importante è fare l'import del package java.awt che ci serve per creare un oggetto Dimension.

Dopo di che vi ho postato il costruttore del frame, che di defaul avrebbe solo l'istruzione initComponents();

In sostanza ho aggiunto queste righe:

Dimension dim = getToolkit().getScreenSize();
this.setLocation(dim.width / 2 - this.getWidth() / 2, dim.height / 2 - this.getHeight() / 2);

Vediamo in dettaglio.

Prima creo un oggetto Dimension che in grado di incapsulare l'altezza e la larghezza in un singolo oggetto.

getToolkit fa parte della classe Toolkit che è una superclasse astratta che è molto usata nella costruzione di GUI; maggiori info qua.

Anche getScreenSize fa parte della classe Toolkit, e come si evince dal nome serve per controllare la dimensione dello schermo.

A questo punto impostiamo la location con setLocation(int x, int y) che server per muovere il componente (this) in una nuova posizione.

La posizione è ricavata da qualche piccola operazione matematica prendendo i valori di dim e quelli attraverso i metodi getWidth e getHeight calcolati sulla finestra corrente.

Questi due metodi fanno parte della classe Dimension.

La prova che non ho fatto è usare questo codice nel metodo main.

Però così funziona e a me basta!

EDIT

Ho scoperto che c'è anche un metodo che c'entra la finestra in automatico: setLocationRelativeTo(Component c).

Questo metodo setta la location in maniera automatica rispetto al componente passato come argomento.

Il trucco è mettere un bel null:

setLocationRelativeTo(null);

In questo caso il componente errà piazzato al centro dello schermo.


Condividi

Commentami!