gpt4 book ai didi

java - 如何将 JFrame 从装饰状态切换为不装饰状态?

转载 作者:行者123 更新时间:2023-12-01 09:39:48 24 4
gpt4 key购买 nike

我希望我正在制作的游戏能够全屏显示。我在 JPanel 中绘制游戏并将其添加到 JFrame 中。

我目前正在使用 graphicsDevice.setFullScreenWindow(jframe) 将 JFrame 设置为全屏。

JFrame 已装饰。当我将其设置为全屏时,有剩余空间用于装饰,但我希望它占据整个屏幕。当我将 JFrame 未修饰时,它在全屏时占据整个屏幕。

我希望 JFrame 在窗口模式下被装饰,但在全屏模式下,我希望屏幕被完全使用。

我尝试将 JFrame 设置为不可见,然后更 retrofit 饰并将其设置回可见。我还尝试过将原始设置为有装饰,制作一个没有装饰的新 JFrame,并添加了 JPanel 全屏。

最佳答案

我不确定,但我认为您无法更改 setUndecorated() JFrame之后的属性(property)已变得可见。因此,一种解决方案是拥有两个框架。一种是窗口式的,一种是全屏式的。当您想要切换全屏时,在帧之间交换。

既然你正在把东西画到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%。

关于java - 如何将 JFrame 从装饰状态切换为不装饰状态?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38548893/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com