/
Maksim_Shchelochok
/
Course_Work
Обзор
Документация
Войти
/
Maksim_Shchelochok
/
Course_Work
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
src/controller/GroupController.java
130 строк
5 KB
Maksim
Создан контроллер для Group
23 июн 2026, 01:30
23 июн 2026, 01:30
f029ded
Код
Авторство
О чём код?
package controller; import javafx.geometry.Insets; import javafx.scene.control.*; import javafx.scene.layout.GridPane; import javafx.scene.layout.Region; import model.Speciality; import model.Group; import model.GroupManager; import view.EntityTableView; import java.util.List; import java.util.Optional; public class GroupController { private final GroupManager manager = new GroupManager(); private final EntityTableView view; public GroupController(boolean canEdit) { this.view = new EntityTableView( new String[]{"ID", "Студентов", "Специальность"}, canEdit); view.getRefreshButton().setOnAction(e -> refresh()); if (canEdit) { view.getAddButton().setOnAction(e -> add()); view.getEditButton().setOnAction(e -> edit()); view.getDeleteButton().setOnAction(e -> delete()); } refresh(); } public Region getView() {return view;} private void refresh() { List<Group> data = manager.getAll(); view.setData(data); } private void add() { showDialog("Добавить группу", 0, -1, g -> { String error = manager.create(g.getStudentsCount(), g.getSpecialityId()); if (error != null) error(error); refresh(); }); } private void edit() { Object[] row = view.getSelectedRow(); if (row == null) { info("Выберите строку для изменения."); return; } int id = Integer.parseInt(row[0].toString()); int curCount = 0; int curSpecId = -1; for (Group g : manager.getAll()) { if (g.getGroupId() == id) { curCount = g.getStudentsCount(); curSpecId = g.getSpecialityId(); break; } } showDialog("Изменить группу", curCount, curSpecId, g -> { String error = manager.update(id, g.getStudentsCount(), g.getSpecialityId()); if (error != null) error(error); refresh(); }); } private void delete() { Object[] row = view.getSelectedRow(); if (row == null) { info("Выберите строку для удаления."); return; } int id = Integer.parseInt(row[0].toString()); String error = manager.delete(id); if (error != null) error(error); refresh(); } private void showDialog(String title, int existingCount, int existingSpecId, java.util.function.Consumer<Group> onOk) { Dialog<Group> dialog = new Dialog<>(); dialog.setTitle(title); dialog.getDialogPane().getButtonTypes().addAll(ButtonType.OK, ButtonType.CANCEL); TextField countField = new TextField(String.valueOf(existingCount)); ComboBox<Speciality> specBox = new ComboBox<>(); List<Speciality> specialities = manager.getAllSpecialities(); specBox.getItems().addAll(specialities); specBox.setConverter(new javafx.util.StringConverter<Speciality>() { @Override public String toString(Speciality s) { return s == null ? "" : s.getName(); } @Override public Speciality fromString(String s) { return null; } }); if (existingSpecId != -1) { for (Speciality s : specialities) { if (s.getSpecialityId() == existingSpecId) { specBox.setValue(s); break; } } } GridPane grid = new GridPane(); grid.setHgap(10); grid.setVgap(10); grid.setPadding(new Insets(20)); grid.add(new Label("Студентов:"), 0, 0); grid.add(countField, 1, 0); grid.add(new Label("Специальность:"), 0, 1); grid.add(specBox, 1, 1); dialog.getDialogPane().setContent(grid); dialog.setResultConverter(button -> { if (button == ButtonType.OK) { Speciality chosen = specBox.getValue(); if (chosen == null) return null; int count; try { count = Integer.parseInt(countField.getText().trim()); } catch (Exception ex) { count = 0; } return new Group(0, count, chosen.getSpecialityId(), chosen.getName()); } return null; }); Optional<Group> result = dialog.showAndWait(); if (result.isPresent()) { onOk.accept(result.get()); } } private void info(String text) {alert(Alert.AlertType.INFORMATION, text);} private void error(String text) {alert(Alert.AlertType.ERROR, text);} private void alert(Alert.AlertType type, String text) { Alert a = new Alert(type); a.setHeaderText(null); a.setContentText(text); a.showAndWait(); } }