From a7a295398027ad05ce25e90c106478e3d3301a97 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=92=D0=BE=D0=BB=D0=BE=D0=B4=D0=B8=D0=BD=20=D0=93=D0=B5?= =?UTF-8?q?=D1=80=D0=BC=D0=B0=D0=BD?= Date: Thu, 27 Aug 2026 00:09:40 +0400 Subject: [PATCH] refactor(view): reuse base views and decouple menu actions --- .../java/ru/project/view/CollectionView.java | 40 ++++---------- .../main/java/ru/project/view/MainView.java | 55 +++++++++---------- 2 files changed, 36 insertions(+), 59 deletions(-) diff --git a/app/src/main/java/ru/project/view/CollectionView.java b/app/src/main/java/ru/project/view/CollectionView.java index 27d139e..1704fe4 100644 --- a/app/src/main/java/ru/project/view/CollectionView.java +++ b/app/src/main/java/ru/project/view/CollectionView.java @@ -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 collection) { - BasicWindow window = new BasicWindow("Текущая коллекция"); - - Panel panel = new Panel(); - panel.setLayoutManager(new LinearLayout()); + public CollectionView() { + super("Текущая коллекция"); + } + public void showCollection(MyList 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); } } diff --git a/app/src/main/java/ru/project/view/MainView.java b/app/src/main/java/ru/project/view/MainView.java index 632f2db..55cbdb4 100644 --- a/app/src/main/java/ru/project/view/MainView.java +++ b/app/src/main/java/ru/project/view/MainView.java @@ -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; } }