301 lines
16 KiB
Java
301 lines
16 KiB
Java
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<DrawingLocomotive> _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);
|
||
_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);
|
||
}
|
||
}
|