请大家帮我把这个程序用另一种方式改写一下: 就是我想直接在public class MyButtonFrame extends Frame后接入implements ActionListener,改写后程序依然如改写前一样运行,请帮我改写一下,谢谢! import java.awt.*; import java.awt.event.*;
public class MyButtonFrame extends Frame { MyButtonPanel panel=new MyButtonPanel(); public MyButtonFrame(String s) { setTitle(s); add(panel); }
public static void main(String[] args) { MyButtonFrame frm=new MyButtonFrame("测试按钮事件"); frm.setSize(500,300); frm.setVisible(true); } }
class MyButtonPanel extends Panel { public MyButtonPanel() { Button b=new Button("蓝色"); Button g=new Button("绿色"); Button e=new Button("退出"); add(b); add(g); add(e);
MyListenerAction bAction=new MyListenerAction(Color.blue); MyListenerAction gAction=new MyListenerAction(Color.green); MyListenerAction eAction=new MyListenerAction(Color.red);
b.addActionListener(bAction); g.addActionListener(gAction); e.addActionListener(eAction); } private class MyListenerAction implements ActionListener { private Color bgColor;
public MyListenerAction(Color c) { bgColor=c; }
public void actionPerformed(ActionEvent event) { setBackground(bgColor); repaint(); if(event.getActionCommand()=="退出") System.exit(0); } } }
----------------解决方案--------------------------------------------------------
去掉private class MylistenerAction的东西,留下
public void actionPerformed(ActionEvent event)
{
setBackground(bgColor);
repaint();
if(event.getActionCommand()=="退出")
System.exit(0);
}
----------------解决方案--------------------------------------------------------
在public class MyButtonFrame extends Frame后接入implements ActionListener
只要在你 MyButtonFrame的类里面实现 ActionLi接口里面的 public void actionPerformed(ActionEvent event)方法就行了
也就是 下面写的 还有button注册监听器写 只要写 b.addActionListener(this)就行了
public class MyButtonFrame extends Frame implements ActionListener
{
..........
..........
b.addActionListener(this)
public void actionPerformed(ActionEvent event)
{
.......
.......
}
}
你写得不错 至少有点mvc设计的样子的 控制和界面分开了
----------------解决方案--------------------------------------------------------
楼上两位的东东
我都试过了
可能我的理解能力有限吧
度没成功
不知道楼主试过没有呢?
----------------解决方案--------------------------------------------------------
我看过楼主的程序之后,觉得很好,自己仿写了一段 基本上没有改什么,就是小的类名等做了替换,为什么却出现编译错误??? 请各位高手帮忙指点一二…… import java.awt.*; import java.awt.event.*;
public class bframe extends Frame{ myPanel p=new myPanel(); public bframe(String s){ setTitle(s); add(p); } public static void main(String[] args){ bframe f=new bframe("cool"); f.setSize(400,600); f.setVisible(true); } }
class myPanel extends Panel{ public myPanel(){ Button a=new Button("Bule"); Button b=new Button("Yellow"); Button c=new Button("Exit"); add(a); add(b); add(c); MyListenerAction aAction=new MyListenerAction(Color.bule); MyListenerAction bAction=new MyListenerAction(Color.yellow); MyListenerAction cAction=new MyListenerAction(Color.red); a.addActionListener(aAction); b.addActionListener(bAction); c.addActionListener(cAction); } private MyListenerAction implements ActionListener{ private Color bgColor; public MyListenerAction(Color e){ bgColor=e; } public void actionPerformed(ActionEvent event){ setBackground(bgColor); repaint(); if(event.getActionCommand()=="Exit") System.exit(0); } } } 编译提示错误为: bframe.java:39: <identifier> expected private MyListenerAction implements ActionListener{ ^ bframe.java:54: ';' expected } ^ 2 errors
E:\>javac bframe.java bframe.java:39: <identifier> expected private MyListenerAction implements ActionListener{ ^ bframe.java:54: ';' expected } ^ 2 errors
[此贴子已经被作者于2005-7-28 22:42:30编辑过]
----------------解决方案--------------------------------------------------------
这个问题希望高手给予解答啊
我看了一下午了
都没看出来问题在哪啊?
当事者迷,旁观者清啊!
多谢了,跪等!
----------------解决方案--------------------------------------------------------
临睡前,把这个帖子再顶起来
希望早上起来
能有人看到,帮我解决一下这个问题!
----------------解决方案--------------------------------------------------------
喝牛奶的熊, the corrected code: package bframe; import java.awt.*; import java.awt.event.*; public class bframe extends Frame { myPanel p=new myPanel(); public bframe(String s) { setTitle(s); add(p); } public static void main(String[] args) { bframe f=new bframe("cool"); f.setSize(400,600); f.setVisible(true); } } class myPanel extends Panel { public myPanel() { Button a=new Button("Bule"); Button b=new Button("Yellow"); Button c=new Button("Exit"); add(a); add(b); add(c); MyListenerAction aAction=new MyListenerAction(Color.blue); MyListenerAction bAction=new MyListenerAction(Color.yellow); MyListenerAction cAction=new MyListenerAction(Color.red); a.addActionListener(aAction); b.addActionListener(bAction); c.addActionListener(cAction); } private class MyListenerAction implements ActionListener { private Color bgColor; public MyListenerAction(Color e) { bgColor=e; } public void actionPerformed(ActionEvent event) { setBackground(bgColor); repaint(); if(event.getActionCommand()=="Exit") System.exit(0); } } }
----------------解决方案--------------------------------------------------------
问题终于解决了……还是自己粗心大意啊! private MyListenerAction implements ActionListener 这句竟然没打class,晕! 还有个blue竟然写成了bule!…… 以后一定注意!! kai 谢谢你,可是这个程序,前面加了package bframe;以后,就可以编译,但不能执行了! 提示如下: Exception in thread "main" java.lang.NoClassDefFoundError: bframe (wrong name: b frame/bframe) 什么原因呢? -------------------------------------------------------------------------------------------------------------------------
[此贴子已经被tempnetbar于2005-7-30 8:34:40编辑过]
----------------解决方案--------------------------------------------------------
package bframe 说明 程序放在bframe 那个目录下
编译的方法: cd 到该目录前, 然后 javac bframe/bframe.java
执行的方法 java bframe/bframe
----------------解决方案--------------------------------------------------------