想要改变JFrame的背景,为啥不能改变
发布网友
发布时间:2024-09-30 17:41
我来回答
共2个回答
热心网友
时间:2024-12-05 04:27
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.JTextArea;
import javax.swing.JTextField;
//类名要规范,应改为:NumGame
public class numgame extends JFrame implements ActionListener {
//JFrame jfrm=new JFrame();注释掉
JLabel label=null;
JTextField input=null;
JButton button =null;
JTextArea display=null;
public numgame(){
init();
}
public void init(){
label=new JLabel("input a num(0~9):");
input=new JTextField(6);
button =new JButton("重置");
display=new JTextArea(10,20);
JPanel inputPanel=new JPanel();
inputPanel.add(label);
inputPanel.add(input);
getContentPane().add(inputPanel,"North");
getContentPane().add(button,"South");
getContentPane().add(display,"Center");
//...这是添加上的三行...../
inputPanel.setOpaque(false);
button.setOpaque(false);
display.setOpaque(false);
//......../
display.setLineWrap(true);
display.setEditable(false);
button.addActionListener(this);
input.addActionListener(this);
//jfrm.setBackground(Color.RED);改为:
getContentPane().setBackground(Color.RED);
setSize(400,300);
setVisible(true);
}
public void reset(){
input.setText("");
display.setText("");
getContentPane().setBackground(Color.RED);
}
private static numgame thisObj = null;
public static numgame getInstance(){
if(thisObj==null){
thisObj = new numgame();
}
return thisObj;
}
public void actionPerformed(ActionEvent e) {
double rannum,N=10;//随机数
int num;
rannum=N*Math.random();
rannum=(int)rannum;
if(e.getSource()==input)
{
num=Integer.parseInt(input.getText());
System.out.println(rannum);
if(num>rannum)
{
display.append("Too Large!\n");
//你看到的所有当前组件都是加在当前窗体上的,要这个jframe何用?删掉得了
//给这个看不到的窗体改变背景颜色有意义吗?木有啊!
//jfrm.getContentPane().setBackground(Color.RED);改为:
getContentPane().setBackground(Color.RED);
input.setText("");
System.out.println("here2");
}
if(num==rannum)
{
display.append("Right,Good!\n");
//jfrm.getContentPane().setBackground(Color.WHITE);改为:
getContentPane().setBackground(Color.WHITE);
input.setText("");
}
if(num<rannum)
{
display.append("Too Small!\n");
//jfrm.getContentPane().setBackground(Color.BLUE);改为:
getContentPane().setBackground(Color.BLUE);
input.setText("");
}
}
else
{
//input.setText("");
//display.append("");
//new numgame();// 这样是不对的,一来,不该产生新的实例,浪费空间,而且达不到目的
this.reset();
System.out.println("here");
}
}
public static void main(String args[]){
getInstance();
}
}
热心网友
时间:2024-12-05 04:27
先把if(e.getSource()==input)
改成if(e.getSource()==botton)
===============================================
jfrm.setBackground(Color.RED);
jfrm.getContentPane().setBackground(Color.BLUE);
都改成
inputPanel.setBackground(Color.XXX);
===============================================
JPanel inputPanel;//声明放在构造方法外面,
inputPanel = new JPanel();//实例化放在构造方法里面
===============================================
如果要JTextArea的背景色,一样可以设置
display.setBackground(Color.RED);追问你把if(e.getSource()==input)
改成if(e.getSource()==botton)
这个不对的,我要监听的是输入的值,对输入的值进行处理,对于button的监听是在else里进行的,改了就无法进行了。你这样修改时一个面板一个面板的进行修改,有没有整体的方法进行修改颜色啊?直接对这个JFame修改?
追答再怎么修改外部,容器内部的东西也会覆盖外部的颜色。
另外 你说要监听输入的值是什么意思呢?每输入一个字母就执行监听方法?