JFrame背景颜色不起作用

时间:2016-11-17 17:58:45

标签: 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);
    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(Color.YELLOW);无效?

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

2 个答案:

答案 0 :(得分:2)

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

public static void main(String[] args) throws InterruptedException {
    JFrame frame = new JFrame("Flappy bird");
    frame.setSize(1200, 800);
    //FlappyBird game = new FlappyBird();
    Canvas game = new Canvas();
    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);
    // }
}

您可以尝试两件事:

  1. 设置背景颜色不是框架内容窗格而是game
  2. //frame.getContentPane().setBackground(Color.YELLOW);
    game.setBackground(Color.YELLOW);
    
    1. 通过使后者透明,确保框架的背景颜色通过游戏实例显示:
    2. game.setOpaque(false);
      

答案 1 :(得分:0)

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

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

frame.add(game);

如果没有FlappyBird类,就不可能确切地说出造成问题的原因,但根据方法名称,我会看看repaint()。