我想要一个全屏制作的游戏。我将游戏绘制在JPanel中并添加到JFrame中。
我目前正在使用graphicsDevice.setFullScreenWindow(jframe)
将JFrame设置为全屏。
JFrame已经过装饰。当我全屏设置时,还有空间用于装饰,但我希望它占据整个屏幕。当我将JFrame作为未修饰时,它会在全屏时占据整个屏幕。
我希望在窗口模式下装饰JFrame,但在全屏模式下,我希望完全使用屏幕。
我尝试将JFrame设置为不可见,然后更改装饰并将其设置回可见。我也尝试过将原版设置为装饰,制作一个没有装饰的全新JFrame,并添加JPanel全屏。
答案 0 :(得分:1)
我不确定,但我认为在setUndecorated()
可见后您无法更改JFrame
属性。结果,一种解决方案是具有两个帧。一个窗口,一个全屏。当您想要全屏切换时,在帧之间切换。
由于您要将内容绘制到JPanel
,因此解决方案是创建一个draw()
方法,其中绘图将会发生。如果您希望添加Swing组件,事情会变得复杂一些。无论如何,试试这个。
<强>代码:强>
import java.awt.Color;
import java.awt.Graphics;
import java.awt.GraphicsEnvironment;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class FullScreenExample {
public static void main(String[] args) throws InterruptedException {
new FullScreenExample();
}
public FullScreenExample() throws InterruptedException {
// Full screen frame set-up.
JFrame frameFullScr = new JFrame();
frameFullScr.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frameFullScr.setUndecorated(true);
frameFullScr.add(new JPanel() {
@Override
public void paintComponent(Graphics g) {
if(frameFullScr.isVisible()) draw(this, g);
}
});
GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice().setFullScreenWindow(frameFullScr);
// Windowed frame set-up.
JFrame frameWin = new JFrame();
frameWin.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frameWin.setSize(512, 512);
frameWin.add(new JPanel() {
@Override
public void paintComponent(Graphics g) {
if(frameWin.isVisible()) draw(this, g);
}
});
Thread.sleep(5000);
// Now let's go into a window...
frameFullScr.setVisible(false);
frameWin.setVisible(true);
}
private void draw(JComponent component, Graphics g) {
g.setColor(Color.ORANGE);
g.fillRect(0, 0, component.getWidth(), component.getHeight());
g.setColor(Color.RED);
g.drawOval(32, 32, 256, 256);
}
}
只是一些不相关的建议:如果遇到性能问题,请尝试查看AWT的BufferStrategy
。它更加优化,更好地被显卡加速。帧速率可以提高+ 25%到75%。