java - 在 JFrame 窗口上临时显示 JPanel

标签 java swing graphics jframe jpanel

我正在开发一个基于主 JFrame 的图形棋盘游戏程序。游戏板本身源自 JPanel。

我希望当有人获胜时能够在整个窗口上显示“胜利屏幕”。我想我可以从一开始就成功显示的“欢迎屏幕”来扩展这个想法。当此代码运行时,欢迎屏幕出现,持续 2 秒钟,然后消失,游戏板出现并准备玩。希望这些基本部分能够提供有关我如何设置它的足够信息:

public class MyGame{     
  public static Board b;                //Board extends JPanel
  public static Window gameWindow;      //Window extends JFrame
  ...
  public static void main(String args[]) throws IOException{
    ...
    gameWindow = new Window("My Game"); 
    //DisplayScreen extends JPanel
    DisplayScreen intro = new DisplayScreen("welcomeScreen.png"); 
    gameWindow.setSize(960, 570); 
    gameWindow.add(intro); 
    gameWindow.setVisible(true); 
    wait(2); //just a function I wrote 
    ...
    b = new Board("board.png"); 
    ... 
    gameWindow.remove(intro);  
    gameWindow.add(b); 
    gameWindow.repaint(); 
    gameWindow.setVisible(true); 
    ...
  }
  ... 
}

诚然,我们需要进行大量的试验和错误才能使其发挥作用。然而,就我的一生而言,我无法弄清楚如何在游戏后期的某个时刻暂时显示胜利屏幕。我认为我可以通过中心 MyGame 类中的函数来完成此操作(我已在 Window 类和其他地方尝试过,但没有成功)。像这样的东西:

public static void VictoryScreen(){
    DisplayScreen victoryScreen = new DisplayScreen("victoryScreen.jpg");   
    victoryScreen.setVisible(true); 
    gameWindow.add(victoryScreen); 
}

不幸的是,这没有显示任何内容。我尝试了 addsetVisiblevalidate 等各种方式,并查看了其他一些问题,但似乎没有任何效果。我还尝试在初始欢迎屏幕旁边声明 victoryScreen 并将其设置为不可见(然后在我想要显示它时将其设置为可见),但这只是在所有内容上放置了一个灰色面板非常开始。似乎当某些东西被构造时,它就会自动绘制。将主板作为另一个 JPanel 层似乎相当冒险,但我对 JSwing 知之甚少。

无论如何,我都被难住了。关于使胜利屏幕(以及最终其他屏幕)按需要显示的程序有什么建议吗?

*编辑:这是我覆盖屏幕显示类的 paintComponent 的方式:

public void paintComponent(Graphics g){ 

              //works fine for welcome screen
      g.drawImage(screenImage, 0, 0, 960, 540, null); 
      repaint(); 
}

最佳答案

一种方法是通过 CardLayout 和多个 JPanel。

另一种方法是设计一个状态机,其中程序状态在一个面板中发生变化。

老实说,在当前的 java 状态下,这是一个非常困难的问题,出于演示目的,请坚持第一个问题。就我个人而言,我更喜欢第二种选择。

这两种方法都令人沮丧且无效,因为 CardLayout 不是为游戏屏幕变化而设计的,而制作一个严重依赖全局状态的程序确实很难推理......

关于java - 在 JFrame 窗口上临时显示 JPanel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15754828/

相关文章:

java - 如何将增量发票编号放入DatabaseReference

java - Android Studio 在 Windows 7 64 位上运行失败

java - 从共享点列表java中获取所有列名

java - JOptionPane 无限循环

java - 在 netbeans 中构建后,Jar 文件无法正常运行

android - Android与图形设计师合作

.net - 在平面上画线的算法

java - 在现有 Excel 文件中创建新单元并从输出中导出数据 - Selenium_TestNG_JAVA

design-patterns - 有必要学习设计模式吗?

java - 如何在 Java 桌面应用程序中使用 Windows 7 跳转列表?