Добавлены функции загрузки и сохранения одной карты.

This commit is contained in:
Programmist73 2022-11-19 10:05:18 +04:00
parent f119611d50
commit c3ea53e15f
3 changed files with 152 additions and 4 deletions

View File

@ -276,6 +276,18 @@
<text value="Сохранить"/>
</properties>
</component>
<component id="885e8" class="javax.swing.JMenuItem" binding="MenuItemLoadOneMapData">
<constraints/>
<properties>
<text value="Загрузить карту"/>
</properties>
</component>
<component id="ddbf9" class="javax.swing.JMenuItem" binding="MenuItemSaveOneMapData">
<constraints/>
<properties>
<text value="Сохранить карту"/>
</properties>
</component>
</children>
</grid>
<hspacer id="2b204">

View File

@ -2,14 +2,12 @@ import javax.imageio.ImageIO;
import javax.swing.*;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import javax.swing.filechooser.FileSystemView;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.image.BufferedImage;
import java.io.File;
import java.util.HashMap;
public class FormMapWithSetPlanesGeneric extends JFrame{
@ -36,6 +34,8 @@ public class FormMapWithSetPlanesGeneric extends JFrame{
private JMenu MenuChoiceOperation;
private JMenuItem MenuItemLoadData;
private JMenuItem MenuItemSaveData;
private JMenuItem MenuItemLoadOneMapData;
private JMenuItem MenuItemSaveOneMapData;
//объект от коллекции карт
private final MapsCollection _mapsCollection;
@ -377,7 +377,7 @@ public class FormMapWithSetPlanesGeneric extends JFrame{
}
});
//обработка нажатия загрузки
//обработка нажатия загрузки всех карт
MenuItemLoadData.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
@ -401,7 +401,7 @@ public class FormMapWithSetPlanesGeneric extends JFrame{
}
});
//обработка нажатия сохранения
//обработка нажатия сохранения всех карт
MenuItemSaveData.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
@ -423,6 +423,53 @@ public class FormMapWithSetPlanesGeneric extends JFrame{
}
}
});
//загрузка одной карты
MenuItemLoadOneMapData.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
JFileChooser jfc = new JFileChooser();
int result = jfc.showOpenDialog(null);
if (result == JFileChooser.APPROVE_OPTION)
{
if (_mapsCollection.LoadOneData(jfc.getSelectedFile().getPath()))
{
ReloadMaps();
JOptionPane.showMessageDialog(null,"Загрузка данных прошла успешно",
"Результат", JOptionPane.INFORMATION_MESSAGE);
}
else
{
JOptionPane.showMessageDialog(null, "Ошибка загрузки данных",
"Результат", JOptionPane.ERROR_MESSAGE);
}
}
}
});
//сохранение одной карты
MenuItemSaveOneMapData.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
JFileChooser jfc = new JFileChooser();
int result = jfc.showSaveDialog(null);
if (result == JFileChooser.APPROVE_OPTION)
{
if (_mapsCollection.SaveOneData(jfc.getSelectedFile().getPath(), ListBoxMaps.getSelectedValue().toString()))
{
JOptionPane.showMessageDialog(null,"Сохранение прошло успешно",
"Результат", JOptionPane.INFORMATION_MESSAGE);
}
else
{
JOptionPane.showMessageDialog(null, "Не сохранилось",
"Результат", JOptionPane.ERROR_MESSAGE);
}
}
}
});
}
private void createUIComponents()

View File

@ -131,6 +131,95 @@ public class MapsCollection
return true;
}
//сохранение информации по самолётам в ангарах в файл
public Boolean SaveOneData(String filename, String mapName)
{
File file = new File(filename);
if (file.exists())
{
file.delete();
}
try (BufferedWriter writter = new BufferedWriter(new FileWriter(filename)))
{
writter.write(String.format("MapsCollection" + System.lineSeparator()));
for(Map.Entry<String, MapWithSetPlanesGeneric<IDrawningObject, AbstractMap>> entry : _mapStorage.entrySet())
{
if(entry.getKey() == mapName)
{
writter.write("" + entry.getKey() + separatorDict + entry.getValue().GetData(separatorDict, separatorData) + "\n");
break;
}
}
}
catch (IOException e) {
JOptionPane.showMessageDialog(null, e.getMessage());
}
return true;
}
//загрузка нформации по по самолётам в ангарах из файла
public Boolean LoadOneData(String filename)
{
File file = new File(filename);
if (!file.exists())
{
return false;
}
try (BufferedReader reader = new BufferedReader(new FileReader(filename)))
{
String str = "";
//если не содержит такую запись или пустой файл
if ((str = reader.readLine()) == null || !str.contains("MapsCollection"))
{
return false;
}
while ((str = reader.readLine()) != null)
{
var element = str.split(String.format("\\%c", separatorDict));
AbstractMap map = null;
switch (element[1])
{
case "SimpleMap":
map = new SimpleMap();
break;
case "DesertStormMap":
map = new DesertStormMap();
break;
case "StarWarsMap":
map = new StarWarsMap();
break;
}
//если имя загружаемой карты уже есть в коллекции
if(_mapStorage.get(element[0]) != null)
{
_mapStorage.remove(element[0]);
}
_mapStorage.put(element[0], new MapWithSetPlanesGeneric<IDrawningObject, AbstractMap>(_pictureWidth, _pictureHeight,
map));
_mapStorage.get(element[0]).LoadData(element[2].split(String.valueOf(separatorData)));
}
}
catch (IOException e)
{
JOptionPane.showMessageDialog(null, e.getMessage());
}
return true;
}
//Доступ к аэродрому
public MapWithSetPlanesGeneric<IDrawningObject, AbstractMap> get(String index)
{