lisliefor
发贴: 287
积分: 7
|
于 2006-05-24 20:41
首先自我反省一下! 上面的回答有两个问题: 1. 首先,new MyListener()的位置,与该class的位置无关。我开始复制你的代码,调试的时候,“MyListener s = new MyListener();”报错的原因,可能在于我使用的工具是Eclipes,它一个缺陷是,如果机器性能不够,那么程序保存后,刷新率不够快,原本正确的代码,会报一些莫名的错误,而从新敲一遍(或粘贴)就没有问题。 2. 内隐类与两个类之间组合的优势就在于,使用外部类对象的时候,避免了类传值的问题。( 上面刚好说反了!)
后来我从写了一遍,运行而且没有错误。 package help;
import java.awt.*; import java.awt.event.*;
import javax.swing.*;
public class MenuTest extends JFrame{ Frame fr; MenuItem newf; MenuItem itmm; public MenuTest(){ fr=this; MenuBar mb=new MenuBar(); setMenuBar(mb); Menu file=new Menu("文件"); itmm=new MenuItem("退出"); file.add(new MenuItem("新建")); file.add(new MenuItem("打开")); file.add(new MenuItem("关闭")); file.add(new MenuItem("-")); file.add(itmm); itmm.addActionListener(new MyListener()); mb.add(file); this.setSize(300,200); this.setVisible(true); } public static void main(String[] args) { new MenuTest(); } class MyListener implements ActionListener{ public void actionPerformed(ActionEvent e){ if(e.getSource()==itmm){ System.exit(0); } } } }
你上面代码无法实现的原因可能就在于:e.getSource()使用上,还有就是,加载在Frame上的组件,最好在构造函数外面声明,在里面初始化!(后面函数可能用到)。 误导你了,不好意思啊!呵呵,我水平也很菜啊! 一起学习..... :)
|