如何让JFrame真正全屏?

Rof*_*ion 20 java swing fullscreen jframe

在我的Java应用程序中,我尝试使用以下代码使JFrame真正全屏:

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();
    }
}
Run Code Online (Sandbox Code Playgroud)

但在我的Mac上,我仍然可以看到Dock和OSX的顶部工具栏.那么如何创建一个真正消耗整个屏幕的JFrame呢?

编辑 我必须补充一点,我想从eclipse插件中调用那个JFrame.

iir*_*ekm 12

我还没有尝试过,但Java有全屏API,应该满足你的需求:

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

  • +1 [`FullScreenTest`](http://stackoverflow.com/a/7457102/230513)就是一个例子. (3认同)

PeG*_*nOS 5

我知道答案.首先,我必须承认,如果您正在制作视频或电影播放器​​或动画播放器,以下技巧将无效.好的,这是我经过多次尝试后发现的:

假设你想按一个按钮(称为fullscreenButton)来制作全屏JFrame(称为帧).然后执行以下操作:

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;
               }
    }
    }
}
Run Code Online (Sandbox Code Playgroud)

我希望你喜欢它