gpt4 book ai didi

java - JPanels、JFrames 和 Windows,天哪!

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:20:04 25 4
gpt4 key购买 nike

简单地说,我正在尝试制作一款全屏游戏。

我尝试使用以下代码:

GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
GraphicsDevice gs = ge.getDefaultScreenDevice();
if(!gs.isFullScreenSupported()) {
System.out.println("full-screen not supported");
}

Frame frame = new Frame(gs.getDefaultConfiguration());
Window win = new Window(frame);

try {
// Enter full-screen mode
gs.setFullScreenWindow(win);
win.validate();
}

这个问题是我在一个扩展 JPanel 的类中工作,虽然我有一个 Frame 类型的变量,但我在类中没有 Window 类型。

我对 JPanel 的理解是,它是某种窗口,但我无法将“this”传递给 gs.setFullScreenWindow(Window win)...我应该怎么做?

有没有使用 JPanel 调用它的简单方法或类似方法?

有没有办法从我的 JPanel 中获取 Window 类型的东西?

-

编辑:以下方法更改 JFrame 的状态并每 10 毫秒调用一次:

public void paintScreen()
{
Graphics g;
try{
g = this.getGraphics(); //get Panel's graphic context
if(g == null)
{
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setExtendedState(frame.getExtendedState()|JFrame.MAXIMIZED_BOTH);
frame.add(this);
frame.pack();
frame.setResizable(false);
frame.setTitle("Game Window");
frame.setVisible(true);
}
if((g != null) && (dbImage != null))
{
g.drawImage(dbImage, 0, 0, null);
}
Toolkit.getDefaultToolkit().sync(); //sync the display on some systems
g.dispose();
}
catch (Exception e)
{
if(blockError)
{
blockError = false;
}
else
{
System.out.println("Graphics context error: " + e);
}
}
}

我预计在 if(g==null) 语句(所有 frame.somethingOrOther()s)之后可能会有一些冗余或不必要的调用,任何清理建议将不胜感激......

另外, block 错误就是它看起来的样子。我忽略了一个错误。该错误仅发生一次,并且在设置为忽略错误的第一个实例时可以正常工作...对于任何感兴趣的人,如果有人想查看是否可以删除该 block ,我可以在此处发布其他信息,但我不担心...我可能会稍后再研究。

最佳答案

你在这个问题上有什么进展吗?如果您可以用您的预期行为和代码实际做什么来更新您的问题,这可能会有所帮助?正如已经指出的那样,JFrame 是 Window 的子类,因此如果您有 JFrame,则不需要 Window。

不管怎样,我有一个在全屏模式下运行的 Java 应用程序。虽然屏幕不像你的那样经常重新粉刷,但它会定期重新粉刷。我执行以下操作以进入全屏:

// pseudo-code; not compilable

JPanel container = new JPanel();
container.setOpaque( true ); // make sure the container will be visible

JFrame frame = new JFrame();
frame.getContentPane().add(container); // add the container to the frame
frame. ... //other initialization stuff, like default close operation, maximize, etc

if ( fullScreenModeIsSupported )
frame.setUndecorated( true ); // remove window decorations from the frame
gs.setFullScreenWindow( frame );
frame.validate();

然后每当我需要更新屏幕时,我只需将一个新的 JPanel 插入 container JPanel:

// pseudo-code; not compilable

container.removeAll(); // clean out the container
container.add( jPanelWithNewDisplay ); // add the new display components to the container
container.validate(); // update and redisplay
container.repaint();

不能说它在技术上是完美的,但对我来说效果很好。如果伪代码示例无法解决问题,我可以花一些时间整理一个可编译的示例。

关于java - JPanels、JFrames 和 Windows,天哪!,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1678026/

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