Не могу понять в чём ошибка? Объясните пожалуйста. Метод redo() и так у меня логируется с помощью ExceptionHandler. Почему валидатор тогда принял метод undo()? Они же идентичны.
![]()
package com.javarush.task.task32.task3209;
import com.javarush.task.task32.task3209.listeners.FrameListener;
import com.javarush.task.task32.task3209.listeners.TabbedPaneChangeListener;
import com.javarush.task.task32.task3209.listeners.UndoListener;
import javax.swing.*;
import javax.swing.undo.CannotUndoException;
import javax.swing.undo.UndoManager;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class View extends JFrame implements ActionListener {
private Controller controller;
//это будет панель с двумя вкладками
private JTabbedPane tabbedPane = new JTabbedPane();
//это будет компонент для визуального редактирования html
private JTextPane htmlTextPane = new JTextPane();
//это будет компонент для редактирования html в виде текста, он будет отображать код html (теги и их содержимое)
private JEditorPane plainTextPane = new JEditorPane();
private UndoManager undoManager = new UndoManager();
private UndoListener undoListener = new UndoListener(undoManager);
public void setController(Controller controller) {
this.controller = controller;
}
public Controller getController() {
return controller;
}
public void actionPerformed(ActionEvent e) {
}
//Конструктор класса View
public View() {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (ClassNotFoundException e) {
ExceptionHandler.log(e);
} catch (InstantiationException e) {
ExceptionHandler.log(e);
} catch (IllegalAccessException e) {
ExceptionHandler.log(e);
} catch (UnsupportedLookAndFeelException e) {
ExceptionHandler.log(e);
}
}
public UndoListener getUndoListener() {
return undoListener;
}
public void init() {
initGui();
//Добавлять слушателя событий нашего окна
FrameListener frameListener = new FrameListener(this);
addWindowListener(frameListener);
//Показывать наше окно
setVisible(true);
}
public void exit() {
controller.exit();
}
public void initMenuBar() {
//Создавать новый объект типа JMenuBar. Это и будет наша панель меню
JMenuBar jMenuBar = new JMenuBar();
//С помощью MenuHelper инициализировать меню
MenuHelper.initFileMenu(this, jMenuBar);
MenuHelper.initEditMenu(this, jMenuBar);
MenuHelper.initStyleMenu(this, jMenuBar);
MenuHelper.initAlignMenu(this, jMenuBar);
MenuHelper.initColorMenu(this, jMenuBar);
MenuHelper.initFontMenu(this, jMenuBar);
MenuHelper.initHelpMenu(this, jMenuBar);
//Добавлять в верхнюю часть панели контента текущего фрейма нашу панель меню, аналогично тому, как это мы делали с панелью вкладок
getContentPane().add(jMenuBar, BorderLayout.NORTH);
}
public void initEditor() {
//Устанавливать значение "text/html" в качестве типа контента для компонента htmlTextPane
htmlTextPane.setContentType("text/html");
//Создавать новый локальный компонент JScrollPane на базе htmlTextPane
//Добавлять вкладку в панель tabbedPane с именем "HTML" и компонентом из предыдущего пункта
tabbedPane.addTab("HTML", new JScrollPane(htmlTextPane));
//Создавать новый локальный компонент JScrollPane на базе plainTextPane
//Добавлять еще одну вкладку в tabbedPane с именем "Текст" и компонентом из предыдущего пункта
tabbedPane.addTab("Текст", new JScrollPane(plainTextPane));
//Устанавливать предпочтительный размер панели tabbedPane
tabbedPane.setPreferredSize(new Dimension(800, 600));
//Создавать объект класса TabbedPaneChangeListener и устанавливать его в качестве слушателя изменений в tabbedPane
tabbedPane.addChangeListener(new TabbedPaneChangeListener(this));
//Добавлять по центру панели контента текущего фрейма нашу панель с вкладками
getContentPane().add(tabbedPane,BorderLayout.CENTER);
}
public void initGui() {
initMenuBar();
initEditor();
pack();
}
public void selectedTabChanged() {
}
public void undo() {
try {
undoManager.undo();
} catch (CannotUndoException e) {
ExceptionHandler.log(e);
}
}
public boolean redo() {
try {
undoManager.redo();
} catch (CannotUndoException e) {
ExceptionHandler.log(e);
}
}
public boolean canUndo() {
return undoManager.canUndo();
}
public boolean canRedo() {
return undoManager.canRedo();
}
public void resetUndo() {
undoManager.discardAllEdits();
}
}