package ProjectElectricLocomotive; import javax.swing.*; import javax.swing.event.ListSelectionEvent; import javax.swing.filechooser.FileNameExtensionFilter; import java.awt.*; import java.io.File; import java.io.FileNotFoundException; import java.io.IOException; import java.util.Stack; import org.apache.logging.log4j.*; public class FormLocomotiveCollections { private final Logger _logger; FormElectricLocomotive formElectricLocomotive; FormLocomotiveConfig formLocomotiveConfig; private JPanel MainPanel; private JPanel pictureBoxCollections; private JPanel Instruments; private JButton ButtonAddLocomotive; private JTextField textFieldNumber; private JButton ButtonRefreshCollection; private JButton ButtonRemoveLocomotive; private JButton ButtonCreateRandomLoco; private JTextField textBoxStorageName; private JButton ButtonAddObject; private JList listBoxStorage; private JButton ButtonRemoveObject; private JButton Button_OpenFormRemovedLocomotives; public DrawingLocomotive loco; final LocomotivesGenericStorage _storage; FrameElectricLocomotive _frameRemovedLocomotives; private Stack _stackRemoveObjects; FrameDopClassParameters frameDopClassParameters; public JPanel getPictureBoxCollections() { return MainPanel; } public FormLocomotiveCollections() { _logger = LogManager.getLogger("logger"); formElectricLocomotive = new FormElectricLocomotive(); formLocomotiveConfig = new FormLocomotiveConfig(); _storage = new LocomotivesGenericStorage(400, 300); _stackRemoveObjects = new Stack<>(); listBoxStorage.addListSelectionListener(this::listBoxObjectsSelectedIndexChanged); ButtonAddObject.addActionListener(e -> { String NameStorage = textBoxStorageName.getText(); if (NameStorage.equals("")) { JOptionPane.showMessageDialog(this.getPictureBoxCollections(), "Где данные? Напиши хоть что-нибудь", "Ошибка", JOptionPane.INFORMATION_MESSAGE); _logger.error("Не удалось добавить набор: " + NameStorage); } _storage.AddSet(NameStorage); ReloadObjects(); Refresh(); _logger.info("Добавлен набор: " + NameStorage); }); ButtonRemoveObject.addActionListener(e -> { if (listBoxStorage.getSelectedIndex() == -1) { _logger.error("Не выбран набор для удаления"); } JOptionPane.showMessageDialog(this.getPictureBoxCollections(), "Коллекция удалена", "Удаление", JOptionPane.INFORMATION_MESSAGE); _storage.DelSet((String) listBoxStorage.getSelectedValue()); //ТУТ СТРИНГ ОБРАТИ ВНИМАНИЕ КАК-НИБУДЬ ReloadObjects(); _logger.info("Удален набор: " + listBoxStorage.getSelectedValue()); }); ButtonAddLocomotive.addActionListener(e -> { if (listBoxStorage.getSelectedIndex() == -1) _logger.warn("Не выбрана коллекция для добавления объекта"); var obj = _storage.get(listBoxStorage.getSelectedValue().toString()); // ТУТ ЕЩЕ РАЗ - ОБРАТИ ВНИМАНИЕ НА СТРИНГ if (obj == null) { _logger.warn("Набор равен null"); } FrameLocomotiveConfig frameLocomotiveConfig = new FrameLocomotiveConfig(); frameLocomotiveConfig.setVisible(true); frameLocomotiveConfig._formLocomotiveConfig.buttonOk.addActionListener(e2 -> { frameLocomotiveConfig.dispose(); loco = frameLocomotiveConfig._formLocomotiveConfig._loco; try { if (loco != null) { if (obj.AddOverload(loco) != -1) { JOptionPane.showMessageDialog(getPictureBoxCollections(), "Объект добавлен"); Refresh(); } else { JOptionPane.showMessageDialog(getPictureBoxCollections(), "Не удалось добавить объект"); } } frameLocomotiveConfig._formLocomotiveConfig.buttonClose.addActionListener(e3 -> { frameLocomotiveConfig.dispose(); }); _logger.info("Добавлен локомотив"); } catch (LocoStorageOverflowException ex) { JOptionPane.showMessageDialog(null, ex.getMessage()); _logger.warn("Не удалось добавить объект " + ex.getMessage()); } catch (Exception ex){ _logger.fatal("фатальная ошибка"); } }); }); ButtonCreateRandomLoco.addActionListener(e -> { if (frameDopClassParameters != null) frameDopClassParameters.dispose(); frameDopClassParameters = new FrameDopClassParameters(); frameDopClassParameters.setVisible(true); }); ButtonRemoveLocomotive.addActionListener(e -> { if (listBoxStorage.getSelectedIndex() == -1) { _logger.warn("Не выбрана коллекция для удаления объекта"); } var obj = _storage.get(listBoxStorage.getSelectedValue().toString()); if (obj == null) { _logger.warn("Набор равен null"); } int pos = Integer.parseInt(textFieldNumber.getText()); try { DrawingLocomotive removedPlane = obj.SubOverload(pos); //if (removedPlane != null) { _stackRemoveObjects.push(removedPlane); Refresh(); JOptionPane.showMessageDialog(this.getPictureBoxCollections(), "Объект удален", "Успех", JOptionPane.INFORMATION_MESSAGE); _logger.info("Удален объект " + removedPlane); //} } catch (LocoNotFoundException ex) { JOptionPane.showMessageDialog(null, ex.getMessage()); _logger.warn("Не удалось удалить объект" + ex.getMessage()); } catch (Exception ex){ _logger.fatal("фатальная ошибка"); } }); ButtonRefreshCollection.addActionListener(e -> { Refresh(); }); Button_OpenFormRemovedLocomotives.addActionListener(e -> { if (_stackRemoveObjects.empty()) { JOptionPane.showMessageDialog(this.getPictureBoxCollections(), "Вы ничего не удалили, кажется...", "ой", JOptionPane.INFORMATION_MESSAGE); return; } _frameRemovedLocomotives = new FrameElectricLocomotive(); _frameRemovedLocomotives._formElectricLocomotive._drawingLocomotive = _stackRemoveObjects.pop(); _frameRemovedLocomotives.setVisible(true); _frameRemovedLocomotives._formElectricLocomotive.Draw(); }); } public JMenuBar getMenuBar() { JMenuBar menuBar = new JMenuBar(); JMenu fileMenu = new JMenu("Файл"); JMenuItem openItem = new JMenuItem("Загрузить"); openItem.addActionListener( e -> { JFileChooser fileChooser = new JFileChooser(); fileChooser.setFileFilter(new FileNameExtensionFilter("Текстовые файлы (*.txt)", "txt")); fileChooser.setDialogTitle("Выберите файл для загрузки данных"); if (fileChooser.showOpenDialog(null) == JFileChooser.APPROVE_OPTION) { File selectedFile = fileChooser.getSelectedFile(); try { if (_storage.LoadData(selectedFile.getAbsolutePath())) { JOptionPane.showMessageDialog(null, "Загрузка прошла успешно", "Результат", JOptionPane.INFORMATION_MESSAGE); } else { JOptionPane.showMessageDialog(null, "Не загрузилось", "Результат", JOptionPane.ERROR_MESSAGE); } _logger.info("Загружено из файла: " + selectedFile.getAbsolutePath()); } catch (FileNotFoundException ex) { JOptionPane.showMessageDialog(null, "Ошибка при загрузке всех объектов " + ex.getMessage(), "Результат", JOptionPane.ERROR_MESSAGE); _logger.error("Не удалось загрузить объекты из файла: " + selectedFile.getAbsolutePath()); } catch (Exception ex){ _logger.fatal("фатальная ошибка"); } } ReloadObjects(); } ); JMenuItem saveItem = new JMenuItem("Сохранить"); saveItem.addActionListener( e -> { JFileChooser fileChooser = new JFileChooser(); fileChooser.setDialogTitle("Выберите файл для сохранения данных"); fileChooser.setFileFilter(new FileNameExtensionFilter("Текстовые файлы (*.txt)", "txt")); if (fileChooser.showSaveDialog(null) == JFileChooser.APPROVE_OPTION) { File selectedFile = fileChooser.getSelectedFile(); try { _storage.SaveData(selectedFile.getAbsolutePath()); JOptionPane.showMessageDialog(null, "Сохранение прошло успешно", "Результат", JOptionPane.INFORMATION_MESSAGE); _logger.info("Сохранено в файл: " + selectedFile.getAbsolutePath()); } catch (Exception ex) { JOptionPane.showMessageDialog(null, "Ошибка при сохранении всех объектов " + ex.getMessage(), "Результат", JOptionPane.ERROR_MESSAGE); _logger.error("Не удалось сохранить объекты в файл: " + selectedFile.getAbsolutePath()); } } } ); JMenuItem openItemSingle = new JMenuItem("Загрузить коллекцию"); openItemSingle.addActionListener( e -> { JFileChooser fileChooser = new JFileChooser(); fileChooser.setFileFilter(new FileNameExtensionFilter("Текстовые файлы (*.txt)", "txt")); fileChooser.setDialogTitle("Выберите файл для загрузки данных"); if (fileChooser.showOpenDialog(null) == JFileChooser.APPROVE_OPTION) { File selectedFile = fileChooser.getSelectedFile(); try { if (_storage.LoadDataSingle(selectedFile.getAbsolutePath())) { JOptionPane.showMessageDialog(null, "Загрузка прошла успешно", "Результат", JOptionPane.INFORMATION_MESSAGE); _logger.info("Загружен файл с коллекцией: " + selectedFile.getAbsolutePath()); } else { JOptionPane.showMessageDialog(null, "Не загрузилось", "Результат", JOptionPane.ERROR_MESSAGE); } } catch (IOException ex) { JOptionPane.showMessageDialog(null, "Ошибка при загрузке коллекции " + ex.getMessage(), "Результат", JOptionPane.ERROR_MESSAGE); _logger.error("Не удалось загрузить коллекцию из файла: " + selectedFile.getAbsolutePath()); } } ReloadObjects(); } ); JMenuItem saveItemSingle = new JMenuItem("Сохранить коллекцию"); saveItemSingle.addActionListener( e -> { if (listBoxStorage.getSelectedValue() == null) { JOptionPane.showMessageDialog(null, "Коллекция не выбрана", "Ошибка", JOptionPane.ERROR_MESSAGE); return; } JFileChooser fileChooser = new JFileChooser(); fileChooser.setFileFilter(new FileNameExtensionFilter("Текстовые файлы (*.txt)", "txt")); fileChooser.setDialogTitle("Выберите файл для сохранения данных"); if (fileChooser.showSaveDialog(null) == JFileChooser.APPROVE_OPTION) { File selectedFile = fileChooser.getSelectedFile(); try { _storage.SaveDataSingle(selectedFile.getAbsolutePath(), (String) listBoxStorage.getSelectedValue()); JOptionPane.showMessageDialog(null, "Сохранение прошло успешно", "Результат", JOptionPane.INFORMATION_MESSAGE); _logger.info("Сохранена коллекция в файл: " + selectedFile.getAbsolutePath()); } catch (Exception ex) { JOptionPane.showMessageDialog(null, "Ошибка при сохранении коллекции " + ex.getMessage(), "Результат", JOptionPane.ERROR_MESSAGE); _logger.error("Не удалось сохранить коллекцию в файл: " + selectedFile.getAbsolutePath()); } } } ); fileMenu.add(openItem); fileMenu.add(saveItem); fileMenu.add(openItemSingle); fileMenu.add(saveItemSingle); menuBar.add(fileMenu); return menuBar; } private void ReloadObjects() { int index = listBoxStorage.getSelectedIndex(); listBoxStorage.setListData(_storage.Keys().toArray()); if (listBoxStorage.getModel().getSize() > 0 && (index == -1 || index >= listBoxStorage.getModel().getSize())) { listBoxStorage.setSelectedIndex(0); } else if (listBoxStorage.getModel().getSize() > 0 && index > -1 && index < listBoxStorage.getModel().getSize()) { listBoxStorage.setSelectedIndex(index); } listBoxStorage.invalidate(); } private void listBoxObjectsSelectedIndexChanged(ListSelectionEvent e) { Refresh(); } public void Refresh() { if (listBoxStorage.getSelectedIndex() == -1) { return; } var obj = _storage.get(listBoxStorage.getSelectedValue().toString()); if (obj == null) { return; } Graphics g = pictureBoxCollections.getGraphics(); pictureBoxCollections.paint(g); obj.ShowLocomotives(g); } }