5. Добавлена возможность загрузки и сохранения отдельной карты

This commit is contained in:
prodigygirl 2022-11-20 17:08:26 +04:00
parent c09d2a3764
commit 89342ecb23
2 changed files with 107 additions and 26 deletions

View File

@ -42,17 +42,26 @@ public class FormMapWithArmoredCars extends JFrame{
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JMenuBar jMenuBar = new JMenuBar();
JMenu jMenu = new JMenu("Файл");
JMenu jMenuMap = new JMenu("Файл карты");
JMenuItem itemSave = new JMenuItem("Сохранение");
itemSave.addActionListener(e -> saveActionMenuBar());
itemSave.addActionListener(e -> saveActionMenuBar(jMenuMap.getText()));
JMenuItem itemLoad = new JMenuItem("Загрузка");
itemLoad.addActionListener(e -> loadActionMenuBar());
jMenu.add(itemSave);
jMenu.add(itemLoad);
jMenuBar.add(jMenu);
// поместим меню в наше окно
itemLoad.addActionListener(e -> loadActionMenuBar(jMenuMap.getText()));
jMenuMap.add(itemSave);
jMenuMap.add(itemLoad);
JMenu jMenuObject = new JMenu("Файл объекта");
JMenuItem itemSaveObject = new JMenuItem("Сохранение");
itemSaveObject.addActionListener(e -> saveActionMenuBar(jMenuObject.getText()));
JMenuItem itemLoadObject = new JMenuItem("Загрузка");
itemLoadObject.addActionListener(e -> loadActionMenuBar(jMenuObject.getText()));
jMenuObject.add(itemSaveObject);
jMenuObject.add(itemLoadObject);
jMenuBar.add(jMenuMap);
jMenuBar.add(jMenuObject);
setJMenuBar(jMenuBar);
//toolBar.add(jMenu);
mapSelectorComboBox.removeAllItems();
for (var elem : _mapsDict.keySet())
@ -247,36 +256,54 @@ public class FormMapWithArmoredCars extends JFrame{
}
}
private void saveActionMenuBar() {
FileDialog fd = new FileDialog(this, "Choose a file", FileDialog.LOAD);
private void saveActionMenuBar(String type) {
FileDialog fd = new FileDialog(this, "Выбор файла", FileDialog.LOAD);
fd.setFile("*.txt");
fd.setVisible(true);
String filename = fd.getFile();
if (filename != null) {
if (_mapsCollection.SaveData(fd.getDirectory() + filename))
{
JOptionPane.showMessageDialog(null, "Сохранение прошло успешно");
}
else {
JOptionPane.showMessageDialog(null, "Не сохранилось");
if (type.contains("Файл карты")) {
if (_mapsCollection.SaveData(fd.getDirectory() + filename))
{
JOptionPane.showMessageDialog(null, "Сохранение прошло успешно");
}
else {
JOptionPane.showMessageDialog(null, "Не сохранилось");
}
} else if (type.contains("Файл объекта")){
if (_mapsCollection.SaveDataMap(fd.getDirectory() + filename, (String) listBoxMaps.getSelectedValue())) {
JOptionPane.showMessageDialog(null, "Сохранение прошло успешно");
} else {
JOptionPane.showMessageDialog(null, "Не сохранилось");
}
}
}
}
private void loadActionMenuBar() {
FileDialog fd = new FileDialog(this, "Choose a file", FileDialog.LOAD);
private void loadActionMenuBar(String type) {
FileDialog fd = new FileDialog(this, "Выбор файла", FileDialog.LOAD);
fd.setFile("*.txt");
fd.setVisible(true);
String filename = fd.getFile();
if (filename != null) {
if (_mapsCollection.LoadData(fd.getDirectory() + filename))
{
JOptionPane.showMessageDialog(null, "Загрузка прошла успешно");
ReloadMaps();
}
else {
JOptionPane.showMessageDialog(null, "Не загрузилось");
if (type.contains("Файл карты")) {
if (_mapsCollection.LoadData(fd.getDirectory() + filename))
{
JOptionPane.showMessageDialog(null, "Загрузка прошла успешно");
ReloadMaps();
}
else {
JOptionPane.showMessageDialog(null, "Не загрузилось");
}
} else if (type.contains("Файл объекта")){
if (_mapsCollection.LoadDataMap(fd.getDirectory() + filename)) {
JOptionPane.showMessageDialog(null, "Загрузка прошла успешно");
ReloadMaps();
} else {
JOptionPane.showMessageDialog(null, "Не загрузилось");
}
}
}
}

View File

@ -88,7 +88,7 @@ public class MapsCollection {
case "SimpleMap":
map = new SimpleMap();
break;
case "MyMapLabirinth":
case "MyMapLabyrinth":
map = new MyMapLabyrinth();
break;
case "MyMapWooden":
@ -104,4 +104,58 @@ public class MapsCollection {
}
return true;
}
public boolean SaveDataMap(String filename, String map) {
if (!_mapStorages.containsKey(map))
return false;
File f = new File(filename);
if (f.exists())
{
f.delete();
}
try (BufferedWriter writter = new BufferedWriter(new FileWriter(filename))) {
writter.write("One Map");
writter.newLine();
var key = _mapStorages.get(map);
writter.write(String.format("%s%s%s", map, separatorDict, key.GetData(separatorDict, separatorData)));
writter.newLine();
}
catch (IOException e) {
e.printStackTrace();
return false;
}
return true;
}
public boolean LoadDataMap(String filename) {
File f = new File(filename);
if (!f.exists()) {
return false;
}
try (BufferedReader reader = new BufferedReader(new FileReader(filename))) {
if (!reader.readLine().contains("One Map"))
return false;
String line = reader.readLine();
var elem = line.split(String.valueOf(separatorDict));
AbstractMap map = null;
switch (elem[1]) {
case "SimpleMap":
map = new SimpleMap();
break;
case "MyMapLabyrinth":
map = new MyMapLabyrinth();
break;
case "MyMapWooden":
map = new MyMapWooden();
break;
}
_mapStorages.put(elem[0], new MapWithSetArmoredCarsGeneric<>(_pictureWidth, _pictureHeight, map));
_mapStorages.get(elem[0]).LoadData(elem[2].split(String.valueOf(separatorData)));
} catch (IOException e) {
e.printStackTrace();
return false;
}
return true;
}
}