web-dev-qa-db-fra.com

Comment faire un JFrame vraiment plein écran?

Dans mon application Java, j'essaie de rendre un JFrame vraiment plein écran en utilisant ce code:

public class MainFrame extends JFrame {

    private static final long serialVersionUID = 1L;

    public MainFrame() {
        super();
        this.setTitle();
        this.setUndecorated(true);

        this.setExtendedState(JFrame.MAXIMIZED_BOTH);

        this.setVisible(true);
        //this.pack();
    }
}

Mais sur mon Mac, je peux toujours voir le Dock et la barre d'outils supérieure de l'OSX. Alors, comment puis-je créer un JFrame qui consomme vraiment tout mon écran?

EDIT Je dois ajouter que je veux appeler ce JFrame depuis un plugin Eclipse.

20

Je ne l'ai pas encore essayé, mais Java a une API plein écran, qui devrait répondre à vos besoins:

http://docs.Oracle.com/javase/tutorial/extra/fullscreen/index.html

12
iirekm

Je connais la réponse. Tout d'abord, je dois admettre que l'astuce suivante ne fonctionnera pas si vous créez un lecteur de vidéo ou de film ou un lecteur d'animation. OK voici ce que j'ai trouvé après plusieurs essais:

Supposons que vous souhaitiez créer un plein écran JFrame (appelé frame) lorsque vous appuyez sur un bouton (appelé fullscreenButton) .Puis procédez comme suit:

import Java.awt.*; 
import javax.swing.*;   

public class FullscreenJFrame extends JFrame{

    private JPanel contentPane = new JPanel();
    private JButton fullscreenButton = new JButton("Fullscreen Mode");
    private boolean Am_I_In_FullScreen = false;
    private int PrevX,PrevY,PrevWidth,PrevHeight;

    public static void main(String[] args) {
         FullscreenJFrame frame = new FullscreenJFrame();
         frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
         frame.setSize(600,500);
         frame.setVisible(true);
    }

    public FullscreenJFrame(){
        super("My FullscreenJFrame");

        setContentPane(contentPane);
        //From Here starts the trick

        FullScreenEffect effect = new FullScreenEffect();

        fullscreenButton.addActionListener(effect);

        contentPane.add(fullscreenButton);
        fullscreenButton.setVisible(true);

    }

    private class FullScreenEffect implements ActionListener{
        @Override
    public void actionPerformed(ActionEvent arg0) {
         // TODO Auto-generated method stub

             if(Am_I_In_FullScreen == false){

                      PrevX = getX();
          PrevY = getY();
          PrevWidth = getWidth();
          PrevHeight = getHeight();

          dispose(); //Destroys the whole JFrame but keeps organized every Component                               
                      //Needed if you want to use Undecorated JFrame
                      //dispose() is the reason that this trick doesn't work with videos
                      setUndecorated(true);

              setBounds(0,0,getToolkit().getScreenSize().width,getToolkit().getScreenSize().height);
            setVisible(true);
                            Am_I_In_FullScreen = true;
              }
               else{
                    setVisible(true);

                    setBounds(PrevX, PrevY, PrevWidth, PrevHeight);
                    dispose();
        setUndecorated(false);
        setVisible(true);
                    Am_I_In_FullScreen = false;
               }
    }
    }
}

J'espère que tu as aimé

5
PeGiannOS

Utilisez com.Apple.eawt.FullScreenUtilities. Et assurez-vous de vérifier que le système exécute Mac OS.

public void enableFullscreen(Window window, boolean bool) {
    if (System.getProperty("os.name").startsWith("Mac OS")) {
        com.Apple.eawt.FullScreenUtilities.setWindowCanFullScreen(window, bool);

    }

}
0
Hunter Munts

Un exemple: 

import Java.awt.FlowLayout;
import Java.awt.GraphicsDevice;
import Java.awt.GraphicsEnvironment;
import Java.awt.event.ActionEvent;
import Java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;




public class FullScreenJFrame extends JFrame{

    private GraphicsDevice vc;

    public FullScreenJFrame(){
     super();

     GraphicsEnvironment e = GraphicsEnvironment.getLocalGraphicsEnvironment();
     vc= e.getDefaultScreenDevice();



     JButton b = new JButton("exit");
     b.addActionListener(
             new ActionListener(){
                 public void actionPerformed(ActionEvent arg0) { 
                     dispose();
                     System.exit(0);

                 }
             }
             );
     this.setLayout(new FlowLayout());
     this.add(b);
     setFullScreen(this);
 }

 public void setFullScreen(JFrame f){

     f.setUndecorated(true);
     f.setResizable(false);
     vc.setFullScreenWindow(f);


 }

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

}
0
Oscar Belletti
private Dimension screenSize; /* class level vars */
private swidth , sheight;

/*In GUI creating method:put this code: */
screenSize = Toolkit.getDefaultToolkit().getScreenSize();
sheight = screenSize.height;
swidth = screenSize.width;
setBounds(0, 0, swidth, sheight-40);

NB: en utilisant la largeur, Sheight Vars vous laisse la liberté de vous ajuster.
Le meilleur moyen est d’utiliser int vars à la place de - 40 e.g sheight/swidth - margin etc.
Ici, la marge doit provenir du tableau des paramètres. Obtenir le plein contrôle de la situation.
Utilisation directe également possible sous la forme: setBounds(0,0,screenSize.width, screenSize.height);

0
nukhan