How to make a JFrame really fullscreen?

49,339

Solution 1

I haven't tried it yet, but Java has fullscreen API, which should meet your needs:

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

Solution 2

I know the answer. Firstly, I have to admit that the following trick won't work if you are making video or movie player or animation player. OK here is what i found after many tries:

Let's say that you want to make a JFrame (called frame) fullscreen when you press a button (called fullscreenButton).Then do the following :

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;
               }
    }
    }
}

I hope you enjoyed it

Share:
49,339
RoflcoptrException
Author by

RoflcoptrException

Updated on July 09, 2022

Comments

  • RoflcoptrException
    RoflcoptrException almost 2 years

    In my Java application I try to make a JFrame really fullscreen by using this 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();
        }
    }
    

    But on my Mac I can still see the Dock and the top toolbar of the OSX. So how can I create a JFrame that really consumes my whole screen?

    EDIT I have to add that I want to call that JFrame from a eclipse plugin.

  • RoflcoptrException
    RoflcoptrException about 12 years
    Thanks, but this doesn't seem to work when I create the JFrame from a eclipse plugin.
  • Gavin S. Yancey
    Gavin S. Yancey over 10 years
    where do the magic numbers -10, -100, 30, and 110 come from (the amounts that setBounds is offset from the claimed screen size)? Is this portable with those same values? Will part of the window be off of the screen?
  • PeGiannOS
    PeGiannOS over 10 years
    @g.rocket you are right those numbers just fit for my app.A parametric one is setBounds(0,0,getToolkit().getScreenSize().width,getToolkit(‌​).getScreenSize().he‌​ight); not setBounds(-10,-100,getToolkit().getScreenSize().width+30,get‌​Toolkit().getScreenS‌​ize().height+110); i will edit it thx
  • Josiah Yoder
    Josiah Yoder about 8 years
    This answer to another question gives some example code needed to make this approach work.