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 让窗口进出全屏?
我通读了其他问题并尝试使用window.setUndecorated(true);
,但它似乎没有做任何事情......
答案 0 :(得分:3)
要使JFrame
真正全屏,您必须将其设置为未修饰。但要将它设置为未修饰,你必须首先处理它。 E.g。
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]));
答案 1 :(得分:2)
我使用以下内容:
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);
}
});
}