Java 为什么JMenuItem上的Actionlistener没有执行?
我一直在做一个家庭作业,我遇到了一个相当奇怪的问题,我试图让2个JMenuItems在我单击它们时调用方法,但由于某些原因,附加的actionListeners无法工作 我在actionListeners中添加了System.out.println,因为我认为方法调用的行为很有趣,但代码也不会执行 我通过堆栈溢出检查了其他操作侦听器的类似问题,我认为我正确地完成了侦听器部分 这是我第一次用这样的方式编写代码,所以我认为这与此有关 我哪里会出错 完整代码Java 为什么JMenuItem上的Actionlistener没有执行?,java,swing,events,Java,Swing,Events,我一直在做一个家庭作业,我遇到了一个相当奇怪的问题,我试图让2个JMenuItems在我单击它们时调用方法,但由于某些原因,附加的actionListeners无法工作 我在actionListeners中添加了System.out.println,因为我认为方法调用的行为很有趣,但代码也不会执行 我通过堆栈溢出检查了其他操作侦听器的类似问题,我认为我正确地完成了侦听器部分 这是我第一次用这样的方式编写代码,所以我认为这与此有关 我哪里会出错 完整代码 您正在隐藏JMenuItem变量,以便您的
您正在隐藏JMenuItem变量,以便您的类有2个超出其需要的额外JMenuItem对象。两个添加到菜单中,两个不添加的类字段。在actionPerformed中,检查与类字段是否相等
class Test100 extends JFrame implements ActionListener {
//...
public static JMenuItem fontApp, imageApp = new JMenuItem(); // fields -- never added to GUI
//....
//Method - menuBuilder - A method to build JMenus
public void menuBuilder()
{
// ....
// *** re-declaring the variables here!! *** these are different variables and hold
// different objects
JMenuItem fontApp = new JMenuItem( "Font App" );
apps.add ( fontApp ); //Add Menu items to our JMenu
//Add JMenu Item
JMenuItem imageApp = new JMenuItem( "Image App" );
apps.add ( imageApp ); //Add Menu items to our JMenu
// ......
}
解决方案:不要隐藏或重新声明变量
更改此项:
JMenuItem fontApp = new JMenuItem( "Font App" );
// ...
JMenuItem imageApp = new JMenuItem( "Image App" );
//...
为此:
fontApp = new JMenuItem( "Font App" );
//...
imageApp = new JMenuItem( "Image App" );
//...
注意到区别了吗?这就是为什么我会出现堆栈溢出,即使我经常因为成为一个noob而被否决:O这非常有效@Ninja2k:我很高兴它能工作,但更重要的是,您现在明白为什么您的原始代码不能工作了吗?你需要理解概念以避免再次这样做。是的,我基本上创建了两个对象,一个是全局对象,一个是局部对象,然后引用局部空白对象。
fontApp = new JMenuItem( "Font App" );
//...
imageApp = new JMenuItem( "Image App" );
//...