写一AWT程序,在Frame中加入3个按钮(红色、绿色、蓝色)单击3个按钮,窗口的背景色发生相应改变。

importjavax.swing.*;importjava.awt.Color;importjava.awt.event.*;publicclassColorListe... import javax.swing.*;
import java.awt.Color;
import java.awt.event.*;
public class ColorListener implements ActionListener{
JButton a;
JButton b;
JButton c;
JPanel p;
public void getColor(JButton a,JButton b,JButton c,JPanel p){
this.a=a;
this.b=b;
this.c=c;
this.p=p;
}
public void actionPerformed(ActionEvent e) {
if(a==(JButton)e.getSource())
p.setBackground(Color.red);
else if(b==(JButton)e.getSource())
p.setBackground(Color.blue);
else
p.setBackground(Color.green);
}
}
import java.awt.*;
import javax.swing.*;
public class WindouwColor extends JFrame{
JButton a;
JButton b;
JButton c;
JPanel p;
ColorListener l;
WindouwColor(){
init();
setVisible(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
void init(){
setLayout(new FlowLayout());
a=new JButton("红色");
b=new JButton("蓝色");
c=new JButton("绿色");
p=new JPanel();
p.setBounds(0,0,460,360);
l.getColor(a, b, c, p);
p.add(a);
p.add(b);
p.add(c);
a.addActionListener(l);
b.addActionListener(l);
c.addActionListener(l);

}
}
public class MainClass2 {
public static void main(String[] args) {
WindouwColor win=new WindouwColor();
win.setBounds(100,100,460,360);
win.setTitle("改变窗口颜色");
}
}

求大神指教 错误在哪里 运行不了
展开
 我来答
xjf5562
2015-06-14 · TA获得超过1190个赞
知道小有建树答主
回答量:896
采纳率:75%
帮助的人:738万
展开全部
首先,ColorListener的getColor方法取消,把这个方法所有语句移氏历到构造方法中。
其次,WindouwColor中,a,b,c,p直者核世接在定义时赋值。
再有,init()方法再稍作修改:
import java.awt.*;
import javax.swing.*;
public class WindouwColor extends JFrame{
JButton a=new JButton("红色");
JButton b=new JButton("蓝色");
JButton c=new JButton("绿色");
JPanel p=new JPanel();
ColorListener l=new ColorListener(a,b,c,p);
WindouwColor(){
init();
setVisible(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
void init(){
/首肢/ setLayout(new FlowLayout());
p.setBounds(0,0,460,360);
p.setLayout(new FlowLayout());

p.add(a);
p.add(b);
p.add(c);
a.addActionListener(l);
b.addActionListener(l);
c.addActionListener(l);
add(p,BorderLayout.CENTER);
}
}

import javax.swing.*;
import java.awt.Color;
import java.awt.event.*;
public class ColorListener implements ActionListener{
JButton a;
JButton b;
JButton c;
JPanel p;
public ColorListener(JButton a,JButton b,JButton c,JPanel p){
this.a=a;
this.b=b;
this.c=c;
this.p=p;
}
public void actionPerformed(ActionEvent e) {
if(a==(JButton)e.getSource())
p.setBackground(Color.red);
else if(b==(JButton)e.getSource())
p.setBackground(Color.blue);
else
p.setBackground(Color.green);
}
}

public class MainClass2 {
public static void main(String[] args) {
WindouwColor win=new WindouwColor();
win.setBounds(100,100,460,360);
win.setTitle("改变窗口颜色");
}
}
追问
嗯嗯  大神你这样写可以运行了  可是我想知道我的错误在哪里0 0
追答
你在ColorListener类中,定义了a,b,c,p四个变量,没有赋值,而是用getColor()方法来赋值,为了避免空指针异常,需要用构造方法来在对象生成之时立即赋值。此外,在WindouwColor这个类中,你定义了 ColorListener l;   ,也没有赋值,在init()方法中,用l.setColor()时引发了空指针异常。还是在这个init()方法中,没有为p设置布局管理器,所以p上的所有组件(a,b,c)不能显示,也没有在窗体中加入p,所以p也不显示。

嗯,基本上就是这些失误,其它还有一些就是细节上的问题。
注意一点,在定义变量时,尽可能地在定义时就赋值。这样可以最大可能地避免出现“运行时异常”而强迫程序中止。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式