当f11被按下我怎样才能使窗口全屏?

问题描述:

import javax.swing.JFrame; 

import java.awt.Color; 

public class Main extends JFrame{ 

    public static void main(String[] args) { 
     Main window = new Main(); 
     window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     window.setSize(200, 200); 
     window.setVisible(true); 
     window.setTitle("Virtual World"); 
     window.setResizable(true); 
     window.getContentPane().setBackground(Color.BLACK); 
    } 

} 

我能做些什么来制作F11从窗口进出全屏?当f11被按下我怎样才能使窗口全屏?

我通过其他问题阅读并试图利用window.setUndecorated(true);但它似乎并没有做任何事情...

要使JFrame真的全屏显示,您必须将其设置为undecorated。但要将其设置为无装饰,您必须首先处理它。例如。

class FullscreenToggleAction extends AbstractAction { 

    private JFrame frame; 
    private GraphicsDevice fullscreenDevice; 

    public FullscreenToggleAction (JFrame frame) { 
    this(frame, GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice()); 
    } 

    public FullscreenToggleAction (JFrame frame, GraphicsDevice fullscreenDevice) { 
    this.frame = frame; 
    this.fullscreenDevice = fullscreenDevice; 
    } 

    @Override 
    public void actionPerformed(ActionEvent e) { 
    frame.dispose(); 

    if (frame.isUndecorated()) { 
     fullscreenDevice.setFullScreenWindow(null); 
     frame.setUndecorated(false); 
    } else { 
     frame.setUndecorated(true); 
     fullscreenDevice.setFullScreenWindow(frame); 
    } 

    frame.setVisible(true); 
    frame.repaint(); 
    } 
} 

,然后只需添加键绑定

public class Main { 

    public static final void addKeyBinding(JComponent c, String key, final Action action) { 
    c.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke(key), key); 
    c.getActionMap().put(key, action); 
    c.setFocusable(true); 
    } 

    public static void main(String[] args) { 
    final JFrame frame = new JFrame("Fullscreen Toggle Test"); 

    Container contentPane = frame.getContentPane(); 
    contentPane.add(new JLabel("Toogle fullscreen using F11"), BorderLayout.CENTER); 

    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    frame.setSize(600, 400); 
    frame.setVisible(true); 

    addKeyBinding(frame.getRootPane(), "F11", new FullscreenToggleAction(frame)); 
    } 
} 

你也可以让它全屏不同GraphicsDevice秒。例如。在多监视器环境中

GraphicsEnvironment localGraphicsEnvironment = GraphicsEnvironment.getLocalGraphicsEnvironment(); 
GraphicsDevice[] screenDevices = localGraphicsEnvironment.getScreenDevices(); 

addKeyBinding(frame.getRootPane(), "F11", new FullscreenToggleAction(frame, screenDevices[1])); 
+0

非常感谢!完美地工作。 – Sam

我使用以下命令:

public static final void addKeyBinding(JComponent c, String key, final Action action) { 
    c.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke(key), key); 
    c.getActionMap().put(key, action); 
    c.setFocusable(true); 
} 

例子:

public static void main(String[] args) { 
    final JFrame frame = new JFrame("Test"); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    frame.add(new JPanel()); 
    frame.setSize(600, 400); 
    frame.setVisible(true); 

    addKeyBinding(frame.getRootPane(), "F11", new AbstractAction() { 

     @Override 
     public void actionPerformed(ActionEvent e) { 
      int state = frame.getExtendedState(); 

      if (state == JFrame.MAXIMIZED_BOTH) { 
       state = JFrame.NORMAL; 
      } else { 
       state = JFrame.MAXIMIZED_BOTH; 
      } 

      frame.setExtendedState(state); 
     } 
    }); 
} 
+0

这个工程,但我希望窗口覆盖整个屏幕。例如看一部没有任何任务栏的全屏电影 – Sam