当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]));
答
我使用以下命令:
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
非常感谢!完美地工作。 – Sam