为啥我的 Action 事件没有被触发?

Posted

技术标签:

【中文标题】为啥我的 Action 事件没有被触发?【英文标题】:why does my Action event is not being triggered?为什么我的 Action 事件没有被触发? 【发布时间】:2021-01-18 23:06:07 【问题描述】:

我正在尝试构建一个简单的记事本。但由于某种原因,我的操作事件在单击 New 菜单项后没有被触发。当用户点击 New 菜单项时,下面给出的代码应该调用 newFile() 方法。

public class MainUi implements ActionListener
    
    //all the variables
    public JFrame window;
    public JTextArea textArea;
    public JScrollPane scrollPane;
    public JMenuBar menuBar;
    public JMenu menuFile, menuEdit, menuFormat;
    public JMenuItem fNew, fOpen, fSave, fSaveAs, fExit;
    
    //creating instance of all the functional class
    File_functions file = new File_functions(this);
    
    //Constructor to build the ui
    public MainUi() 
        createWindow();
        createMenuBar();
        addFileMenu();
        createTextArea();
        
        window.setVisible(true);
    
    
    public static void main(String[] args) 
        new MainUi();
    
    //menu bar
        public void createMenuBar() 
            menuBar = new JMenuBar();
            window.setJMenuBar(menuBar);
            
            //add file to the menu
            menuFile = new JMenu("File");
            menuBar.add(menuFile);
        
        
        //all the file menu
        public void addFileMenu() 
            fNew = new JMenuItem("New");
            menuFile.add(fNew);
            menuFile.addActionListener(this);
            menuFile.setActionCommand("New");
        

@Override
    public void actionPerformed(ActionEvent e) 
        // TODO Auto-generated method stub
        String command = e.getActionCommand();
        System.out.print(command);
        switch (command) 
            case "New": file.newFile();  break;
        
    

在控制台中也没有在另一个类中显示错误(File_function)

【问题讨论】:

【参考方案1】:
        fNew = new JMenuItem("New");
        menuFile.add(fNew);
        menuFile.addActionListener(this);

ActionListener 需要添加到 JMenuItem:

        fNew = new JMenuItem("New");
        menuFile.add(fNew);
        //menuFile.addActionListener(this);
        fNew.addActionListener(this);

注意,不需要设置动作命令。它将默认为菜单项的文本。

【讨论】:

以上是关于为啥我的 Action 事件没有被触发?的主要内容,如果未能解决你的问题,请参考以下文章

android listview上下滑动时为啥不触发点击事件

为啥我的动作脚本事件没有触发?

android listview上下滑动时为啥不触发点击事件

为啥小弟我的canvas的鼠标事件不会触发

为啥我的验证事件没有在 C# 中触发?

为啥我的事件监听器没有在 laravel 5 中触发?