From 9345b241139bb06aff69503f34007c72d6c82310 Mon Sep 17 00:00:00 2001 From: Programmist73 Date: Fri, 18 Nov 2022 19:46:13 +0400 Subject: [PATCH 1/8] =?UTF-8?q?6-=D1=8F=20=D0=BB=D0=B0=D0=B1=D0=BE=D1=80?= =?UTF-8?q?=D0=B0=D1=82=D0=BE=D1=80=D0=BD=D0=B0=D1=8F.=20=D0=94=D0=BE?= =?UTF-8?q?=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=BA=D0=BB?= =?UTF-8?q?=D0=B0=D1=81=D1=81=D0=B0=20=D1=81=20=D0=BC=D0=B5=D1=82=D0=BE?= =?UTF-8?q?=D0=B4=D0=B0=D0=BC=D0=B8=20=D1=81=D0=BE=D1=85=D1=80=D0=B0=D0=BD?= =?UTF-8?q?=D0=B5=D0=BD=D0=B8=D1=8F=20=D0=B8=20=D0=B7=D0=B0=D0=B3=D1=80?= =?UTF-8?q?=D1=83=D0=B7=D0=BA=D0=B8.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Project/src/ExtentionPlane.java | 47 ++++++++++++++++++++++++++++++++ Project/src/IDrawningObject.java | 3 ++ 2 files changed, 50 insertions(+) create mode 100644 Project/src/ExtentionPlane.java diff --git a/Project/src/ExtentionPlane.java b/Project/src/ExtentionPlane.java new file mode 100644 index 0000000..2bffa4b --- /dev/null +++ b/Project/src/ExtentionPlane.java @@ -0,0 +1,47 @@ +import java.awt.*; + +public class ExtentionPlane +{ + //разделитель для записи информации по объекту в файл + private static final char _separatorForObject = ':'; + + //создание объекта из строки + public static DrawingPlane CreateDrawingPlane(String info) + { + String[] strs = info.split(String.valueOf(_separatorForObject)); + + //если простой самолёт + if(strs.length == 4) + { + Color color = new Color(Integer.parseInt(strs[2])); + return new DrawingPlane(Integer.parseInt(strs[0]), Float.valueOf(strs[1]), color, Integer.parseInt(strs[3])); + } + + //если аэробус + if(strs.length == 7) + { + Color f_color = new Color(Integer.parseInt(strs[2])); + Color s_color = new Color(Integer.parseInt(strs[4])); + + return new DrawingAirbus(Integer.parseInt(strs[0]), Integer.parseInt(strs[1]), f_color, Integer.parseInt(strs[3]), + s_color, Boolean.parseBoolean(strs[4]), Boolean.parseBoolean(strs[5])); + } + + return null; + } + + //сохраниние объекта в строку + public static String GetDataForSave(DrawingAirbus drawingPlane) + { + var plane = drawingPlane.Plane; + var str = String.format("%d%c%d%c%d", plane.GetSpeed(), _separatorForObject, plane.GetWeight(), _separatorForObject, plane.GetColor().getRGB()); + + //если объект не расширеный + if(!(plane instanceof EntityAirbus airbus)) + { + return str; + } + + return str + String.format("%c%s%c%b%c%b", _separatorForObject, airbus.AddColor(), _separatorForObject, airbus.AddEngine(),airbus.AddCompartment()); + } +} diff --git a/Project/src/IDrawningObject.java b/Project/src/IDrawningObject.java index fe90faa..1bafbc2 100644 --- a/Project/src/IDrawningObject.java +++ b/Project/src/IDrawningObject.java @@ -16,4 +16,7 @@ public interface IDrawningObject //получение текущей позиции объекта float[] GetCurrentPosition(); + + //получение информации по объекту + String GetInfo(); } -- 2.25.1 From f119611d50727512cfa1ab9aa72b78a9f4eb8b1d Mon Sep 17 00:00:00 2001 From: Programmist73 Date: Fri, 18 Nov 2022 23:30:03 +0400 Subject: [PATCH 2/8] =?UTF-8?q?=D0=A0=D0=B0=D0=B1=D0=BE=D1=87=D0=B8=D0=B5?= =?UTF-8?q?=20=D0=B7=D0=B0=D0=B3=D1=80=D1=83=D0=B7=D0=BA=D0=B0=20=D0=B8=20?= =?UTF-8?q?=D1=81=D0=BE=D1=85=D1=80=D0=B0=D0=BD=D0=B5=D0=BD=D0=B8=D0=B5=20?= =?UTF-8?q?=D0=B2=20=D1=84=D0=B0=D0=B9=D0=BB.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Project/.idea/uiDesigner.xml | 9 ++ Project/src/DrawingAirplaneWindow.java | 5 + Project/src/DrawingPlane.java | 5 + Project/src/DrawingRectAirplaneWindow.java | 5 + .../src/DrawingTriangleAirplaneWindow.java | 5 + Project/src/DrawningObjectPlane.java | 14 +++ Project/src/ExtentionPlane.java | 7 +- Project/src/FormMapWithSetPlanesGeneric.form | 46 ++++++++- Project/src/FormMapWithSetPlanesGeneric.java | 55 ++++++++++- Project/src/IAdditionalDrawingObject.java | 1 + Project/src/MapWithSetPlanesGeneric.java | 23 +++++ Project/src/MapsCollection.java | 94 ++++++++++++++++++- 12 files changed, 258 insertions(+), 11 deletions(-) diff --git a/Project/.idea/uiDesigner.xml b/Project/.idea/uiDesigner.xml index e96534f..8d2b59b 100644 --- a/Project/.idea/uiDesigner.xml +++ b/Project/.idea/uiDesigner.xml @@ -119,6 +119,15 @@ + + + + + + + + + \ No newline at end of file diff --git a/Project/src/DrawingAirplaneWindow.java b/Project/src/DrawingAirplaneWindow.java index 186b922..7ffc0f3 100644 --- a/Project/src/DrawingAirplaneWindow.java +++ b/Project/src/DrawingAirplaneWindow.java @@ -51,4 +51,9 @@ public class DrawingAirplaneWindow extends JComponent implements IAdditionalDraw g2d.drawOval((int)_startPosX + 27, (int)_startPosY + 11, 6, 4); } } + + @Override + public int GetAddEnum() { + return _airplaneWindowEnum.GetAddEnum(); + } } diff --git a/Project/src/DrawingPlane.java b/Project/src/DrawingPlane.java index c3c1822..073e2a6 100644 --- a/Project/src/DrawingPlane.java +++ b/Project/src/DrawingPlane.java @@ -54,6 +54,11 @@ public class DrawingPlane extends JPanel _airplaneWindow.SetAddEnum(countWindow); } + //кол-во иллюминаторов + public int GetWindows(){ + return _airplaneWindow.GetAddEnum(); + } + //конструктор public DrawingPlane(int speed, float weight, Color corpusColor, int countWindow, int planeWidth, int planeHeight) { diff --git a/Project/src/DrawingRectAirplaneWindow.java b/Project/src/DrawingRectAirplaneWindow.java index eaacfb2..1b7c7df 100644 --- a/Project/src/DrawingRectAirplaneWindow.java +++ b/Project/src/DrawingRectAirplaneWindow.java @@ -51,4 +51,9 @@ public class DrawingRectAirplaneWindow extends JComponent implements IAdditional g2d.drawRect((int)_startPosX + 27, (int)_startPosY + 11, 6, 4); } } + + @Override + public int GetAddEnum() { + return _airplaneWindowEnum.GetAddEnum(); + } } diff --git a/Project/src/DrawingTriangleAirplaneWindow.java b/Project/src/DrawingTriangleAirplaneWindow.java index bdbebfb..d0112d8 100644 --- a/Project/src/DrawingTriangleAirplaneWindow.java +++ b/Project/src/DrawingTriangleAirplaneWindow.java @@ -60,4 +60,9 @@ public class DrawingTriangleAirplaneWindow extends JComponent implements IAdditi g2d.drawPolygon(x_point, y_point, 3); } } + + @Override + public int GetAddEnum() { + return _airplaneWindowEnum.GetAddEnum(); + } } diff --git a/Project/src/DrawningObjectPlane.java b/Project/src/DrawningObjectPlane.java index b988862..c945da1 100644 --- a/Project/src/DrawningObjectPlane.java +++ b/Project/src/DrawningObjectPlane.java @@ -50,4 +50,18 @@ public class DrawningObjectPlane implements IDrawningObject return null; } + + public String GetInfo() + { + if(_plane != null) + { + return ExtentionPlane.GetDataForSave(_plane); + } + return null; + } + + public static IDrawningObject Create(String data) + { + return new DrawningObjectPlane(ExtentionPlane.CreateDrawingPlane(data)); + } } diff --git a/Project/src/ExtentionPlane.java b/Project/src/ExtentionPlane.java index 2bffa4b..2dd8b60 100644 --- a/Project/src/ExtentionPlane.java +++ b/Project/src/ExtentionPlane.java @@ -31,10 +31,11 @@ public class ExtentionPlane } //сохраниние объекта в строку - public static String GetDataForSave(DrawingAirbus drawingPlane) + public static String GetDataForSave(DrawingPlane drawingPlane) { var plane = drawingPlane.Plane; - var str = String.format("%d%c%d%c%d", plane.GetSpeed(), _separatorForObject, plane.GetWeight(), _separatorForObject, plane.GetColor().getRGB()); + var str = String.format("%d%c%d%c%d%c%d", plane.GetSpeed(), _separatorForObject, (int)plane.GetWeight(), _separatorForObject, + plane.GetColor().getRGB(), _separatorForObject, drawingPlane.GetWindows()); //если объект не расширеный if(!(plane instanceof EntityAirbus airbus)) @@ -42,6 +43,6 @@ public class ExtentionPlane return str; } - return str + String.format("%c%s%c%b%c%b", _separatorForObject, airbus.AddColor(), _separatorForObject, airbus.AddEngine(),airbus.AddCompartment()); + return str + String.format("%c%s%c%b%c%b", _separatorForObject, airbus.AddColor(), _separatorForObject, airbus.AddEngine(), _separatorForObject, airbus.AddCompartment()); } } diff --git a/Project/src/FormMapWithSetPlanesGeneric.form b/Project/src/FormMapWithSetPlanesGeneric.form index c845aca..d1f49c3 100644 --- a/Project/src/FormMapWithSetPlanesGeneric.form +++ b/Project/src/FormMapWithSetPlanesGeneric.form @@ -1,16 +1,16 @@
- + - + - + @@ -23,7 +23,7 @@ - + @@ -247,6 +247,44 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
diff --git a/Project/src/FormMapWithSetPlanesGeneric.java b/Project/src/FormMapWithSetPlanesGeneric.java index 9e59919..de611b3 100644 --- a/Project/src/FormMapWithSetPlanesGeneric.java +++ b/Project/src/FormMapWithSetPlanesGeneric.java @@ -2,12 +2,14 @@ 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{ @@ -30,6 +32,10 @@ public class FormMapWithSetPlanesGeneric extends JFrame{ private JButton ButtonDeleteMap; private JPanel GroupBoxMap; private JButton ButtonShowDelete; + private JMenuBar MenuBarSaveLoad; + private JMenu MenuChoiceOperation; + private JMenuItem MenuItemLoadData; + private JMenuItem MenuItemSaveData; //объект от коллекции карт private final MapsCollection _mapsCollection; @@ -172,7 +178,7 @@ public class FormMapWithSetPlanesGeneric extends JFrame{ return; } - DrawningObjectPlane plane = _mapsCollection.get(ListBoxMaps.getSelectedValue().toString()).GetPlaneInDelete(); + DrawningObjectPlane plane = (DrawningObjectPlane)_mapsCollection.get(ListBoxMaps.getSelectedValue().toString()).GetPlaneInDelete(); if(plane == null) { @@ -370,6 +376,53 @@ public class FormMapWithSetPlanesGeneric extends JFrame{ } } }); + + //обработка нажатия загрузки + MenuItemLoadData.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.LoadData(jfc.getSelectedFile().getPath())) + { + ReloadMaps(); + JOptionPane.showMessageDialog(null,"Загрузка данных прошла успешно", + "Результат", JOptionPane.INFORMATION_MESSAGE); + } + else + { + JOptionPane.showMessageDialog(null, "Ошибка загрузки данных", + "Результат", JOptionPane.ERROR_MESSAGE); + } + } + } + }); + + //обработка нажатия сохранения + MenuItemSaveData.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.SaveData(jfc.getSelectedFile().getPath())) + { + JOptionPane.showMessageDialog(null,"Сохранение прошло успешно", + "Результат", JOptionPane.INFORMATION_MESSAGE); + } + else + { + JOptionPane.showMessageDialog(null, "Не сохранилось", + "Результат", JOptionPane.ERROR_MESSAGE); + } + } + } + }); } private void createUIComponents() diff --git a/Project/src/IAdditionalDrawingObject.java b/Project/src/IAdditionalDrawingObject.java index cf9f27b..6aa61c2 100644 --- a/Project/src/IAdditionalDrawingObject.java +++ b/Project/src/IAdditionalDrawingObject.java @@ -4,4 +4,5 @@ public interface IAdditionalDrawingObject { void SetAddEnum(int airplaneWindow); void DrawAirplaneWindow(Color colorAirplaneWindow, Graphics g, float _startPosX, float _startPosY); + int GetAddEnum(); } diff --git a/Project/src/MapWithSetPlanesGeneric.java b/Project/src/MapWithSetPlanesGeneric.java index 7169b36..7b9c3cf 100644 --- a/Project/src/MapWithSetPlanesGeneric.java +++ b/Project/src/MapWithSetPlanesGeneric.java @@ -90,6 +90,29 @@ public class MapWithSetPlanesGeneric > _mapStorage; + public HashMap> _mapStorage; //возвращение списка названий карт public ArrayList Keys() @@ -18,6 +20,12 @@ public class MapsCollection //высота окна отрисовки private final int _pictureHeight; + //разделитель для записи информации по элементу словаря в файл + private final char separatorDict = '|'; + + //разделитель для записи коллекции данных в файл + private final char separatorData = ';'; + //конструктор public MapsCollection(int pictureWidth, int pictureHeight) { @@ -43,8 +51,88 @@ public class MapsCollection _mapStorage.remove(name); } + //сохранение информации по самолётам в ангарах в файл + public Boolean SaveData(String filename) + { + 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> entry : _mapStorage.entrySet()) + { + writter.write("" + entry.getKey() + separatorDict + entry.getValue().GetData(separatorDict, separatorData) + "\n"); + } + } + catch (IOException e) { + JOptionPane.showMessageDialog(null, e.getMessage()); + } + + return true; + } + + //загрузка нформации по по самолётам в ангарах из файла + public Boolean LoadData(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; + } + + _mapStorage.clear(); + + 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; + } + + _mapStorage.put(element[0], new MapWithSetPlanesGeneric(_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 get(String index) + public MapWithSetPlanesGeneric get(String index) { if(_mapStorage.containsKey(index)) { @@ -54,7 +142,7 @@ public class MapsCollection return null; } - public DrawningObjectPlane Get(String name, int index) + public IDrawningObject Get(String name, int index) { if(_mapStorage.containsKey(name)) { -- 2.25.1 From c3ea53e15fcdacbf8deed1598ed3eeeb8e9fc8be Mon Sep 17 00:00:00 2001 From: Programmist73 Date: Sat, 19 Nov 2022 10:05:18 +0400 Subject: [PATCH 3/8] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D1=8B=20=D1=84=D1=83=D0=BD=D0=BA=D1=86=D0=B8=D0=B8=20?= =?UTF-8?q?=D0=B7=D0=B0=D0=B3=D1=80=D1=83=D0=B7=D0=BA=D0=B8=20=D0=B8=20?= =?UTF-8?q?=D1=81=D0=BE=D1=85=D1=80=D0=B0=D0=BD=D0=B5=D0=BD=D0=B8=D1=8F=20?= =?UTF-8?q?=D0=BE=D0=B4=D0=BD=D0=BE=D0=B9=20=D0=BA=D0=B0=D1=80=D1=82=D1=8B?= =?UTF-8?q?.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Project/src/FormMapWithSetPlanesGeneric.form | 12 +++ Project/src/FormMapWithSetPlanesGeneric.java | 55 +++++++++++- Project/src/MapsCollection.java | 89 ++++++++++++++++++++ 3 files changed, 152 insertions(+), 4 deletions(-) diff --git a/Project/src/FormMapWithSetPlanesGeneric.form b/Project/src/FormMapWithSetPlanesGeneric.form index d1f49c3..451c5f8 100644 --- a/Project/src/FormMapWithSetPlanesGeneric.form +++ b/Project/src/FormMapWithSetPlanesGeneric.form @@ -276,6 +276,18 @@ + + + + + + + + + + + + diff --git a/Project/src/FormMapWithSetPlanesGeneric.java b/Project/src/FormMapWithSetPlanesGeneric.java index de611b3..939bb8d 100644 --- a/Project/src/FormMapWithSetPlanesGeneric.java +++ b/Project/src/FormMapWithSetPlanesGeneric.java @@ -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() diff --git a/Project/src/MapsCollection.java b/Project/src/MapsCollection.java index a72bb9b..e2bc9e0 100644 --- a/Project/src/MapsCollection.java +++ b/Project/src/MapsCollection.java @@ -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> 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(_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 get(String index) { -- 2.25.1 From cbf4ce8955dbcdbfeaa00529bf1a9c3ccaec4a1d Mon Sep 17 00:00:00 2001 From: Programmist73 Date: Mon, 21 Nov 2022 22:33:23 +0400 Subject: [PATCH 4/8] =?UTF-8?q?=D0=98=D0=B7=D0=BC=D0=B5=D0=BD=D0=B5=D0=BD?= =?UTF-8?q?=D0=B8=D0=B5=20=D1=81=D1=82=D1=80=D1=83=D0=BA=D1=82=D1=83=D1=80?= =?UTF-8?q?=D1=8B=20=D1=84=D0=B0=D0=B9=D0=BB=D0=B0=20=D1=81=D0=BE=D1=85?= =?UTF-8?q?=D1=80=D0=B0=D0=BD=D0=B5=D0=BD=D0=B8=D1=8F=20=D0=BF=D0=BE=20?= =?UTF-8?q?=D0=BE=D0=B4=D0=BD=D0=BE=D0=B9=20=D0=BA=D0=B0=D1=80=D1=82=D0=B5?= =?UTF-8?q?.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Project/src/ExtentionPlane.java | 6 +-- Project/src/FormMapWithSetPlanesGeneric.form | 12 +++--- Project/src/FormMapWithSetPlanesGeneric.java | 2 +- Project/src/MapsCollection.java | 44 ++++++++++---------- 4 files changed, 32 insertions(+), 32 deletions(-) diff --git a/Project/src/ExtentionPlane.java b/Project/src/ExtentionPlane.java index 2dd8b60..1113796 100644 --- a/Project/src/ExtentionPlane.java +++ b/Project/src/ExtentionPlane.java @@ -24,13 +24,13 @@ public class ExtentionPlane Color s_color = new Color(Integer.parseInt(strs[4])); return new DrawingAirbus(Integer.parseInt(strs[0]), Integer.parseInt(strs[1]), f_color, Integer.parseInt(strs[3]), - s_color, Boolean.parseBoolean(strs[4]), Boolean.parseBoolean(strs[5])); + s_color, Boolean.parseBoolean(strs[5]), Boolean.parseBoolean(strs[6])); } return null; } - //сохраниние объекта в строку + //сохранение объекта в строку public static String GetDataForSave(DrawingPlane drawingPlane) { var plane = drawingPlane.Plane; @@ -43,6 +43,6 @@ public class ExtentionPlane return str; } - return str + String.format("%c%s%c%b%c%b", _separatorForObject, airbus.AddColor(), _separatorForObject, airbus.AddEngine(), _separatorForObject, airbus.AddCompartment()); + return str + String.format("%c%s%c%b%c%b", _separatorForObject, airbus.AddColor().getRGB(), _separatorForObject, airbus.AddEngine(), _separatorForObject, airbus.AddCompartment()); } } diff --git a/Project/src/FormMapWithSetPlanesGeneric.form b/Project/src/FormMapWithSetPlanesGeneric.form index 451c5f8..019f752 100644 --- a/Project/src/FormMapWithSetPlanesGeneric.form +++ b/Project/src/FormMapWithSetPlanesGeneric.form @@ -11,9 +11,9 @@ - - - + + + @@ -24,9 +24,9 @@ - - - + + + diff --git a/Project/src/FormMapWithSetPlanesGeneric.java b/Project/src/FormMapWithSetPlanesGeneric.java index 939bb8d..34173c0 100644 --- a/Project/src/FormMapWithSetPlanesGeneric.java +++ b/Project/src/FormMapWithSetPlanesGeneric.java @@ -52,7 +52,7 @@ public class FormMapWithSetPlanesGeneric extends JFrame{ { super("Хранилище"); CreateWindow(); - _mapsCollection = new MapsCollection(730, 650); + _mapsCollection = new MapsCollection(730, 700); ComboBoxSelectorMap.removeAllItems(); for (String elem : _mapsHashMap.keySet()) diff --git a/Project/src/MapsCollection.java b/Project/src/MapsCollection.java index e2bc9e0..3216211 100644 --- a/Project/src/MapsCollection.java +++ b/Project/src/MapsCollection.java @@ -143,7 +143,7 @@ public class MapsCollection try (BufferedWriter writter = new BufferedWriter(new FileWriter(filename))) { - writter.write(String.format("MapsCollection" + System.lineSeparator())); + writter.write(String.format("SaveOneMap" + System.lineSeparator() + "Data of map:")); for(Map.Entry> entry : _mapStorage.entrySet()) { @@ -177,7 +177,7 @@ public class MapsCollection String str = ""; //если не содержит такую запись или пустой файл - if ((str = reader.readLine()) == null || !str.contains("MapsCollection")) + if ((str = reader.readLine()) == null || !str.contains("SaveOneMap")) { return false; } @@ -187,29 +187,29 @@ public class MapsCollection 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; - } + try { + 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]); - } + //если имя загружаемой карты уже есть в коллекции + if (_mapStorage.get(element[0]) != null) { + _mapStorage.remove(element[0]); + } - _mapStorage.put(element[0], new MapWithSetPlanesGeneric(_pictureWidth, _pictureHeight, - map)); + _mapStorage.put(element[0], new MapWithSetPlanesGeneric(_pictureWidth, _pictureHeight, + map)); - _mapStorage.get(element[0]).LoadData(element[2].split(String.valueOf(separatorData))); + _mapStorage.get(element[0]).LoadData(element[2].split(String.valueOf(separatorData))); + } catch (Exception ex) {} } } catch (IOException e) -- 2.25.1 From 9c340394fbb2086c208f65f5122cd8dca2717801 Mon Sep 17 00:00:00 2001 From: Programmist73 Date: Mon, 21 Nov 2022 22:58:14 +0400 Subject: [PATCH 5/8] =?UTF-8?q?=D0=9F=D1=80=D0=B0=D0=B2=D0=BA=D0=B8=20?= =?UTF-8?q?=D0=BF=D0=BE=20=D0=B7=D0=B0=D0=B3=D1=80=D1=83=D0=B7=D0=BA=D0=B5?= =?UTF-8?q?=20=D0=BE=D0=B4=D0=B8=D0=BD=D0=BE=D1=87=D0=BD=D0=BE=D0=B9=20?= =?UTF-8?q?=D0=BA=D0=B0=D1=80=D1=82=D1=8B.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Project/src/MapsCollection.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Project/src/MapsCollection.java b/Project/src/MapsCollection.java index 3216211..b661daa 100644 --- a/Project/src/MapsCollection.java +++ b/Project/src/MapsCollection.java @@ -187,6 +187,7 @@ public class MapsCollection var element = str.split(String.format("\\%c", separatorDict)); AbstractMap map = null; + //добавление в коллекцию с устранением лишнего слова в названии try { switch (element[1]) { case "SimpleMap": @@ -209,7 +210,7 @@ public class MapsCollection map)); _mapStorage.get(element[0]).LoadData(element[2].split(String.valueOf(separatorData))); - } catch (Exception ex) {} + } catch (Exception ex) { } } } catch (IOException e) -- 2.25.1 From 781a54e4373b97fe49403650c9cd4c459d9ac18a Mon Sep 17 00:00:00 2001 From: Programmist73 Date: Mon, 21 Nov 2022 23:56:37 +0400 Subject: [PATCH 6/8] =?UTF-8?q?=D0=9F=D1=80=D0=B0=D0=B2=D0=BA=D0=B8=20?= =?UTF-8?q?=D0=BF=D0=BE=20=D1=80=D0=B0=D0=B1=D0=BE=D1=82=D0=B5=20DnD=20?= =?UTF-8?q?=D0=BF=D0=BE=20=D0=BF=D0=B5=D1=80=D0=B5=D0=B4=D0=B0=D1=87=D0=B5?= =?UTF-8?q?=20=D0=BE=D0=B1=D1=8A=D0=B5=D0=BA=D1=82=D0=BE=D0=B2.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Project/src/FormPlaneConfig.form | 21 +++--- Project/src/FormPlaneConfig.java | 111 +++++++++++++++++++++++++------ Project/src/MapsCollection.java | 2 +- 3 files changed, 101 insertions(+), 33 deletions(-) diff --git a/Project/src/FormPlaneConfig.form b/Project/src/FormPlaneConfig.form index 7566cae..a8b1418 100644 --- a/Project/src/FormPlaneConfig.form +++ b/Project/src/FormPlaneConfig.form @@ -298,7 +298,7 @@ - + @@ -335,16 +335,6 @@ - - - - - - - - - - @@ -353,6 +343,15 @@ + + + + + + + + + diff --git a/Project/src/FormPlaneConfig.java b/Project/src/FormPlaneConfig.java index 2dfcd85..4ca8353 100644 --- a/Project/src/FormPlaneConfig.java +++ b/Project/src/FormPlaneConfig.java @@ -35,7 +35,6 @@ public class FormPlaneConfig extends JFrame{ private JPanel GroubBoxSelectedCountWindow; private JSpinner NumericUpDownCountWindow; private JPanel MainPanel; - private JLabel LabelTypeWindow; private JLabel LabelSimpleWindow; private JLabel LabelRectWindow; private JLabel LabelTriangleWindow; @@ -47,7 +46,14 @@ public class FormPlaneConfig extends JFrame{ //событие Consumer EventAddPlane; - public void AddEvent(Consumer ev){ + //объект для контролирования работы DnD + Object dragObject; + + //хранит в себе объект иллюминатор + Object enterObject; + + public void AddEvent(Consumer ev) + { EventAddPlane = ev; } @@ -86,7 +92,6 @@ public class FormPlaneConfig extends JFrame{ //рамки у Label LabelAddColor.setBorder(BorderFactory.createLineBorder(Color.BLACK, 1)); - LabelTypeWindow.setBorder(BorderFactory.createLineBorder(Color.BLACK, 1)); LabelBaseColor.setBorder(BorderFactory.createLineBorder(Color.BLACK, 1)); LabelModifiedObject.setBorder(BorderFactory.createLineBorder(Color.BLACK, 1)); LabelSimpleObject.setBorder(BorderFactory.createLineBorder(Color.BLACK, 1)); @@ -123,7 +128,6 @@ public class FormPlaneConfig extends JFrame{ PictureBoxPlane.addMouseListener(defCursor); LabelBaseColor.addMouseListener(defCursor); LabelAddColor.addMouseListener(defCursor); - LabelTypeWindow.addMouseListener(defCursor); PanelBlack.addMouseListener(drag); PanelPurple.addMouseListener(drag); @@ -140,12 +144,20 @@ public class FormPlaneConfig extends JFrame{ LabelRectWindow.addMouseListener(drag); LabelTriangleWindow.addMouseListener(drag); + //передача объекта через событие ButtonAddObject.addActionListener(e -> { EventAddPlane.accept(_plane); dispose(); }); + //лямбда-выражение для закрытия формы ButtonCancel.addActionListener(e -> dispose()); + + AdditWindowDropObject(LabelSimpleWindow); + AdditWindowDropObject(LabelRectWindow); + AdditWindowDropObject(LabelTriangleWindow); + + AdditWindowDropTarget(PictureBoxPlane); } public void Drop(JComponent dropItem) @@ -215,27 +227,84 @@ public class FormPlaneConfig extends JFrame{ revalidate(); } } - else if(dropItem instanceof JLabel label && LabelTypeWindow.getMousePosition() != null && _plane!=null) + } + + void AdditWindowDropTarget(JComponent obj) + { + obj.addMouseListener(new MouseAdapter() { + @Override + public void mouseEntered(MouseEvent e) {super.mouseEntered(e); + Paddle_DragEnter(obj); + } + @Override + public void mouseExited(MouseEvent e) {super.mouseExited(e); + DragExit(); + } + }); + } + + void AdditWindowDropObject(JComponent obj) + { + obj.addMouseListener(new MouseAdapter() { + @Override + public void mousePressed(MouseEvent e) {super.mousePressed(e); + Paddle_MouseDown(obj); + } + @Override + public void mouseReleased(MouseEvent e) {super.mouseReleased(e); + Paddle_DragDrop(); + } + }); + } + + void Paddle_MouseDown(Object sender) + { + IAdditionalDrawingObject windows; + switch (((JLabel)sender).getText()){ + case "Простая": + windows = new DrawingAirplaneWindow(); + break; + case "Треугольная": + windows = new DrawingTriangleAirplaneWindow(); + break; + case "Квадратная": + windows = new DrawingRectAirplaneWindow(); + break; + default: + return; + } + + enterObject = windows; + } + + void Paddle_DragEnter(Object sender) + { + if(enterObject != null && IAdditionalDrawingObject.class.isAssignableFrom(enterObject.getClass()) && _plane != null) { - if(label == LabelSimpleWindow) - { - _plane.SetTypeWindow((int)NumericUpDownCountWindow.getValue(), new DrawingAirplaneWindow()); - Draw(_plane); - } + setCursor(new Cursor(Cursor.HAND_CURSOR)); + dragObject = sender; + } + } - if(label == LabelRectWindow) - { - _plane.SetTypeWindow((int)NumericUpDownCountWindow.getValue(), new DrawingRectAirplaneWindow()); - Draw(_plane); - } + void Paddle_DragDrop() + { + if(dragObject == null) + { + return; + } - if(label == LabelTriangleWindow) - { - _plane.SetTypeWindow((int)NumericUpDownCountWindow.getValue(), new DrawingTriangleAirplaneWindow()); - Draw(_plane); - } + _plane.SetTypeWindow((int)NumericUpDownCountWindow.getValue(), (IAdditionalDrawingObject)enterObject); + DragExit(); + enterObject = null; + } - repaint(); + void DragExit() + { + if(enterObject != null && dragObject != null) + { + setCursor(Cursor.getDefaultCursor()); + Draw(_plane); + dragObject = null; } } } diff --git a/Project/src/MapsCollection.java b/Project/src/MapsCollection.java index b661daa..55c1e8a 100644 --- a/Project/src/MapsCollection.java +++ b/Project/src/MapsCollection.java @@ -143,7 +143,7 @@ public class MapsCollection try (BufferedWriter writter = new BufferedWriter(new FileWriter(filename))) { - writter.write(String.format("SaveOneMap" + System.lineSeparator() + "Data of map:")); + writter.write(String.format("SaveOneMap" + System.lineSeparator() + "Data of map:" + System.lineSeparator())); for(Map.Entry> entry : _mapStorage.entrySet()) { -- 2.25.1 From f9ca76a4252b1492f81ac74e3b378857bca27f2c Mon Sep 17 00:00:00 2001 From: Programmist73 Date: Tue, 22 Nov 2022 10:50:47 +0400 Subject: [PATCH 7/8] =?UTF-8?q?=D0=A1=D0=B4=D0=B0=D1=87=D0=B0=206-=D0=B9?= =?UTF-8?q?=20=D0=BB=D0=B0=D0=B1=D0=BE=D1=80=D0=B0=D1=82=D0=BE=D1=80=D0=BD?= =?UTF-8?q?=D0=BE=D0=B9.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Project/src/MapWithSetPlanesGeneric.java | 10 ++++++++-- Project/src/MapsCollection.java | 13 +++++++------ 2 files changed, 15 insertions(+), 8 deletions(-) diff --git a/Project/src/MapWithSetPlanesGeneric.java b/Project/src/MapWithSetPlanesGeneric.java index 7b9c3cf..44c1f87 100644 --- a/Project/src/MapWithSetPlanesGeneric.java +++ b/Project/src/MapWithSetPlanesGeneric.java @@ -17,13 +17,13 @@ public class MapWithSetPlanesGeneric _setPlanes; + private SetPlanesGeneric _setPlanes; //набор удалённых объектов (двусвязный список) public final LinkedList _deletePlane; //карта - private final U _map; + private U _map; //конструктор public MapWithSetPlanesGeneric(int picWidth, int picHeight, U map) @@ -235,6 +235,12 @@ public class MapWithSetPlanesGeneric (_pictureWidth, _pictureHeight, - map)); - + _mapStorage.put(element[0], new MapWithSetPlanesGeneric + (_pictureWidth, _pictureHeight, map)); _mapStorage.get(element[0]).LoadData(element[2].split(String.valueOf(separatorData))); + } catch (Exception ex) { } } } -- 2.25.1 From 50c36f8838aafa7ea7571adfa6fc452ee4123973 Mon Sep 17 00:00:00 2001 From: Programmist73 Date: Thu, 24 Nov 2022 23:25:21 +0400 Subject: [PATCH 8/8] =?UTF-8?q?=D0=9C=D0=B5=D0=BB=D0=BA=D0=B8=D0=B5=20?= =?UTF-8?q?=D0=BF=D1=80=D0=B0=D0=B2=D0=BA=D0=B8=20=D0=BF=D0=BE=20=D0=BE?= =?UTF-8?q?=D1=84=D0=BE=D1=80=D0=BC=D0=BB=D0=B5=D0=BD=D0=B8=D1=8E.=20?= =?UTF-8?q?=D0=97=D0=B0=D0=B2=D0=B5=D1=80=D1=88=D1=91=D0=BD=D0=BD=D0=B0?= =?UTF-8?q?=D1=8F=206-=D1=8F=20=D0=BB=D0=B0=D0=B1=D0=BE=D1=80=D0=B0=D1=82?= =?UTF-8?q?=D0=BE=D1=80=D0=BD=D0=B0=D1=8F.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Project/src/FormMapWithSetPlanesGeneric.java | 3 ++- Project/src/FormPlaneConfig.java | 25 ++++++++++---------- Project/src/MapWithSetPlanesGeneric.java | 1 - Project/src/MapsCollection.java | 3 +-- 4 files changed, 16 insertions(+), 16 deletions(-) diff --git a/Project/src/FormMapWithSetPlanesGeneric.java b/Project/src/FormMapWithSetPlanesGeneric.java index 34173c0..be8d980 100644 --- a/Project/src/FormMapWithSetPlanesGeneric.java +++ b/Project/src/FormMapWithSetPlanesGeneric.java @@ -371,7 +371,8 @@ public class FormMapWithSetPlanesGeneric extends JFrame{ public void keyTyped(KeyEvent e) { char c = e.getKeyChar(); - if ((c < '0') || (c > '9')) { + if ((c < '0') || (c > '9')) + { e.consume(); } } diff --git a/Project/src/FormPlaneConfig.java b/Project/src/FormPlaneConfig.java index 4ca8353..6a6cce7 100644 --- a/Project/src/FormPlaneConfig.java +++ b/Project/src/FormPlaneConfig.java @@ -144,6 +144,13 @@ public class FormPlaneConfig extends JFrame{ LabelRectWindow.addMouseListener(drag); LabelTriangleWindow.addMouseListener(drag); + //настройка DnD для перетаскивания формы иллюминаторов + AdditWindowDropObject(LabelSimpleWindow); + AdditWindowDropObject(LabelRectWindow); + AdditWindowDropObject(LabelTriangleWindow); + + AdditWindowDropTarget(PictureBoxPlane); + //передача объекта через событие ButtonAddObject.addActionListener(e -> { EventAddPlane.accept(_plane); @@ -152,12 +159,6 @@ public class FormPlaneConfig extends JFrame{ //лямбда-выражение для закрытия формы ButtonCancel.addActionListener(e -> dispose()); - - AdditWindowDropObject(LabelSimpleWindow); - AdditWindowDropObject(LabelRectWindow); - AdditWindowDropObject(LabelTriangleWindow); - - AdditWindowDropTarget(PictureBoxPlane); } public void Drop(JComponent dropItem) @@ -234,7 +235,7 @@ public class FormPlaneConfig extends JFrame{ obj.addMouseListener(new MouseAdapter() { @Override public void mouseEntered(MouseEvent e) {super.mouseEntered(e); - Paddle_DragEnter(obj); + Window_DragEnter(obj); } @Override public void mouseExited(MouseEvent e) {super.mouseExited(e); @@ -248,16 +249,16 @@ public class FormPlaneConfig extends JFrame{ obj.addMouseListener(new MouseAdapter() { @Override public void mousePressed(MouseEvent e) {super.mousePressed(e); - Paddle_MouseDown(obj); + Window_MouseDown(obj); } @Override public void mouseReleased(MouseEvent e) {super.mouseReleased(e); - Paddle_DragDrop(); + Window_DragDrop(); } }); } - void Paddle_MouseDown(Object sender) + void Window_MouseDown(Object sender) { IAdditionalDrawingObject windows; switch (((JLabel)sender).getText()){ @@ -277,7 +278,7 @@ public class FormPlaneConfig extends JFrame{ enterObject = windows; } - void Paddle_DragEnter(Object sender) + void Window_DragEnter(Object sender) { if(enterObject != null && IAdditionalDrawingObject.class.isAssignableFrom(enterObject.getClass()) && _plane != null) { @@ -286,7 +287,7 @@ public class FormPlaneConfig extends JFrame{ } } - void Paddle_DragDrop() + void Window_DragDrop() { if(dragObject == null) { diff --git a/Project/src/MapWithSetPlanesGeneric.java b/Project/src/MapWithSetPlanesGeneric.java index 44c1f87..d69dd2b 100644 --- a/Project/src/MapWithSetPlanesGeneric.java +++ b/Project/src/MapWithSetPlanesGeneric.java @@ -112,7 +112,6 @@ public class MapWithSetPlanesGeneric (_pictureWidth, _pictureHeight, map)); _mapStorage.get(element[0]).LoadData(element[2].split(String.valueOf(separatorData))); - } catch (Exception ex) { } } } -- 2.25.1