11
votes

Comment puis-je faire plein écran en Java sur OSX

J'essaie et que je ne parviens pas à utiliser le mode plein écran Java sur l'affichage principal d'un système OSX. Tout ce que j'ai essayé, je ne peux pas sembler vous débarrasser de la barre de menu «Apple» du haut de l'écran. J'ai vraiment besoin de peindre sur tout l'écran. Quelqu'un peut-il me dire comment se débarrasser du menu?

J'ai joint un exemple de classe qui présente le problème - sur mon système, le menu est toujours visible où je m'attendrais à voir un écran complètement vide. xxx


2 commentaires

Pourquoi rendez-vous votre fenêtre entier à l'écran et appelez-vous immédiatement SetFullScreenWindow (NULL)?


@myers: C'est la réponse. S'il vous plaît ajouter est comme tel, je ne peux pas résister à la tentation


3 Réponses :


13
votes

Je pense que votre problème est ici: xxx

enfin Les blocs sont toujours exécutés, alors que se passe-t-il ici est que la fenêtre devient plein écran pour un bref instant ( Si cela) puis relie l'écran immédiatement.

aussi, SETVisible (true) n'est pas nécessaire lorsque vous avez déjà appelé setfulscreenwindow (this) , Selon le Javadocs .

Donc, je modifierais le constructeur à ceci: xxx


3 commentaires

Merci - ça marche! L'essai - enfin construit a été pris de Java.sun.com/ Documents / livres / Tutoriel / Extra / FullScreen / ... où il suggère ce formulaire pour empêcher la demande de garder l'écran après la sortie - mais il semble que je doive continuer à garder activement le verrouillage à l'écran pour empêcher son écran pour empêcher son écran libéré trop tôt. Merci!


Notez le "..." là-bas? C'est là que quelque chose qui bloque jusqu'à la fermeture de la fenêtre devrait aller. L'essai ... Enfin abordez simplement des gardes contre des exceptions qui pourraient conserver votre application de libérer l'écran lorsque cela est fait. (Curieusement, même si setfulscreenwindow rend la fenêtre visible, il ne bloque pas comme SetVisible fait. Je me demande si cela est par conception.)


Maintenant, le dispositif graphique agit-il comme un jframe, c'est-à-dire que vous pouvez ajouter JPANNELS?



12
votes

Sur OS X (10.7 et versions ultérieures), il est préférable d'utiliser le mode natif plein écran disponible. Vous devez utiliser:

com.apple.eawt.FullScreenUtilities.setWindowCanFullScreen(window,true);
com.apple.eawt.Application.getApplication().requestToggleFullScreen(window);


4 commentaires

Merveilleux! J'en avais besoin car, au moins sur OS X, les accélérateurs de menu ne fonctionnent pas dans le mode graphisme typique en plein écran. Ceci est la vraie solution OS X +1


Vous auriez besoin de la réflexion pour tester ces classes et exécuter le code?


@Unitedstatesofamerica Reflet est aller simple. Sinon, vous pouvez utiliser un bocancé sur des plates-formes non-pommes, comme est fourni ici: Stackoverflow.com/a/2639395


Parfait. C'est absolument ce qui est nécessaire pour OSX



0
votes

C'est un peu pédant, la réponse est de suivre complètement le tutoriel, qui a l'essentiel et est un peu plus vaste que cela ne conviendrait dans un poste. L'échantillon ci-dessus ne fonctionne pas car il manque un validate (); code> et du contenu. Je soupçonne que le tutoriel Java ne disparaîtra pas de temps bientôt. Ci-dessous une version modifiée

package test;

import java.awt.*;
import java.awt.event.*;
import javax.swing.JFrame;
import javax.swing.JLabel;

public class FullScreenFrame extends JFrame implements KeyListener {

    public FullScreenFrame () {
        addKeyListener(this);
        setUndecorated(true);
        GraphicsDevice gd = GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice();

    if (gd.isFullScreenSupported()) {
        try {
            this.getContentPane().addKeyListener(this);
            this.getContentPane().setLayout(new BorderLayout());
            this.getContentPane().add("Center", new JLabel("Full Screen, back to normal in 10 seconds"));
            gd.setFullScreenWindow(this);
            validate();
            try {
                Thread.sleep(10000);
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        } finally {
            gd.setFullScreenWindow(null);
        }
    } else {
        System.err.println("Full screen not supported");
    }

}

public void keyTyped(KeyEvent e) {
    System.out.println("keyTyped:" +  e.getKeyChar() + "source:"  + e.getSource() );
}
public void keyPressed(KeyEvent e) {
    System.out.println("keyPressed:" + e.getKeyChar() + "source:"  + e.getSource() );
}
public void keyReleased(KeyEvent e) {
    System.out.println("keyReleased:" + e.getKeyChar() + "source:"  + e.getSource() );
       setVisible(false);
        dispose();
    }

    public static void main (String [] args) {
        new FullScreenFrame();
    }
}


0 commentaires