Java JFrame背景色不工作

Java JFrame背景色不工作,java,swing,colors,jframe,Java,Swing,Colors,Jframe,我的代码 public static void main(String[] args) throws InterruptedException { JFrame frame = new JFrame("Flappy bird"); frame.setSize(1200, 800); FlappyBird game = new FlappyBird(); frame.getContentPane().setBackground(Color.YELLOW);

我的代码

public static void main(String[] args) throws InterruptedException {
    JFrame frame = new JFrame("Flappy bird");
    frame.setSize(1200, 800);
    FlappyBird game = new FlappyBird();
    frame.getContentPane().setBackground(Color.YELLOW);
    frame.add(game);
    frame.setVisible(true);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  
    frame.setResizable(false);
    while (true) {
            game.moveBall();
            game.gameOver();
            game.moveRect();
            game.repaint();
            Thread.sleep(14);
        }

}
为什么
frame.getContentPane().setBackground(颜色为.YELLOW)不存在工作


我尝试重新排列顺序,比如在使框架可见后设置颜色。

它可以正常工作,但您看不到背景色,因为您的
FlappyBird
实例绘制在它上面。通过将游戏类替换为空画布,您可以轻松验证这一点,如下所示:

publicstaticvoidmain(String[]args)抛出InterruptedException{
JFrame=新的JFrame(“Flappy bird”);
框架设置尺寸(1200800);
//FlappyBird游戏=新的FlappyBird();
画布游戏=新画布();
frame.getContentPane().setBackground(颜色:黄色);
frame.add(游戏);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setresizeable(false);
//while(true){
//游戏。移动球();
//game.gameOver();
//game.moveRect();
//游戏。重绘();
//睡眠(14);
// }
}
有两件事你可以尝试:

  • 不设置框架内容窗格的背景色,而是设置
    游戏的背景色
  • //frame.getContentPane().setBackground(颜色.黄色);
    游戏。挫折背景(颜色。黄色);
    
  • 通过使游戏实例透明,确保框架的背景色显示在整个游戏实例中:
  • game.set不透明(false);
    
    它工作正常,但您无法看到背景色,因为您的
    FlappyBird
    实例绘制在它的顶部。通过将游戏类替换为空画布,您可以轻松验证这一点,如下所示:

    publicstaticvoidmain(String[]args)抛出InterruptedException{
    JFrame=新的JFrame(“Flappy bird”);
    框架设置尺寸(1200800);
    //FlappyBird游戏=新的FlappyBird();
    画布游戏=新画布();
    frame.getContentPane().setBackground(颜色:黄色);
    frame.add(游戏);
    frame.setVisible(true);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setresizeable(false);
    //while(true){
    //游戏。移动球();
    //game.gameOver();
    //game.moveRect();
    //游戏。重绘();
    //睡眠(14);
    // }
    }
    
    有两件事你可以尝试:

  • 不设置框架内容窗格的背景色,而是设置
    游戏的背景色
  • //frame.getContentPane().setBackground(颜色.黄色);
    游戏。挫折背景(颜色。黄色);
    
  • 通过使游戏实例透明,确保框架的背景色显示在整个游戏实例中:
  • game.set不透明(false);
    
    删除与游戏相关的行,我能够以预期的黄色结果运行此程序。问题必须在while循环中

    while (true) {
            game.moveBall();
            game.gameOver();
            game.moveRect();
            game.repaint();
            Thread.sleep(14);
        }
    


    如果没有FlappyBird类,就不可能确切地说出是什么导致了问题,但基于我将查看repaint()的方法名称。

    删除与游戏相关的行,我能够以预期的黄色结果运行此操作。问题必须在while循环中

    while (true) {
            game.moveBall();
            game.gameOver();
            game.moveRect();
            game.repaint();
            Thread.sleep(14);
        }
    


    如果没有FlappyBird类,就不可能确切地说是什么导致了问题,但是基于方法名,我将查看repaint()。

    我投票将这个问题作为离题题来结束,因为问题是为什么核心java的一个组件是以原来的方式实现的,而不是以其他方式实现的。它是什么is@ControlAltDel我不同意,原因不同。请检查我下面的答案。@Thomas我站着更正:)@ControlAltDel别担心;-)我投票结束这个问题,因为这个问题是关于为什么核心java的一个组件是以它原来的方式实现的,而不是其他方式。它是什么is@ControlAltDel我不同意,原因不同。请检查我下面的答案。@Thomas我站着更正:)@ControlAltDel别担心;-)