HAAAAAAAAARD 6 laba

This commit is contained in:
Timourka 2023-11-20 01:46:03 +04:00
parent 6a39119b8d
commit df8e73db8f
3 changed files with 152 additions and 15 deletions

View File

@ -1,6 +1,7 @@
package laba1Loco; package laba1Loco;
import java.awt.Color; import java.awt.Color;
import java.lang.reflect.InvocationTargetException;
public class ExtentionDrawingTrain { public class ExtentionDrawingTrain {
/// <summary> /// <summary>
@ -14,23 +15,32 @@ public class ExtentionDrawingTrain {
public static DrawingTrain CreateDrawingTrain(String info, String separatorForObject, int width, int height) public static DrawingTrain CreateDrawingTrain(String info, String separatorForObject, int width, int height)
{ {
String[] strs = info.split(separatorForObject); String[] strs = info.split(separatorForObject);
if (strs.length == 4) if (strs.length == 5)
{ {
String[] colorValues = strs[2].split(","); String[] colorValues = strs[2].split(",");
return new DrawingTrain(Integer.parseInt(strs[0]), (double)Integer.parseInt(strs[1]), DrawingTrain drawingTrain = new DrawingTrain(Integer.parseInt(strs[0]), (double)Integer.parseInt(strs[1]),
new Color( new Color(
Integer.parseInt(colorValues[0]), Integer.parseInt(colorValues[0].replaceAll("\\D", "")),
Integer.parseInt(colorValues[1]), Integer.parseInt(colorValues[1].replaceAll("\\D", "")),
Integer.parseInt(colorValues[2]) Integer.parseInt(colorValues[2].replaceAll("\\D", ""))
), ),
Integer.parseInt(strs[3]), width, height); Integer.parseInt(strs[3]),
width, height);
try{
drawingTrain.wheelDrawing = (IWheelDrawing)Class.forName(strs[4]).getDeclaredConstructor().newInstance();
drawingTrain.wheelDrawing.setNumWheel(drawingTrain.EntityTrain.numWheel);
}
catch(Exception e){
return null;
}
return drawingTrain;
} }
if (strs.length == 8) if (strs.length == 9)
{ {
String[] colorValues = strs[2].split(","); String[] colorValues = strs[2].split(",");
String[] colorValues2 = strs[4].split(","); String[] colorValues2 = strs[5].split(",");
return new DrawingLoco( DrawingLoco drawingLoco = new DrawingLoco(
Integer.parseInt(strs[0]), Integer.parseInt(strs[0]),
(double)Integer.parseInt(strs[1]), (double)Integer.parseInt(strs[1]),
new Color( new Color(
@ -44,10 +54,18 @@ public class ExtentionDrawingTrain {
Integer.parseInt(colorValues2[1].replaceAll("\\D", "")), Integer.parseInt(colorValues2[1].replaceAll("\\D", "")),
Integer.parseInt(colorValues2[2].replaceAll("\\D", "")) Integer.parseInt(colorValues2[2].replaceAll("\\D", ""))
), ),
strs[5].equals("True"), strs[6].equals("true"),
strs[6].equals("True"), strs[7].equals("true"),
strs[7].equals("True"), strs[8].equals("true"),
width, height); width, height);
try{
drawingLoco.wheelDrawing = (IWheelDrawing)Class.forName(strs[4]).getDeclaredConstructor().newInstance();
drawingLoco.wheelDrawing.setNumWheel(drawingLoco.EntityTrain.numWheel);
}
catch(Exception e){
return null;
}
return drawingLoco;
} }
return null; return null;
} }
@ -64,7 +82,7 @@ public class ExtentionDrawingTrain {
{ {
return null; return null;
} }
String str = "" + train.Speed + separatorForObject + (int)train.Weight + separatorForObject + train.BodyColor + separatorForObject + train.numWheel; String str = "" + train.Speed + separatorForObject + (int)train.Weight + separatorForObject + train.BodyColor + separatorForObject + train.numWheel + separatorForObject + drawningTrain.wheelDrawing.getClass().getName();
if (!(train instanceof EntityLoco)) if (!(train instanceof EntityLoco))
{ {
return str; return str;

View File

@ -270,7 +270,7 @@ public class FormTrainCollecltion {
fileChooser.setDialogTitle("Выберите файл для загрузки данных"); fileChooser.setDialogTitle("Выберите файл для загрузки данных");
if (fileChooser.showOpenDialog(null) == JFileChooser.APPROVE_OPTION) { if (fileChooser.showOpenDialog(null) == JFileChooser.APPROVE_OPTION) {
File selectedFile = fileChooser.getSelectedFile(); File selectedFile = fileChooser.getSelectedFile();
if (_storage.loadData(selectedFile.getAbsolutePath())) { if (_storage.LoadData(selectedFile.getAbsolutePath())) {
JOptionPane.showMessageDialog(null, "Загрузка прошла успешно", "Результат", JOptionPane.INFORMATION_MESSAGE); JOptionPane.showMessageDialog(null, "Загрузка прошла успешно", "Результат", JOptionPane.INFORMATION_MESSAGE);
} else { } else {
JOptionPane.showMessageDialog(null, "Не загрузилось", "Результат", JOptionPane.ERROR_MESSAGE); JOptionPane.showMessageDialog(null, "Не загрузилось", "Результат", JOptionPane.ERROR_MESSAGE);
@ -300,10 +300,61 @@ public class FormTrainCollecltion {
} }
} }
); );
JMenuItem openItemSingle = new JMenuItem("Open single");
openItemSingle.addActionListener(
new ActionListener() {
public void actionPerformed(ActionEvent e){
JFileChooser fileChooser = new JFileChooser();
fileChooser.setDialogTitle("Выберите файл для загрузки данных");
// Установка фильтра для файлов с определенным расширением (например, .txt)
fileChooser.setFileFilter(new FileNameExtensionFilter("Текстовые файлы (*.txt)", "txt"));
fileChooser.setDialogTitle("Выберите файл для загрузки данных");
if (fileChooser.showOpenDialog(null) == JFileChooser.APPROVE_OPTION) {
File selectedFile = fileChooser.getSelectedFile();
if (_storage.LoadDataSingle(selectedFile.getAbsolutePath())) {
JOptionPane.showMessageDialog(null, "Загрузка прошла успешно", "Результат", JOptionPane.INFORMATION_MESSAGE);
} else {
JOptionPane.showMessageDialog(null, "Не загрузилось", "Результат", JOptionPane.ERROR_MESSAGE);
}
}
ReloadObjects();
}
}
);
JMenuItem saveItemSingle = new JMenuItem("Save single");
saveItemSingle.addActionListener(
new ActionListener() {
public void actionPerformed(ActionEvent e){
if (jListStorage.getSelectedValue() == null){
JOptionPane.showMessageDialog(null, "Не выбран гараж", "Ошибка", JOptionPane.ERROR_MESSAGE);
return;
}
JFileChooser fileChooser = new JFileChooser();
fileChooser.setDialogTitle("Выберите файл для сохранения данных");
// Установка фильтра для файлов с определенным расширением (например, .txt)
fileChooser.setFileFilter(new FileNameExtensionFilter("Текстовые файлы (*.txt)", "txt"));
if (fileChooser.showSaveDialog(null) == JFileChooser.APPROVE_OPTION) {
File selectedFile = fileChooser.getSelectedFile();
if (_storage.SaveDataSingle(selectedFile.getAbsolutePath(), jListStorage.getSelectedValue()))
JOptionPane.showMessageDialog(null, "Сохранение прошло успешно", "Результат", JOptionPane.INFORMATION_MESSAGE);
else
JOptionPane.showMessageDialog(null, "Не сохранилось", "Результат", JOptionPane.ERROR_MESSAGE);
}
}
}
);
// Добавляем пункты в меню // Добавляем пункты в меню
fileMenu.add(openItem); fileMenu.add(openItem);
fileMenu.add(saveItem); fileMenu.add(saveItem);
fileMenu.add(openItemSingle);
fileMenu.add(saveItemSingle);
// Добавляем меню в панель меню // Добавляем меню в панель меню
menuBar.add(fileMenu); menuBar.add(fileMenu);

View File

@ -6,6 +6,7 @@ import java.io.File;
import java.io.FileReader; import java.io.FileReader;
import java.io.FileWriter; import java.io.FileWriter;
import java.io.IOException; import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.Collections; import java.util.Collections;
import java.util.HashMap; import java.util.HashMap;
@ -30,6 +31,73 @@ public class TrainsGenericStorage {
private static String _separatorForObjectWR = ":"; private static String _separatorForObjectWR = ":";
private static String _separatorForObject = "\\:"; private static String _separatorForObject = "\\:";
public boolean SaveDataSingle(String filename, String key){
if (new File(filename).exists()) {
new File(filename).delete();
}
StringBuilder data = new StringBuilder();
data.append(key).append("\n");
for (DrawingTrain elem : _trainStorages.get(key).getTrains(100))
data.append(elem != null ? ExtentionDrawingTrain.GetDataForSave(elem, _separatorForObjectWR) + "\n" : "");
if (data.length() == 0)
return false;
try (BufferedWriter writer = new BufferedWriter(new FileWriter(filename))) {
writer.write("TrainStorageSingle" + System.lineSeparator() + data.toString());
} catch (IOException e) {
e.printStackTrace();
return false;
}
return true;
}
public boolean LoadDataSingle(String filename){
if (!new File(filename).exists()) {
return false;
}
try (BufferedReader reader = new BufferedReader(new FileReader(filename))) {
String s = reader.readLine();
if (s == null || s.length() == 0)
return false;
if (!s.startsWith("TrainStorageSingle"))
return false;
String key = reader.readLine();
if (key == null || key.length() == 0)
return false;
TrainsGenericCollection<DrawingTrain, DrawningObjectTrain> collection = new TrainsGenericCollection<>(_pictureWidth, _pictureHeight);
List<String> trainsStrings = new ArrayList<String>();
s = reader.readLine();
while (s != null && s.length() != 0){
trainsStrings.add(s);
s = reader.readLine();
}
Collections.reverse(trainsStrings);
for (String elem : trainsStrings) {
DrawingTrain train = ExtentionDrawingTrain.CreateDrawingTrain(elem, _separatorForObject, _pictureWidth, _pictureHeight);
if (train == null || collection.Add(train) == -1)
return false;
}
if (_trainStorages.containsKey(key))
_trainStorages.remove(key);
_trainStorages.put(key, collection);
} catch (IOException e) {
e.printStackTrace();
return false;
}
return true;
}
/// <summary> /// <summary>
/// Сохранение информации по автомобилям в хранилище в файл /// Сохранение информации по автомобилям в хранилище в файл
/// </summary> /// </summary>
@ -68,7 +136,7 @@ public class TrainsGenericStorage {
/// </summary> /// </summary>
/// <param name="filename">Путь и имя файла</param> /// <param name="filename">Путь и имя файла</param>
/// <returns>true - загрузка прошла успешно, false - ошибка призагрузке данных</returns> /// <returns>true - загрузка прошла успешно, false - ошибка призагрузке данных</returns>
public boolean loadData(String filename) { public boolean LoadData(String filename) {
if (!new File(filename).exists()) { if (!new File(filename).exists()) {
return false; return false;
} }