From 1f5fa9eb6f57c61cc5700498eae6b3d690147886 Mon Sep 17 00:00:00 2001 From: ilyaryabovv Date: Sun, 12 May 2024 15:30:17 +0400 Subject: [PATCH] =?UTF-8?q?=D0=BB=D0=B0=D0=B16?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ICollectionGenericObjects.java | 3 + .../ListGenericObjects.java | 39 ++++- .../MassiveGenericObjects.java | 37 +++++ .../StorageCollection.java | 157 +++++++++++++++++- .../Drawnings/DrawingBaseStormtrooper.java | 16 ++ .../src/Drawnings/Engines/DrawingEngines.java | 5 + .../Drawnings/Engines/DrawingOvalEngines.java | 5 + .../Engines/DrawingTriangleEngines.java | 6 + .../Drawnings/Engines/IDrawingEngines.java | 1 + .../Drawnings/Engines/NumberOfEngines.java | 5 + .../ExtentionDrawingBaseStormtrooper.java | 78 +++++++++ .../src/Entities/EntityBaseStormtrooper.java | 29 +++- .../src/Entities/EntityStormtrooper.java | 21 ++- .../src/FormStormtrooperCollection.java | 126 ++++++++++++-- ProjectStormtrooper/src/Main.java | 2 + 15 files changed, 509 insertions(+), 21 deletions(-) create mode 100644 ProjectStormtrooper/src/Drawnings/ExtentionDrawingBaseStormtrooper.java diff --git a/ProjectStormtrooper/src/CollectionGenericObjects/ICollectionGenericObjects.java b/ProjectStormtrooper/src/CollectionGenericObjects/ICollectionGenericObjects.java index b0f2825..165c51e 100644 --- a/ProjectStormtrooper/src/CollectionGenericObjects/ICollectionGenericObjects.java +++ b/ProjectStormtrooper/src/CollectionGenericObjects/ICollectionGenericObjects.java @@ -8,4 +8,7 @@ public interface ICollectionGenericObjects int Insert(T obj); T Remove(int position); T Get(int position); + CollectionType GetCollectionType(); + Iterable GetItems(); + void ClearCollection(); } diff --git a/ProjectStormtrooper/src/CollectionGenericObjects/ListGenericObjects.java b/ProjectStormtrooper/src/CollectionGenericObjects/ListGenericObjects.java index c7dbf28..8e9a3bf 100644 --- a/ProjectStormtrooper/src/CollectionGenericObjects/ListGenericObjects.java +++ b/ProjectStormtrooper/src/CollectionGenericObjects/ListGenericObjects.java @@ -1,9 +1,9 @@ package CollectionGenericObjects; -import java.util.ArrayList; -import java.util.List; +import java.util.*; public class ListGenericObjects implements ICollectionGenericObjects { private List _collection; + private CollectionType collectionType = CollectionType.List; private int _maxCount; public int getCount() { return _collection.size(); @@ -18,6 +18,10 @@ public class ListGenericObjects implements ICollectionGenericObjects { _collection = new ArrayList(); } @Override + public CollectionType GetCollectionType() { + return collectionType; + } + @Override public T Get(int position) { if (position >= getCount() || position < 0) return null; @@ -38,4 +42,35 @@ public class ListGenericObjects implements ICollectionGenericObjects { _collection.remove(position); return obj; } + @Override + public Iterable GetItems() { + return new Iterable() { + @Override + public Iterator iterator() { + return new Iterator() { + private int currentIndex = 0; + //нужен ли count + private int count = 0; + @Override + public boolean hasNext() { + return currentIndex < getCount(); + } + @Override + public T next() { + if (hasNext()) { + count++; + return _collection.get(currentIndex++); + } + throw new NoSuchElementException(); + } + }; + } + }; + } + @Override + public void ClearCollection() { + for (T stormtrooper : _collection) { + stormtrooper = null; + } + } } \ No newline at end of file diff --git a/ProjectStormtrooper/src/CollectionGenericObjects/MassiveGenericObjects.java b/ProjectStormtrooper/src/CollectionGenericObjects/MassiveGenericObjects.java index cdc06ab..365e9e5 100644 --- a/ProjectStormtrooper/src/CollectionGenericObjects/MassiveGenericObjects.java +++ b/ProjectStormtrooper/src/CollectionGenericObjects/MassiveGenericObjects.java @@ -3,10 +3,12 @@ package CollectionGenericObjects; import Drawnings.DrawingBaseStormtrooper; import java.lang.reflect.Array; +import java.util.*; public class MassiveGenericObjects implements ICollectionGenericObjects{ private T[] _collection = null; + private CollectionType collectionType = CollectionType.Massive; private int Count; public void SetMaxCount(int size) { if (size > 0) { @@ -17,6 +19,10 @@ public class MassiveGenericObjects implements ICollectionGenericObjects{ } } @Override + public CollectionType GetCollectionType() { + return collectionType; + } + @Override public int getCount() { return Count; } @@ -47,4 +53,35 @@ public class MassiveGenericObjects implements ICollectionGenericObjects{ if (position >= getCount() || position < 0) return null; return (T) _collection[position]; } + @Override + public Iterable GetItems() { + return new Iterable() { + @Override + public Iterator iterator() { + return new Iterator() { + private int currentIndex = 0; + //нужен ли count + private int count = 0; + @Override + public boolean hasNext() { + return currentIndex < getCount(); + } + @Override + public T next() { + if (hasNext()) { + count++; + return _collection[currentIndex++]; + } + throw new NoSuchElementException(); + } + }; + } + }; + } + @Override + public void ClearCollection() { + for (T stormtrooper : _collection) { + stormtrooper = null; + } + } } diff --git a/ProjectStormtrooper/src/CollectionGenericObjects/StorageCollection.java b/ProjectStormtrooper/src/CollectionGenericObjects/StorageCollection.java index bf56bdc..778198d 100644 --- a/ProjectStormtrooper/src/CollectionGenericObjects/StorageCollection.java +++ b/ProjectStormtrooper/src/CollectionGenericObjects/StorageCollection.java @@ -1,7 +1,11 @@ package CollectionGenericObjects; -import java.util.*; +import Drawnings.DrawingBaseStormtrooper; +import Drawnings.ExtentionDrawingBaseStormtrooper; -public class StorageCollection { +import java.util.*; +import java.io.*; + +public class StorageCollection { private Map> _storages; public StorageCollection() { @@ -35,5 +39,154 @@ public class StorageCollection { return _storages.get(name).Remove(position); return null; } + private String _collectionKey = "CollectionsStorage"; + private String _collectionName = "StorageCollection"; + private String _separatorForKeyValueS = "|"; + private String _separatorForKeyValue = "\\|"; + private String _separatorItemsS = ";"; + private String _separatorItems = "\\;"; + public boolean SaveData(String filename) { + if (_storages.isEmpty()) return false; + File file = new File(filename); + if (file.exists()) file.delete(); + try { + file.createNewFile(); + FileWriter writer = new FileWriter(file); + writer.write(_collectionKey); + writer.write("\n"); + for (Map.Entry> value : _storages.entrySet()) { + StringBuilder sb = new StringBuilder(); + sb.append(value.getKey()); + sb.append(_separatorForKeyValueS); + sb.append(value.getValue().GetCollectionType()); + sb.append(_separatorForKeyValueS); + sb.append(value.getValue().getCount()); + sb.append(_separatorForKeyValueS); + for (T stormtrooper : value.getValue().GetItems()) { + String data = ExtentionDrawingBaseStormtrooper.GetDataForSave((DrawingBaseStormtrooper) stormtrooper); + if (data.isEmpty()) continue; + sb.append(data); + sb.append(_separatorItemsS); + } + sb.append("\n"); + writer.write(String.valueOf(sb)); + } + writer.close(); + } catch (IOException e) { + throw new RuntimeException(e); + } + return true; + } + public boolean SaveOneCollection(String filename, String name) { + if (_storages.isEmpty()) return false; + File file = new File(filename); + if (file.exists()) file.delete(); + try { + file.createNewFile(); + FileWriter writer = new FileWriter(file); + writer.write(_collectionName); + writer.write("\n"); + ICollectionGenericObjects value = _storages.get(name); + StringBuilder sb = new StringBuilder(); + sb.append(name); + sb.append(_separatorForKeyValueS); + sb.append(value.GetCollectionType()); + sb.append(_separatorForKeyValueS); + sb.append(value.getCount()); + sb.append(_separatorForKeyValueS); + for (T stormtrooper : value.GetItems()) { + String data = ExtentionDrawingBaseStormtrooper.GetDataForSave((DrawingBaseStormtrooper) stormtrooper); + if (data.isEmpty()) continue; + sb.append(data); + sb.append(_separatorItemsS); + } + writer.append(sb); + writer.close(); + } catch (IOException e) { + throw new RuntimeException(e); + } + return true; + } + public boolean LoadData(String filename) { + File file = new File(filename); + if (!file.exists()) return false; + try (BufferedReader fs = new BufferedReader(new FileReader(filename))) { + String s = fs.readLine(); + if (s == null || s.isEmpty() || !s.startsWith(_collectionKey)) + return false; + _storages.clear(); + s = ""; + while ((s = fs.readLine()) != null) { + String[] record = s.split(_separatorForKeyValue); + if (record.length != 4) { + continue; + } + ICollectionGenericObjects collection = CreateCollection(record[1]); + if (collection == null) + { + return false; + } + collection.SetMaxCount(Integer.parseInt(record[2])); + String[] set = record[3].split(_separatorItems); + for (String elem : set) { + DrawingBaseStormtrooper stormtrooper = ExtentionDrawingBaseStormtrooper.CreateDrawingBaseStomrtrooper(elem); + if (collection.Insert((T) stormtrooper) == -1) + { + return false; + } + } + _storages.put(record[0], collection); + } + return true; + } + catch (IOException e) { + throw new RuntimeException(e); + } + } + public boolean LoadOneCollection(String filename) { + File file = new File(filename); + if (!file.exists()) return false; + try (BufferedReader fs = new BufferedReader(new FileReader(filename))) { + String s = fs.readLine(); + if (s == null || s.isEmpty() || !s.startsWith(_collectionName)) + return false; + if (_storages.containsKey(s)) { + _storages.get(s).ClearCollection(); + } + s = fs.readLine(); + String[] record = s.split(_separatorForKeyValue); + if (record.length != 4) { + return false; + } + ICollectionGenericObjects collection = CreateCollection(record[1]); + if (collection == null) + { + return false; + } + collection.SetMaxCount(Integer.parseInt(record[2])); + String[] set = record[3].split(_separatorItems); + for (String elem : set) { + DrawingBaseStormtrooper stormtrooper = ExtentionDrawingBaseStormtrooper.CreateDrawingBaseStomrtrooper(elem); + if (collection.Insert((T) stormtrooper) == -1) + { + return false; + } + } + _storages.put(record[0], collection); + return true; + } + catch (IOException e) { + throw new RuntimeException(e); + } + } + public ICollectionGenericObjects CreateCollection(String s) { + switch (s) { + case "Massive": + return new MassiveGenericObjects(); + case "List": + return new ListGenericObjects(); + } + return null; + } } \ No newline at end of file diff --git a/ProjectStormtrooper/src/Drawnings/DrawingBaseStormtrooper.java b/ProjectStormtrooper/src/Drawnings/DrawingBaseStormtrooper.java index e40398d..bcd0c4d 100644 --- a/ProjectStormtrooper/src/Drawnings/DrawingBaseStormtrooper.java +++ b/ProjectStormtrooper/src/Drawnings/DrawingBaseStormtrooper.java @@ -1,4 +1,7 @@ package Drawnings; +import Drawnings.Engines.DrawingEngines; +import Drawnings.Engines.DrawingOvalEngines; +import Drawnings.Engines.DrawingTriangleEngines; import Drawnings.Engines.IDrawingEngines; import Entities.*; import java.awt.*; @@ -136,4 +139,17 @@ public class DrawingBaseStormtrooper { Polygon poly = new Polygon(arrX, arrY, 3); g.fillPolygon(poly); } + public String[] GetStringRepresentationDecks() { + if (drawingEngines instanceof DrawingEngines) { + return new String[]{String.valueOf(drawingEngines.getNumberOfEngines()), "DrawingEngines"}; + } + else if (drawingEngines instanceof DrawingOvalEngines) { + return new String[]{String.valueOf(drawingEngines.getNumberOfEngines()), "DrawingOvalEngines"}; + } + else if (drawingEngines instanceof DrawingTriangleEngines) { + return new String[]{String.valueOf(drawingEngines.getNumberOfEngines()), "DrawingTriangleEngines"}; + } + + return null; + } } diff --git a/ProjectStormtrooper/src/Drawnings/Engines/DrawingEngines.java b/ProjectStormtrooper/src/Drawnings/Engines/DrawingEngines.java index 04d3c91..fbd4aa8 100644 --- a/ProjectStormtrooper/src/Drawnings/Engines/DrawingEngines.java +++ b/ProjectStormtrooper/src/Drawnings/Engines/DrawingEngines.java @@ -14,6 +14,11 @@ public class DrawingEngines implements IDrawingEngines { } } @Override + public int getNumberFromString(String numberString){ + NumberOfEngines number = NumberOfEngines.valueOf(numberString); + return number.getNumber(); + } + @Override public void DrawEngines(Graphics g, int x, int y, Color bodyColor) { g.setColor(bodyColor); g.fillRect(x, y, 10, 10); diff --git a/ProjectStormtrooper/src/Drawnings/Engines/DrawingOvalEngines.java b/ProjectStormtrooper/src/Drawnings/Engines/DrawingOvalEngines.java index 012fc2a..0017560 100644 --- a/ProjectStormtrooper/src/Drawnings/Engines/DrawingOvalEngines.java +++ b/ProjectStormtrooper/src/Drawnings/Engines/DrawingOvalEngines.java @@ -15,6 +15,11 @@ public class DrawingOvalEngines implements IDrawingEngines { } } @Override + public int getNumberFromString(String numberString){ + NumberOfEngines number = NumberOfEngines.valueOf(numberString); + return number.getNumber(); + } + @Override public void DrawEngines(Graphics g, int x, int y, Color bodyColor) { g.setColor(bodyColor); g.fillOval(x, y, 10, 10); diff --git a/ProjectStormtrooper/src/Drawnings/Engines/DrawingTriangleEngines.java b/ProjectStormtrooper/src/Drawnings/Engines/DrawingTriangleEngines.java index 510be8e..28421e4 100644 --- a/ProjectStormtrooper/src/Drawnings/Engines/DrawingTriangleEngines.java +++ b/ProjectStormtrooper/src/Drawnings/Engines/DrawingTriangleEngines.java @@ -15,6 +15,11 @@ public class DrawingTriangleEngines implements IDrawingEngines { } } @Override + public int getNumberFromString(String numberString){ + NumberOfEngines number = NumberOfEngines.valueOf(numberString); + return number.getNumber(); + } + @Override public void DrawEngines(Graphics g, int x, int y, Color bodyColor) { g.setColor(bodyColor); Point[] Nose = new Point[3]; @@ -35,6 +40,7 @@ public class DrawingTriangleEngines implements IDrawingEngines { DrawEngines(g,x + 64, y + 30,bodyColor); DrawEngines(g,x + 62, y + 121,bodyColor); } + @Override public void drawSixEngines(Graphics g, int x, int y, Color bodyColor){ drawFourEngines(g,x,y,bodyColor); diff --git a/ProjectStormtrooper/src/Drawnings/Engines/IDrawingEngines.java b/ProjectStormtrooper/src/Drawnings/Engines/IDrawingEngines.java index 366fe13..5204149 100644 --- a/ProjectStormtrooper/src/Drawnings/Engines/IDrawingEngines.java +++ b/ProjectStormtrooper/src/Drawnings/Engines/IDrawingEngines.java @@ -4,6 +4,7 @@ import java.awt.*; public interface IDrawingEngines { void setAmountOfEngines(int amount); + int getNumberFromString(String numberString); NumberOfEngines getNumberOfEngines(); diff --git a/ProjectStormtrooper/src/Drawnings/Engines/NumberOfEngines.java b/ProjectStormtrooper/src/Drawnings/Engines/NumberOfEngines.java index 5b9208d..0552802 100644 --- a/ProjectStormtrooper/src/Drawnings/Engines/NumberOfEngines.java +++ b/ProjectStormtrooper/src/Drawnings/Engines/NumberOfEngines.java @@ -18,6 +18,11 @@ public enum NumberOfEngines { } return null; } + + public int getNumber(){ + return value; + } + public static boolean contains(int amount){ NumberOfEngines [] num = NumberOfEngines.values(); for(int i =0 ; i list = new ArrayList<>(); + Collections.addAll(list, array1); + if (array2 == null) { + Collections.addAll(list, "0", " "); + } + else Collections.addAll(list, array2); + return String.join(_separatorForObjectS, list); + } +} \ No newline at end of file diff --git a/ProjectStormtrooper/src/Entities/EntityBaseStormtrooper.java b/ProjectStormtrooper/src/Entities/EntityBaseStormtrooper.java index 9846166..155f00c 100644 --- a/ProjectStormtrooper/src/Entities/EntityBaseStormtrooper.java +++ b/ProjectStormtrooper/src/Entities/EntityBaseStormtrooper.java @@ -1,28 +1,49 @@ package Entities; import java.awt.*; +import java.util.Objects; public class EntityBaseStormtrooper { - private int Speed; + private Integer Speed; public void setSpeed(int speed){ Speed = speed; } - private float Weight; - public void setWeight ( float weight){ + public Integer getSpeed() {return Speed;} + private Double Weight; + public void setWeight (double weight){ Weight= weight; } + public Double getWeight() {return Weight;} private Color BodyColor; public void setBodyColor (Color bodyColor){ BodyColor = bodyColor; } public Color getBodyColor() {return BodyColor;} public double Step; - public EntityBaseStormtrooper(int speed, float weight, Color bodyColor) + public EntityBaseStormtrooper(int speed, double weight, Color bodyColor) { Speed = speed; Weight = weight; BodyColor = bodyColor; Step=speed*100/weight; } + public String[] GetStringRepresentation() + { + return new String[]{"EntityBaseStormtrooper", Speed.toString(), Weight.toString(), colorToHexString(BodyColor)}; + } + public static EntityBaseStormtrooper CreateEntityBaseStormtrooper(String[] strs) + { + if (strs.length != 6 || !Objects.equals(strs[0], "EntityBaseStormtrooper")) + { + return null; + } + return new EntityBaseStormtrooper(Integer.parseInt(strs[1]), Double.parseDouble(strs[2]), hexStringToColor(strs[3])); + } + public static String colorToHexString(Color color) { + return String.format("#%02x%02x%02x", color.getRed(), color.getGreen(), color.getBlue()); + } + public static Color hexStringToColor(String hexString) { + return Color.decode(hexString); + } } diff --git a/ProjectStormtrooper/src/Entities/EntityStormtrooper.java b/ProjectStormtrooper/src/Entities/EntityStormtrooper.java index 03a18f3..4ad6c83 100644 --- a/ProjectStormtrooper/src/Entities/EntityStormtrooper.java +++ b/ProjectStormtrooper/src/Entities/EntityStormtrooper.java @@ -1,6 +1,8 @@ package Entities; import java.awt.*; +import java.util.Objects; + public class EntityStormtrooper extends EntityBaseStormtrooper{ private Color AdditionalColor; public void setAdditionalColor(Color additionalColor){ @@ -28,7 +30,7 @@ public class EntityStormtrooper extends EntityBaseStormtrooper{ Engines = engines; } public boolean getEngines() {return Engines;} - public EntityStormtrooper(int speed, float weight, Color bodyColor, Color additionalColor, boolean rockets, boolean bombs, boolean engines) + public EntityStormtrooper(int speed, double weight, Color bodyColor, Color additionalColor, boolean rockets, boolean bombs, boolean engines) { super(speed,weight,bodyColor); AdditionalColor = additionalColor; @@ -36,4 +38,21 @@ public class EntityStormtrooper extends EntityBaseStormtrooper{ Bombs = bombs; Engines = engines; } + + @Override + public String[] GetStringRepresentation() + { + return new String[]{"EntityStormtrooper", getSpeed().toString(), getWeight().toString(), + colorToHexString(getBodyColor()), colorToHexString(getAdditionalColor()), + String.valueOf(Rockets), String.valueOf(Bombs),String.valueOf(Engines)}; + } + public static EntityStormtrooper CreateEntityStormtrooper(String[] strs) + { + if (strs.length != 10 || !Objects.equals(strs[0], "EntityStormtrooper")) + { + return null; + } + return new EntityStormtrooper(Integer.parseInt(strs[1]), Double.parseDouble(strs[2]), hexStringToColor(strs[3]), + hexStringToColor(strs[4]), Boolean.parseBoolean(strs[5]), Boolean.parseBoolean(strs[6]), Boolean.parseBoolean(strs[7])); + } } diff --git a/ProjectStormtrooper/src/FormStormtrooperCollection.java b/ProjectStormtrooper/src/FormStormtrooperCollection.java index 127d211..17849a4 100644 --- a/ProjectStormtrooper/src/FormStormtrooperCollection.java +++ b/ProjectStormtrooper/src/FormStormtrooperCollection.java @@ -32,6 +32,12 @@ public class FormStormtrooperCollection extends JFrame { private JButton RefreshButton = new JButton("Обновить"); private JComboBox ComboBoxCollections = new JComboBox(new String[]{"", "Хранилище"}); private JFormattedTextField TextField; + private JMenuBar menuBar = new JMenuBar(); + private JMenu fileMenu = new JMenu("Файл"); + private JMenuItem loadItem = new JMenuItem("Загрузить"); + private JMenuItem saveItem = new JMenuItem("Сохранить"); + private JMenuItem loadCollection = new JMenuItem("Загрузить коллекцию"); + private JMenuItem saveCollection = new JMenuItem("Сохранить коллекцию"); public FormStormtrooperCollection(String title, Dimension dimension) { this.title = title; @@ -53,8 +59,8 @@ public class FormStormtrooperCollection extends JFrame { createButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { - if (_company==null) return; - FormStormtrooperConfig form = new FormStormtrooperConfig("",new Dimension(800,300)); + if (_company == null) return; + FormStormtrooperConfig form = new FormStormtrooperConfig("", new Dimension(800, 300)); form.setCompany(_company); form.Init(); } @@ -63,7 +69,7 @@ public class FormStormtrooperCollection extends JFrame { removeButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { - if (_company == null || TextField.getText() == null ) { + if (_company == null || TextField.getText() == null) { return; } int pos = parseInt(TextField.getText()); @@ -202,23 +208,55 @@ public class FormStormtrooperCollection extends JFrame { form.Init(stormtrooper); } }); + saveItem.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + SaveFile(); + } + }); + + + loadItem.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + LoadFile(); + } + }); + + saveCollection.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + System.out.println("Save coll"); + SaveCollection(); + } + }); + + loadCollection.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + System.out.println("Load coll"); + LoadCollection(); + } + }); + + ButtonGroup radioButtonsGroup = new ButtonGroup(); JLabel labelCollectionName = new JLabel("Название коллекции"); radioButtonsGroup.add(radioButtonMassive); radioButtonsGroup.add(radioButtonList); _canvasStormtrooper.setBounds(0, 0, getWidth() - 200, getHeight()); - labelCollectionName.setBounds(getWidth()-190, 10, 150, 20); - textBoxCollection.setBounds(getWidth()-190,35,150,25); - radioButtonMassive.setBounds(getWidth()-190, 60, 75, 20); - radioButtonList.setBounds(getWidth()-105, 60, 75, 20); - buttonAddCollection.setBounds(getWidth()-190, 85, 150, 20); - listBoxCollection.setBounds(getWidth()-190, 115, 150, 70); - buttonRemoveCollection.setBounds(getWidth()-190, 195, 150, 20); + labelCollectionName.setBounds(getWidth() - 190, 10, 150, 20); + textBoxCollection.setBounds(getWidth() - 190, 35, 150, 25); + radioButtonMassive.setBounds(getWidth() - 190, 60, 75, 20); + radioButtonList.setBounds(getWidth() - 105, 60, 75, 20); + buttonAddCollection.setBounds(getWidth() - 190, 85, 150, 20); + listBoxCollection.setBounds(getWidth() - 190, 115, 150, 70); + buttonRemoveCollection.setBounds(getWidth() - 190, 195, 150, 20); ComboBoxCollections.setBounds(getWidth() - 190, 225, 150, 20); - buttonCreateCompany.setBounds(getWidth()-190, 255, 150, 20); + buttonCreateCompany.setBounds(getWidth() - 190, 255, 150, 20); createButton.setBounds(getWidth() - 190, 325, 150, 30); RandomButton.setBounds(getWidth() - 190, 365, 150, 30); - removeObjectsButton.setBounds(getWidth()-190, 505, 150, 30); + removeObjectsButton.setBounds(getWidth() - 190, 505, 150, 30); TextField.setBounds(getWidth() - 190, 545, 150, 30); removeButton.setBounds(getWidth() - 190, 585, 150, 30); GoToCheckButton.setBounds(getWidth() - 190, 625, 150, 30); @@ -242,8 +280,72 @@ public class FormStormtrooperCollection extends JFrame { add(GoToCheckButton); add(RandomButton); add(RefreshButton); + fileMenu.add(loadItem); + fileMenu.add(saveItem); + fileMenu.add(loadCollection); + fileMenu.add(saveCollection); + fileMenu.addSeparator(); + menuBar.add(fileMenu); + setJMenuBar(menuBar); setVisible(true); } + + private String SaveWindow() { + FileDialog fileDialog = new FileDialog(this, "Save File", FileDialog.SAVE); + fileDialog.setVisible(true); + String directory = fileDialog.getDirectory(); + String file = fileDialog.getFile(); + if (directory == null || file == null) return null; + return directory + file; + } + + private void SaveFile() { + String filename = SaveWindow(); + if (_storageCollection.SaveData(filename)) { + JOptionPane.showMessageDialog(null, "Сохранено"); + } else JOptionPane.showMessageDialog(null, "Ошибка сохранения"); + } + + private void SaveCollection() { + String filename = SaveWindow(); + if (filename == null) { + JOptionPane.showMessageDialog(null, "Файл не выбран"); + return; + } + if (listBoxCollection.getSelectedIndex() < 0 || listBoxCollection.getSelectedValue() == null) { + JOptionPane.showMessageDialog(null, "Коллекция не выбрана"); + } + if (_storageCollection.SaveOneCollection(filename, listBoxCollection.getSelectedValue().toString())) { + JOptionPane.showMessageDialog(null, "Коллекция сохранена"); + } else JOptionPane.showMessageDialog(null, "Ошибка сохранения"); + } + + private String LoadWindow() { + FileDialog fileDialog = new FileDialog(this, "Save File", FileDialog.LOAD); + fileDialog.setVisible(true); + String directory = fileDialog.getDirectory(); + String file = fileDialog.getFile(); + if (directory == null || file == null) return null; + return directory + file; + } + + private void LoadFile() { + String filename = LoadWindow(); + if (_storageCollection.LoadData(filename)) { + JOptionPane.showMessageDialog(null, "Загрузка прошла успешно"); + RerfreshListBoxItems(); + } else JOptionPane.showMessageDialog(null, "Не загрузилось"); + + } + + private void LoadCollection() { + String filename = LoadWindow(); + if (_storageCollection.LoadOneCollection(filename)) { + JOptionPane.showMessageDialog(null, "Коллекция загружена"); + RerfreshListBoxItems(); + } else JOptionPane.showMessageDialog(null, "Не загрузилось"); + } + private void RerfreshListBoxItems() { DefaultListModel list = new DefaultListModel(); for (String name : _storageCollection.Keys()) { diff --git a/ProjectStormtrooper/src/Main.java b/ProjectStormtrooper/src/Main.java index 662a188..fcc8dc7 100644 --- a/ProjectStormtrooper/src/Main.java +++ b/ProjectStormtrooper/src/Main.java @@ -1,3 +1,5 @@ +import Drawnings.Engines.NumberOfEngines; + import java.awt.*; public class Main {