我的程序是在面板中添加2个按钮,当单击相应的按钮时,改变背景颜色,我想用ColorAction这个类实现监听但是总是提示,没有为类型 ColorAction 定义方法 setBackground(Color),不过我用内部类实现了,请高手指教!
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class FrameTest {
/**
* @param args
*/
public static void main(String[] args) {
// TODO 自动生成方法存根
boolean t=true;
Frame frame=new Frame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(t);
}
}
class Frame extends JFrame
{
public Frame()
{
setTitle("FrameTest");
setSize(W,H);
FramePanel panel=new FramePanel();
add(panel);
}
private static final long serialVersionUID=20070609;
public static final int W=300;
public static final int H=200;
}
class FramePanel extends JPanel
{
public FramePanel()
{
JButton yellow=new JButton("yellow");
JButton green=new JButton("green");
add(yellow);
add(green);
ColorAction yellowAction=new ColorAction(Color.YELLOW);
ColorAction greenAction=new ColorAction(Color.GREEN);
yellow.addActionListener(yellowAction);
green.addActionListener(greenAction);
}
private static final long serialVersionUID=20070609;
}
class ColorAction implements ActionListener
{
public ColorAction(Color c)
{
backgroundColor=c;
}
public void actionPerformed(ActionEvent event)
{
setBackground(backgroundColor); //没有为类型 ColorAction 定义方法 setBackground(Color)
}
private Color backgroundColor;
}
----------------解决方案--------------------------------------------------------
setBackground(backgroundColor)这个方法你没有定义. 你说你定义了,定义在哪里啊?
----------------解决方案--------------------------------------------------------
把class ColorAction implements ActionListener定义为class FramePanel extends JPanel的内部类。
----------------解决方案--------------------------------------------------------
楼上的正解。
----------------解决方案--------------------------------------------------------
为什么把class ColorAction implements ActionListener定义为class FramePanel extends JPanel的内部类就行呢,我知道那样可以的,但是我不知道为什么可以。
请您讲明白些!谢谢!
----------------解决方案--------------------------------------------------------
因为JPanel类里面有这个方法。
----------------解决方案--------------------------------------------------------
您的意思是这个方法产生了二异性吧?
----------------解决方案--------------------------------------------------------
没有啊。如果照你这样写的话,肯定会报错啊,因为你的ColorAction类里面没有定义setBackground()方法,那你这样调用它肯定会报错的啊。但是如果你把它放到class FramePanel extends JPanel里面去作为它的内部类的话,就可以使用JPanel里面的setBackground()方法了。
----------------解决方案--------------------------------------------------------
哦,知道了,非常谢谢!
----------------解决方案--------------------------------------------------------
楼主的编码风格不好
你怎么能声明一个Frame类呢?
自己写代码的时候,最好不好命名和系统类库相同的类
----------------解决方案--------------------------------------------------------