We disabled undo and redo function from edit menu.
public class UndoMenuListener implements MenuListener {
    private View view;
    private JMenuItem undoMenuItem;
    private JMenuItem redoMenuItem;

    public UndoMenuListener(View view, JMenuItem undoMenuItem, JMenuItem redoMenuItem) {
        this.view = view;
        this.undoMenuItem = undoMenuItem;
        this.redoMenuItem = redoMenuItem;
    }

    @Override
    public void menuSelected(MenuEvent e) {
        undoMenuItem.setEnabled(view.canUndo());
        redoMenuItem.setEnabled(view.canRedo());
    }
But I don't get it why it work? In class UndoAction is only:
public class UndoAction extends AbstractAction {
    private View view;

    @Override
    public void actionPerformed(ActionEvent e) {

    }

    public UndoAction(View view) {
        this.view = view;
    }
}
In MenuHelper we initialize new Undo and RedoAction classes:
public static void initEditMenu(View view, JMenuBar menuBar) {
       JMenu editMenu = new JMenu("Edit");
       menuBar.add(editMenu);

       JMenuItem undoItem = addMenuItem(editMenu, "Undo", new UndoAction(view));
       JMenuItem redoItem = addMenuItem(editMenu, "Redo", new RedoAction(view));
       addMenuItem(editMenu, "Cut", new DefaultEditorKit.CutAction());
       addMenuItem(editMenu, "Copy", new DefaultEditorKit.CopyAction());
       addMenuItem(editMenu, "Paste", new DefaultEditorKit.PasteAction());

       editMenu.addMenuListener(new UndoMenuListener(view, undoItem, redoItem));
   }
I don't see connection between UndoMenuListener and UndoAction, RedoAction classes. Why it working when it can't :D How it possible, where is connection which causes this succesful action?