Java 即使已添加getcontentpane,JFrame的颜色也不起作用

Java 即使已添加getcontentpane,JFrame的颜色也不起作用,java,swing,jframe,jpanel,Java,Swing,Jframe,Jpanel,我对Java还很陌生。这是我的课堂作业。除了JFrame颜色不显示外,我完成了所有工作。我看了所有其他类似的问题。他们中的大多数人说使用getContentPane()。问题是我已经添加了,但是没有显示出来。下面是我的代码。我把它分成两部分。第二部分包含所有这些JFrame.getContentPane().setBackground(color.**)代码。多谢各位 import java.awt.BorderLayout; import java.awt.Color; import java

我对Java还很陌生。这是我的课堂作业。除了JFrame颜色不显示外,我完成了所有工作。我看了所有其他类似的问题。他们中的大多数人说使用getContentPane()。问题是我已经添加了,但是没有显示出来。下面是我的代码。我把它分成两部分。第二部分包含所有这些JFrame.getContentPane().setBackground(color.**)代码。多谢各位

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;


import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;



public class NumberGame extends JFrame  {

private JPanel Content;
private JFrame  DisplayFrame;
private JTextField Input;
private JLabel DisplayText, Message;
private int Guess;
private JButton button;
private JButton NewGame;
private int Number;
private int Lowest = 0;
private int Highest = 0;






  public  void NumberGame  () {
     Content = new JPanel ();
    DisplayFrame = new JFrame ("Welcome");
    DisplayFrame.setSize(700, 400);
    DisplayFrame.setLayout (new BorderLayout());

     DisplayText = new JLabel ("I have a number between 1 and 1000. Can you guess my number?    
 Enter your first guess.");





     Input = new JTextField (20);

     Content.add(Input);
     Message = new JLabel ("");

      button = new JButton ("Submit");
      button.addActionListener (new GuessHandler()); 





      NewGame = new JButton ("New Game");   
      NewGame.addActionListener (new ActionListener () {
          public void actionPerformed (ActionEvent ae) {
              Input.setText("");
              Message.setText("");
              repaint();
          }
        } );




    DisplayFrame.add(Content);
    Content.add(DisplayText);
    Content.add(Input);
    Content.add(button);
    Content.add(NewGame);
    Content.add(Message);


    theGame();
    DisplayFrame.setVisible(true);
    }

   public void theGame () {
       Number = (int) (Math.random() * 1000 +1);
   }








   public static void main(String[] args) {


    NumberGame a = new NumberGame ();
    a.NumberGame();



    }
下面是我有问题的代码的其余部分

class GuessHandler implements ActionListener {
   @Override
   public void actionPerformed (ActionEvent ae) {

       Guess = Integer.parseInt(Input.getText());

       if(Guess>Number) {
           Message.setText("Too high!");

           if (Guess < Lowest) {
               Lowest = Guess;
               DisplayFrame.getContentPane().setBackground(Color.red);

           }

           else
               DisplayFrame.getContentPane().setBackground(Color.blue);
       }

       else if (Guess < Number) {
           Message.setText("Too Low!");

           if (Guess > Highest) {
               Highest = Guess;
               DisplayFrame.getContentPane().setBackground(Color.red);
           }
           else
               DisplayFrame.getContentPane().setBackground(Color.blue);
       }

       else {
           Message.setText("Correct!");
           Input.setEditable(false);
           Lowest = 0;
           Highest = 1000;
       }
           repaint ();


       }


   }

}
类GuessHandler实现ActionListener{
@凌驾
已执行的公共无效行动(行动事件ae){
Guess=Integer.parseInt(Input.getText());
如果(猜测>数字){
Message.setText(“太高了!”);
如果(猜测<最低){
最低=猜测;
DisplayFrame.getContentPane().setBackground(颜色为.red);
}
其他的
DisplayFrame.getContentPane().setBackground(颜色为.blue);
}
else if(猜测<数字){
Message.setText(“太低了!”);
如果(猜测>最高){
最高=猜测;
DisplayFrame.getContentPane().setBackground(颜色为.red);
}
其他的
DisplayFrame.getContentPane().setBackground(颜色为.blue);
}
否则{
Message.setText(“正确!”);
Input.setEditable(假);
最低=0;
最高=1000;
}
重新油漆();
}
}
}

Content
是一个
JPanel
,因为
JFrame
使用
BorderLayout
,面板
Content
将占据整个可用空间,覆盖框架自己的内容窗格(不要混淆两者,两者不同)

试着改变

DisplayFrame.add(Content);


您可能希望通读,这将使人们更容易阅读您的代码,您也更容易阅读其他人的代码

请养成在变量名开头使用小写字母的习惯。三年后,你未来的自己会感谢你的。我一定会开始这样做。谢谢,成功了。但是一旦它改变了颜色,即使我按下NewGame按钮,它也不会再改变颜色。它仍然保持不变。重新绘制不应该这样做吗?当然,
repaint
repaint
组件的当前状态,但您没有更改它…尝试将背景色设置为
null
(这是一个巧妙的技巧,但这会强制组件重置为默认背景色)
DisplayFrame.setContentPane(Content);