refactor(view): reuse base views and decouple menu actions

This commit is contained in:
2026-08-27 00:09:40 +04:00
parent 9faa6cff14
commit a7a2953980
2 changed files with 36 additions and 59 deletions
@@ -1,47 +1,27 @@
package ru.project.view;
import com.googlecode.lanterna.gui2.BasicWindow;
import com.googlecode.lanterna.gui2.Button;
import com.googlecode.lanterna.gui2.Label;
import com.googlecode.lanterna.gui2.LinearLayout;
import com.googlecode.lanterna.gui2.Panel;
import com.googlecode.lanterna.gui2.WindowBasedTextGUI;
import ru.project.collection.MyList;
import ru.project.student.Student;
public class CollectionView {
public class CollectionView extends PanelView {
public void showCollection(WindowBasedTextGUI gui, MyList<Student> collection) {
BasicWindow window = new BasicWindow("Текущая коллекция");
Panel panel = new Panel();
panel.setLayoutManager(new LinearLayout());
public CollectionView() {
super("Текущая коллекция");
}
public void showCollection(MyList<Student> collection) {
for (int i = 0; i < collection.size(); i++) {
Student student = collection.get(i);
panel.addComponent(new Label((i + 1) + ". " + student));
addLabel((i + 1) + ". " + student);
}
panel.addComponent(new Button("Вернуться", window::close));
window.setComponent(panel);
gui.addWindowAndWait(window);
addButton("Выйти", this::close);
}
public void showEmptyMessage(WindowBasedTextGUI gui) {
BasicWindow window = new BasicWindow("Текущая коллекция");
public void showEmptyMessage() {
addLabel("Текущая коллекция пуста.");
Panel panel = new Panel();
panel.setLayoutManager(new LinearLayout());
panel.addComponent(new Label("Текущая коллекция пуста."));
panel.addComponent(new Button("Вернуться", window::close));
window.setComponent(panel);
gui.addWindowAndWait(window);
addButton("Выйти", this::close);
}
}
+26 -29
View File
@@ -1,62 +1,59 @@
package ru.project.view;
import com.googlecode.lanterna.gui2.ActionListBox;
import com.googlecode.lanterna.gui2.BasicWindow;
import com.googlecode.lanterna.gui2.LinearLayout;
import com.googlecode.lanterna.gui2.Panel;
import com.googlecode.lanterna.gui2.WindowBasedTextGUI;
public class MainView {
public class MainView extends ActionListView {
private final BasicWindow window;
private final ActionListBox menu;
private Runnable showCollectionAction = this::defaultAction;
private Runnable createCollectionAction = this::defaultAction;
private Runnable saveCollectionAction = this::defaultAction;
private Runnable sortCollectionAction = this::defaultAction;
private Runnable searchCollectionAction = this::defaultAction;
private Runnable countOccurrencesAction = this::defaultAction;
private Runnable exitAction = this::defaultAction;
public MainView() {
window = new BasicWindow("Главное меню");
super("Главное меню");
Panel panel = new Panel();
panel.setLayoutManager(new LinearLayout());
addItem("Показать текущую коллекцию", () -> showCollectionAction.run());
menu = new ActionListBox();
addItem("Меню создания новой коллекции", () -> createCollectionAction.run());
panel.addComponent(menu);
addItem("Меню сохранения текущей коллекции в файл", () -> saveCollectionAction.run());
window.setComponent(panel);
addItem("Меню сортировки текущей коллекции", () -> sortCollectionAction.run());
addItem("Меню поиска элемента в текущей коллекции", () -> searchCollectionAction.run());
addItem("Меню подсчёта количества вхождений элемента", () -> countOccurrencesAction.run());
addItem("Завершить выполнение программы", () -> exitAction.run());
}
public void setShowCollectionAction(Runnable action) {
menu.addItem("Показать текущую коллекцию", action);
showCollectionAction = action;
}
public void setCreateCollectionAction(Runnable action) {
menu.addItem("Меню создания новой коллекции", action);
createCollectionAction = action;
}
public void setSaveCollectionAction(Runnable action) {
menu.addItem("Меню сохранения текущей коллекции в файл", action);
saveCollectionAction = action;
}
public void setSortCollectionAction(Runnable action) {
menu.addItem("Меню сортировки текущей коллекции", action);
sortCollectionAction = action;
}
public void setSearchCollectionAction(Runnable action) {
menu.addItem("Меню поиска элемента в текущей коллекции", action);
searchCollectionAction = action;
}
public void setCountOccurrencesAction(Runnable action) {
menu.addItem("Меню подсчёта количества вхождений элемента", action);
countOccurrencesAction = action;
}
public void setExitAction(Runnable action) {
menu.addItem("Завершить выполнение программы", action);
}
public void show(WindowBasedTextGUI gui) {
gui.addWindowAndWait(window);
}
public void close() {
window.close();
exitAction = action;
}
}