ГЕНШТАБ на жабе лаба 6
This commit is contained in:
parent
1a6dcf7059
commit
6a39119b8d
74
laba1Loco/ExtentionDrawingTrain.java
Normal file
74
laba1Loco/ExtentionDrawingTrain.java
Normal file
@ -0,0 +1,74 @@
|
|||||||
|
package laba1Loco;
|
||||||
|
|
||||||
|
import java.awt.Color;
|
||||||
|
|
||||||
|
public class ExtentionDrawingTrain {
|
||||||
|
/// <summary>
|
||||||
|
/// Создание объекта из строки
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="info">Строка с данными для создания объекта</param>
|
||||||
|
/// <param name="separatorForObject">Разделитель даннных</param>
|
||||||
|
/// <param name="width">Ширина</param>
|
||||||
|
/// <param name="height">Высота</param>
|
||||||
|
/// <returns>Объект</returns>
|
||||||
|
public static DrawingTrain CreateDrawingTrain(String info, String separatorForObject, int width, int height)
|
||||||
|
{
|
||||||
|
String[] strs = info.split(separatorForObject);
|
||||||
|
if (strs.length == 4)
|
||||||
|
{
|
||||||
|
String[] colorValues = strs[2].split(",");
|
||||||
|
|
||||||
|
return new DrawingTrain(Integer.parseInt(strs[0]), (double)Integer.parseInt(strs[1]),
|
||||||
|
new Color(
|
||||||
|
Integer.parseInt(colorValues[0]),
|
||||||
|
Integer.parseInt(colorValues[1]),
|
||||||
|
Integer.parseInt(colorValues[2])
|
||||||
|
),
|
||||||
|
Integer.parseInt(strs[3]), width, height);
|
||||||
|
}
|
||||||
|
if (strs.length == 8)
|
||||||
|
{
|
||||||
|
String[] colorValues = strs[2].split(",");
|
||||||
|
String[] colorValues2 = strs[4].split(",");
|
||||||
|
return new DrawingLoco(
|
||||||
|
Integer.parseInt(strs[0]),
|
||||||
|
(double)Integer.parseInt(strs[1]),
|
||||||
|
new Color(
|
||||||
|
Integer.parseInt(colorValues[0].replaceAll("\\D", "")),
|
||||||
|
Integer.parseInt(colorValues[1].replaceAll("\\D", "")),
|
||||||
|
Integer.parseInt(colorValues[2].replaceAll("\\D", ""))
|
||||||
|
),
|
||||||
|
Integer.parseInt(strs[3]),
|
||||||
|
new Color(
|
||||||
|
Integer.parseInt(colorValues2[0].replaceAll("\\D", "")),
|
||||||
|
Integer.parseInt(colorValues2[1].replaceAll("\\D", "")),
|
||||||
|
Integer.parseInt(colorValues2[2].replaceAll("\\D", ""))
|
||||||
|
),
|
||||||
|
strs[5].equals("True"),
|
||||||
|
strs[6].equals("True"),
|
||||||
|
strs[7].equals("True"),
|
||||||
|
width, height);
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
/// <summary>
|
||||||
|
/// Получение данных для сохранения в файл
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="drawningtrain">Сохраняемый объект</param>
|
||||||
|
/// <param name="separatorForObject">Разделитель даннных</param>
|
||||||
|
/// <returns>Строка с данными по объекту</returns>
|
||||||
|
public static String GetDataForSave(DrawingTrain drawningTrain, String separatorForObject)
|
||||||
|
{
|
||||||
|
EntityTrain train = drawningTrain.EntityTrain;
|
||||||
|
if (train == null)
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
String str = "" + train.Speed + separatorForObject + (int)train.Weight + separatorForObject + train.BodyColor + separatorForObject + train.numWheel;
|
||||||
|
if (!(train instanceof EntityLoco))
|
||||||
|
{
|
||||||
|
return str;
|
||||||
|
}
|
||||||
|
return str+separatorForObject+((EntityLoco)train).AdditionalColor.toString()+separatorForObject+((EntityLoco)train).Tube+separatorForObject+((EntityLoco)train).FuelTank+separatorForObject+((EntityLoco)train).LocoLine;
|
||||||
|
}
|
||||||
|
}
|
@ -4,18 +4,24 @@ import java.awt.Graphics;
|
|||||||
import java.awt.Graphics2D;
|
import java.awt.Graphics2D;
|
||||||
import java.awt.event.ActionEvent;
|
import java.awt.event.ActionEvent;
|
||||||
import java.awt.event.ActionListener;
|
import java.awt.event.ActionListener;
|
||||||
|
import java.io.File;
|
||||||
import java.util.LinkedList;
|
import java.util.LinkedList;
|
||||||
|
|
||||||
import javax.swing.DefaultListModel;
|
import javax.swing.DefaultListModel;
|
||||||
import javax.swing.JButton;
|
import javax.swing.JButton;
|
||||||
import javax.swing.JComboBox;
|
import javax.swing.JComboBox;
|
||||||
import javax.swing.JComponent;
|
import javax.swing.JComponent;
|
||||||
|
import javax.swing.JFileChooser;
|
||||||
import javax.swing.JFrame;
|
import javax.swing.JFrame;
|
||||||
import javax.swing.JList;
|
import javax.swing.JList;
|
||||||
|
import javax.swing.JMenu;
|
||||||
|
import javax.swing.JMenuBar;
|
||||||
|
import javax.swing.JMenuItem;
|
||||||
import javax.swing.JOptionPane;
|
import javax.swing.JOptionPane;
|
||||||
import javax.swing.JTextField;
|
import javax.swing.JTextField;
|
||||||
import javax.swing.event.ListSelectionEvent;
|
import javax.swing.event.ListSelectionEvent;
|
||||||
import javax.swing.event.ListSelectionListener;
|
import javax.swing.event.ListSelectionListener;
|
||||||
|
import javax.swing.filechooser.FileNameExtensionFilter;
|
||||||
|
|
||||||
public class FormTrainCollecltion {
|
public class FormTrainCollecltion {
|
||||||
private class Canvas extends JComponent{
|
private class Canvas extends JComponent{
|
||||||
@ -243,6 +249,65 @@ public class FormTrainCollecltion {
|
|||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
|
// Создаем панель меню
|
||||||
|
JMenuBar menuBar = new JMenuBar();
|
||||||
|
|
||||||
|
// Создаем меню
|
||||||
|
JMenu fileMenu = new JMenu("File");
|
||||||
|
|
||||||
|
// Создаем пункты меню
|
||||||
|
JMenuItem openItem = new JMenuItem("Open");
|
||||||
|
openItem.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.loadData(selectedFile.getAbsolutePath())) {
|
||||||
|
JOptionPane.showMessageDialog(null, "Загрузка прошла успешно", "Результат", JOptionPane.INFORMATION_MESSAGE);
|
||||||
|
} else {
|
||||||
|
JOptionPane.showMessageDialog(null, "Не загрузилось", "Результат", JOptionPane.ERROR_MESSAGE);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
ReloadObjects();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
);
|
||||||
|
JMenuItem saveItem = new JMenuItem("Save");
|
||||||
|
saveItem.addActionListener(
|
||||||
|
new ActionListener() {
|
||||||
|
public void actionPerformed(ActionEvent e){
|
||||||
|
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.SaveData(selectedFile.getAbsolutePath()))
|
||||||
|
JOptionPane.showMessageDialog(null, "Сохранение прошло успешно", "Результат", JOptionPane.INFORMATION_MESSAGE);
|
||||||
|
else
|
||||||
|
JOptionPane.showMessageDialog(null, "Не сохранилось", "Результат", JOptionPane.ERROR_MESSAGE);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
// Добавляем пункты в меню
|
||||||
|
fileMenu.add(openItem);
|
||||||
|
fileMenu.add(saveItem);
|
||||||
|
|
||||||
|
// Добавляем меню в панель меню
|
||||||
|
menuBar.add(fileMenu);
|
||||||
|
|
||||||
w.setSize (1000, 600);
|
w.setSize (1000, 600);
|
||||||
w.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
|
w.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
|
||||||
w.setLayout(null);
|
w.setLayout(null);
|
||||||
@ -260,6 +325,8 @@ public class FormTrainCollecltion {
|
|||||||
|
|
||||||
buttonGetRemoved.setBounds(pictureBoxWidth, 330, 160, 20);
|
buttonGetRemoved.setBounds(pictureBoxWidth, 330, 160, 20);
|
||||||
|
|
||||||
|
menuBar.setBounds(pictureBoxWidth, 360, 160, 20);
|
||||||
|
|
||||||
w.add(canv);
|
w.add(canv);
|
||||||
w.add(ButtonAddTrain);
|
w.add(ButtonAddTrain);
|
||||||
w.add(ButtonRemoveTrain);
|
w.add(ButtonRemoveTrain);
|
||||||
@ -274,6 +341,8 @@ public class FormTrainCollecltion {
|
|||||||
|
|
||||||
w.add(buttonGetRemoved);
|
w.add(buttonGetRemoved);
|
||||||
|
|
||||||
|
w.add(menuBar);
|
||||||
|
|
||||||
w.setVisible(true);
|
w.setVisible(true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -5,6 +5,10 @@ import java.awt.Graphics2D;
|
|||||||
import java.awt.image.BufferedImage;
|
import java.awt.image.BufferedImage;
|
||||||
|
|
||||||
public class TrainsGenericCollection<T extends DrawingTrain, U extends IMoveableObject>{
|
public class TrainsGenericCollection<T extends DrawingTrain, U extends IMoveableObject>{
|
||||||
|
/// <summary>
|
||||||
|
/// Получение объектов коллекции
|
||||||
|
/// </summary>
|
||||||
|
public Iterable<T> getTrains(final Integer maxTrains) { return _collection.GetTrains(maxTrains); }
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Ширина окна прорисовки
|
/// Ширина окна прорисовки
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -1,10 +1,111 @@
|
|||||||
package laba1Loco;
|
package laba1Loco;
|
||||||
|
|
||||||
|
import java.io.BufferedReader;
|
||||||
|
import java.io.BufferedWriter;
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.FileReader;
|
||||||
|
import java.io.FileWriter;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.Collections;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
public class TrainsGenericStorage {
|
public class TrainsGenericStorage {
|
||||||
|
/// <summary>
|
||||||
|
/// Разделитель для записи ключа и значения элемента словаря
|
||||||
|
/// </summary>
|
||||||
|
private static String _separatorForKeyValueWR = "|";
|
||||||
|
private static String _separatorForKeyValue = "\\|";
|
||||||
|
/// <summary>
|
||||||
|
/// Разделитель для записей коллекции данных в файл
|
||||||
|
/// </summary>
|
||||||
|
private String _separatorRecordsWR = ";";
|
||||||
|
private String _separatorRecords = "\\;";
|
||||||
|
/// <summary>
|
||||||
|
/// Разделитель для записи информации по объекту в файл
|
||||||
|
/// </summary>
|
||||||
|
private static String _separatorForObjectWR = ":";
|
||||||
|
private static String _separatorForObject = "\\:";
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Сохранение информации по автомобилям в хранилище в файл
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="filename">Путь и имя файла</param>
|
||||||
|
/// <returns>true - сохранение прошло успешно, false - ошибка при cохранении данных</returns>
|
||||||
|
public boolean SaveData(String filename)
|
||||||
|
{
|
||||||
|
if (new File(filename).exists()) {
|
||||||
|
new File(filename).delete();
|
||||||
|
}
|
||||||
|
|
||||||
|
StringBuilder data = new StringBuilder();
|
||||||
|
|
||||||
|
for (Map.Entry<String, TrainsGenericCollection<DrawingTrain, DrawningObjectTrain>> record : _trainStorages.entrySet()) {
|
||||||
|
StringBuilder records = new StringBuilder();
|
||||||
|
for (DrawingTrain elem : record.getValue().getTrains(100)) {
|
||||||
|
records.append(elem != null ? ExtentionDrawingTrain.GetDataForSave(elem, _separatorForObjectWR) + _separatorRecordsWR : "");
|
||||||
|
}
|
||||||
|
data.append(record.getKey()).append(_separatorForKeyValueWR).append(records).append("\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (data.length() == 0)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
try (BufferedWriter writer = new BufferedWriter(new FileWriter(filename))) {
|
||||||
|
writer.write("TrainStorage" + System.lineSeparator() + data.toString());
|
||||||
|
} catch (IOException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
/// <summary>
|
||||||
|
/// Загрузка информации по автомобилям в хранилище из файла
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="filename">Путь и имя файла</param>
|
||||||
|
/// <returns>true - загрузка прошла успешно, false - ошибка призагрузке данных</returns>
|
||||||
|
public boolean loadData(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("TrainStorage"))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
_trainStorages.clear();
|
||||||
|
s = reader.readLine();
|
||||||
|
while (s != null && s.length() != 0) {
|
||||||
|
String[] record = s.split(_separatorForKeyValue);
|
||||||
|
s = reader.readLine();
|
||||||
|
if (record.length != 2) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
TrainsGenericCollection<DrawingTrain, DrawningObjectTrain> collection = new TrainsGenericCollection<>(_pictureWidth, _pictureHeight);
|
||||||
|
String[] set = record[1].split(_separatorRecords);
|
||||||
|
List<String> reversedSet = Arrays.asList(set);
|
||||||
|
Collections.reverse(reversedSet);
|
||||||
|
for (String elem : reversedSet) {
|
||||||
|
DrawingTrain train = ExtentionDrawingTrain.CreateDrawingTrain(elem, _separatorForObject, _pictureWidth, _pictureHeight);
|
||||||
|
if (train == null || collection.Add(train) == -1)
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
_trainStorages.put(record[0], collection);
|
||||||
|
}
|
||||||
|
} catch (IOException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Словарь (хранилище)
|
/// Словарь (хранилище)
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
Loading…
Reference in New Issue
Block a user