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