2016-11-17 103 views
0

我的代码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);工作?

我试图重新排列顺序,像制作框架可见后设置的颜色。

+0

我投票,因为这个问题是为什么Java核心的组成部分在它的方式被实现,而不是一些其他的方式来关闭这一问题作为题外话。这是个什么 – ControlAltDel

+0

@ControlAltDel我不同意,原因是不同的。请检查我的答案。 – Thomas

+0

@Thomas我站在更正:) – ControlAltDel

回答

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
//frame.getContentPane().setBackground(Color.YELLOW); 
game.setBackground(Color.YELLOW); 
  • 通过游戏确保该帧的背景色显示我nstance通过使后者透明:
  • game.setOpaque(false); 
    
    +0

    奥基,但我该如何解决? –

    +0

    当我坐在游戏,而不是它的工作框架的背景!谢谢! –

    +0

    @ W.Emanuel真棒!很高兴我能帮上忙... – Thomas

    0

    删除对游戏相关的线条,我能够与预期结果黄运行此。这个问题必须在while循环中

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

    frame.add(game); 
    

    没有FlappyBird类,这是不可能说究竟是什么原因造成的问题,但基于该方法的名字我想看看重绘()。