Modalità Full Screen Exclusive in java

I programmatori che hanno già utilizzato piattaforme del tipo Microsoft DirectX API possono avere una certa familiarità con la modalità Full Screen Exclusive cioè la modalità a schermo intero esclusiva. Questa modalità è una potente funzionalità di J2SE versione 1.4 che permette al programmatore di sospendere il sistema a finestre in modo che il disegno può essere fatto direttamente sullo schermo. Si tratta di un leggero cambiamento al paradigma dell'usuale gestione dell'interfaccie grafiche in java che consentono tecniche avanzate di programmazione grafica.

Questa modalità viene gestita dalla classe java.awt.GraphicsDevice. Questa classe non è direttamente istanziabile. Si può ottenere un'istanza di essa attraverso la classe java.awt.GraphicsEnvironment in questo modo:
GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
GraphicsDevice gd = ge.getDefaultScreenDevice()
Una volta ottenuta un'istanza è necessario - prima di effettuare qualsiasi operazione - verificare che la la modalità Full Screen Eclusive sia supportata:
if (gd.isFullScreenSupported()) {
  ...
}
Per attivare la modalità a schermo intero si usa il metodo setFullScreenWindow() di GrpahicsDevice che riceve come parametro un oggetto di tipo java.awt.Window quindi va bene anche per un JFrame:
gd.setFullScreenWindow(new JFrame());
In questo caso il JFrame verrà visualizzato a schermo intero senza nessun'altro componente grafico del sistema operativo. E la classica modalità che si utilizza negli screen saver o nei giochi. Comunque si consiglia di utilizzare alcune precauzioni prima di utilizzare questa modalità:
  • Verificare sempre che la modalità Full Screen Exclusive (isFullScreenSupported()) sia supportata altrimenti le prestazioni grafiche potrebbero degradarsi
  • E' consigliabile escludere la decorazione del JFrame. In questo caso possiamo utilizzare il metodo setUndecorated(true) della classe JFrame
  • I componenti in questa modalità non devono essere ridimensionabili, quindi è opportuno richiamare il metodo setResizable(false)
Vi lascio con un esempio completo implementando un JFrame in modalità schermo intero rispettando quello che abbiamo appena detto:
import java.awt.GraphicsDevice;
import java.awt.GraphicsEnvironment;
import javax.swing.JFrame;

public class FullScreenDemo {

  public static void main(String[] argv) {
    GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
    GraphicsDevice gd = ge.getDefaultScreenDevice();
    if (gd.isFullScreenSupported()) {
      JFrame frame = new JFrame();
      frame.setUndecorated(true);
      frame.setResizable(false);
      gd.setFullScreenWindow(frame);
    }
  }

}
Altri link che potrebbero interessarti
  • Utilizzare un JButton in Java Swing
  • Utilizzare HTML in componenti Java Swing
  • Numeri casuali in java
  • Leggere un file di testo in java
  • Le variabili atomiche in java
  • Le classi anonime
  • Java Regex
  • Java Database MySql
  • Java Cursor Mouse
  • Import Static Java
  • Implementare un Singleton
  • Implementare un KeyListener in java Swing
  • Implementare il System.out su una JTextArea
  • Il costrutto if in java
  • Il costrutto foreach in java
  • Il blocco static
  • Creare una ToolBar in Java Swing
  • Chiudere le applicazioni Java Swing
  • Bordo con titolo in Java Swing
  • Background Image per componenti Java Swing