PDA

View Full Version : [Java]Full screen, piccolo problema


Tzor
03-12-2010, 14:03
Ho un applicazione che visualizza dei jpg e ho un JButton "Schermo intero" a cui è associato un ActionListener con il seguente metodo actionPerformed:


public void actionPerformed(actionEvent evt) {

GraphicsDevice cc = GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice();

if (!isFullScreen) {
if (cc.isFullScreenSupported()) {
frame.setResizable(false);
cc.setFullScreenWindow(frame);
isFullScreen = true;
}
} else {
frame.setResizable(true);
frame.setSize(800, 600);
isFullScreen = false;
}

}


Il JButton fa espandere la finestra o la fa tornare alla dimensione originale se la finestra è già full screen.
Il problema è che l'espansione e il successivo ridimensionamento funzionano solo la prima volta. Se tento di rimettere il full screen tramite il JButton dopo avere ridimensionato alle dimensioni originali (sempre tramite il JButton) l'unica cosa che mi fa è il frame.setResizeble(false) ma la dimensione rimane a 800x600. :muro:
Non riesco a trovare dove sta il problema.

P.s. isFullScreen è un campo boolean inizilizzato a false

wingman87
03-12-2010, 16:09
Leggendo la documentazione mi sembra di capire che devi richiamare di nuovo setFullScreenWindow passandogli null per uscire dalla modalità fullscreen. Forse è quello il problema.
http://download.oracle.com/javase/6/docs/api/java/awt/GraphicsDevice.html#setFullScreenWindow%28java.awt.Window%29

Tzor
03-12-2010, 23:04
Leggendo la documentazione mi sembra di capire che devi richiamare di nuovo setFullScreenWindow passandogli null per uscire dalla modalità fullscreen. Forse è quello il problema.
http://download.oracle.com/javase/6/docs/api/java/awt/GraphicsDevice.html#setFullScreenWindow%28java.awt.Window%29

Grande, funziona! L'unica cosa che mi rimane da risolvere è far funzionare il metodo setUnderorated perchè mi causa questa eccezione:
java.awt.IllegalComponentStateException: The frame is displayable.

banryu79
06-12-2010, 08:45
Grande, funziona! L'unica cosa che mi rimane da risolvere è far funzionare il metodo setUnderorated perchè mi causa questa eccezione:
java.awt.IllegalComponentStateException: The frame is displayable.
TI sputa quell'eccezione perchè non puoi mutare lo stato "decorated/undecorated" di una Window finchè è displayable: devi prima renderla undisplayable, modificarne lo stato e poi renderla di nuovo displayable.
In pratica dovresti settare quello stato solo prima di rendere displayable: fai prima a distruggere la finestra e ricostruirla con lo stato undecorated mutato.