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.
java swing awt frame jframe initcomponents s
Commentami!