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; 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.collection.MyList;
import ru.project.student.Student; import ru.project.student.Student;
public class CollectionView { public class CollectionView extends PanelView {
public void showCollection(WindowBasedTextGUI gui, MyList<Student> collection) { public CollectionView() {
BasicWindow window = new BasicWindow("Текущая коллекция"); super("Текущая коллекция");
}
Panel panel = new Panel();
panel.setLayoutManager(new LinearLayout());
public void showCollection(MyList<Student> collection) {
for (int i = 0; i < collection.size(); i++) { for (int i = 0; i < collection.size(); i++) {
Student student = collection.get(i); Student student = collection.get(i);
panel.addComponent(new Label((i + 1) + ". " + student)); addLabel((i + 1) + ". " + student);
} }
panel.addComponent(new Button("Вернуться", window::close)); addButton("Выйти", this::close);
window.setComponent(panel);
gui.addWindowAndWait(window);
} }
public void showEmptyMessage(WindowBasedTextGUI gui) { public void showEmptyMessage() {
BasicWindow window = new BasicWindow("Текущая коллекция"); addLabel("Текущая коллекция пуста.");
Panel panel = new Panel(); addButton("Выйти", this::close);
panel.setLayoutManager(new LinearLayout());
panel.addComponent(new Label("Текущая коллекция пуста."));
panel.addComponent(new Button("Вернуться", window::close));
window.setComponent(panel);
gui.addWindowAndWait(window);
} }
} }
+26 -29
View File
@@ -1,62 +1,59 @@
package ru.project.view; 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 Runnable showCollectionAction = this::defaultAction;
private final ActionListBox menu; 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() { public MainView() {
window = new BasicWindow("Главное меню"); super("Главное меню");
Panel panel = new Panel(); addItem("Показать текущую коллекцию", () -> showCollectionAction.run());
panel.setLayoutManager(new LinearLayout());
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) { public void setShowCollectionAction(Runnable action) {
menu.addItem("Показать текущую коллекцию", action); showCollectionAction = action;
} }
public void setCreateCollectionAction(Runnable action) { public void setCreateCollectionAction(Runnable action) {
menu.addItem("Меню создания новой коллекции", action); createCollectionAction = action;
} }
public void setSaveCollectionAction(Runnable action) { public void setSaveCollectionAction(Runnable action) {
menu.addItem("Меню сохранения текущей коллекции в файл", action); saveCollectionAction = action;
} }
public void setSortCollectionAction(Runnable action) { public void setSortCollectionAction(Runnable action) {
menu.addItem("Меню сортировки текущей коллекции", action); sortCollectionAction = action;
} }
public void setSearchCollectionAction(Runnable action) { public void setSearchCollectionAction(Runnable action) {
menu.addItem("Меню поиска элемента в текущей коллекции", action); searchCollectionAction = action;
} }
public void setCountOccurrencesAction(Runnable action) { public void setCountOccurrencesAction(Runnable action) {
menu.addItem("Меню подсчёта количества вхождений элемента", action); countOccurrencesAction = action;
} }
public void setExitAction(Runnable action) { public void setExitAction(Runnable action) {
menu.addItem("Завершить выполнение программы", action); exitAction = action;
}
public void show(WindowBasedTextGUI gui) {
gui.addWindowAndWait(window);
}
public void close() {
window.close();
} }
} }