标题:使用不同的类时的问题
只看楼主
lanshetou
Rank: 1
等 级:新手上路
帖 子:65
专家分:0
注 册:2007-6-1
结帖率:0
 问题点数:0 回复次数:10 
使用不同的类时的问题

我的程序是在面板中添加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;
}

搜索更多相关主题的帖子: import awt args java public 
2007-06-09 16:24
嶄ぎ儱
Rank: 1
等 级:新手上路
帖 子:93
专家分:0
注 册:2007-4-21
得分:0 
setBackground(backgroundColor)这个方法你没有定义. 你说你定义了,定义在哪里啊?

别人不给你机会,自己去创造机会.
2007-06-09 17:44
pity1115
Rank: 1
等 级:新手上路
威 望:2
帖 子:184
专家分:0
注 册:2006-9-15
得分:0 
把class ColorAction implements ActionListener定义为class FramePanel extends JPanel的内部类。

2007-06-09 18:43
菜鸟也疯狂
Rank: 1
等 级:新手上路
帖 子:134
专家分:0
注 册:2007-3-20
得分:0 
楼上的正解。

2007-06-09 22:02
lanshetou
Rank: 1
等 级:新手上路
帖 子:65
专家分:0
注 册:2007-6-1
得分:0 
为什么把class ColorAction implements ActionListener定义为class FramePanel extends JPanel的内部类就行呢,我知道那样可以的,但是我不知道为什么可以。
请您讲明白些!谢谢!

2007-06-09 22:04
菜鸟也疯狂
Rank: 1
等 级:新手上路
帖 子:134
专家分:0
注 册:2007-3-20
得分:0 
因为JPanel类里面有这个方法。

2007-06-09 22:08
lanshetou
Rank: 1
等 级:新手上路
帖 子:65
专家分:0
注 册:2007-6-1
得分:0 
您的意思是这个方法产生了二异性吧?

2007-06-09 22:15
菜鸟也疯狂
Rank: 1
等 级:新手上路
帖 子:134
专家分:0
注 册:2007-3-20
得分:0 
没有啊。如果照你这样写的话,肯定会报错啊,因为你的ColorAction类里面没有定义setBackground()方法,那你这样调用它肯定会报错的啊。但是如果你把它放到class FramePanel extends JPanel里面去作为它的内部类的话,就可以使用JPanel里面的setBackground()方法了。

2007-06-09 22:32
lanshetou
Rank: 1
等 级:新手上路
帖 子:65
专家分:0
注 册:2007-6-1
得分:0 
哦,知道了,非常谢谢!

2007-06-09 22:33
千里冰封
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:灌水之王
等 级:版主
威 望:155
帖 子:28477
专家分:59
注 册:2006-2-26
得分:0 
楼主的编码风格不好

你怎么能声明一个Frame类呢?

自己写代码的时候,最好不好命名和系统类库相同的类

可惜不是你,陪我到最后
2007-06-11 09:11



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-146161-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.225601 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved