From 27b81ee5a96bdaeaaea882180eddbafd8dab85fa Mon Sep 17 00:00:00 2001 From: gg12 darfren Date: Wed, 15 Nov 2023 17:49:36 +0400 Subject: [PATCH 1/3] =?UTF-8?q?=D0=9D=D1=83=D0=B6=D0=BD=D0=BE=20=D0=B1?= =?UTF-8?q?=D1=83=D0=B4=D0=B5=D1=82=20=D0=BF=D0=BE=D0=B4=D0=BE=D0=BF=D0=B8?= =?UTF-8?q?=D0=BB=D0=B8=D0=B2=D0=B0=D1=82=D1=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ExtentionDrawningMonorail.java | 81 +++++++++ src/MonorailHard/FormMonorailCollection.java | 155 +++++++++++++++++- .../Generics/MonorailGenericCollection.java | 37 +++++ .../Generics/MonorailGenericStorage.java | 88 +++++++++- 4 files changed, 354 insertions(+), 7 deletions(-) create mode 100644 src/MonorailHard/DrawningObjects/ExtentionDrawningMonorail.java diff --git a/src/MonorailHard/DrawningObjects/ExtentionDrawningMonorail.java b/src/MonorailHard/DrawningObjects/ExtentionDrawningMonorail.java new file mode 100644 index 0000000..37c36df --- /dev/null +++ b/src/MonorailHard/DrawningObjects/ExtentionDrawningMonorail.java @@ -0,0 +1,81 @@ +package MonorailHard.DrawningObjects; + +import MonorailHard.Entities.EntityLocomotive; + +import java.awt.*; + +public class ExtentionDrawningMonorail { + private static String getName(Color col){ + if(col.equals(Color.RED)) + return new String("RED"); + if(col.equals(Color.GREEN)) + return new String("GREEN"); + if(col.equals(Color.BLUE)) + return new String("BLUE"); + if(col.equals(Color.YELLOW)) + return new String("YELLOW"); + if(col.equals(Color.WHITE)) + return new String("WHITE"); + if(col.equals(Color.GRAY)) + return new String("GRAY"); + if(col.equals(Color.BLACK)) + return new String("BLACK"); + if(col.equals(Color.PINK)) + return new String("PINK"); + return null; + } + + private static Color getColor(String col){ + if(col.equals("RED")) + return Color.RED; + if(col.equals("GREEN")) + return Color.GREEN; + if(col.equals("BLUE")) + return Color.BLUE; + if(col.equals("YELLOW")) + return Color.YELLOW; + if(col.equals("WHITE")) + return Color.WHITE; + if(col.equals("GRAY")) + return Color.GRAY; + if(col.equals("BLACK")) + return Color.BLACK; + if(col.equals("PINK")) + return Color.PINK; + return null; + } + public static DrawningMonorail CreateDrawningMonorail(String info, char separatorForObject, + int width, int height){ + String[] strs = info.split(Character.toString(separatorForObject)); + if(strs.length == 5){ + return new DrawningMonorail(Integer.parseInt(strs[0]), + Integer.parseInt(strs[1]), getColor(strs[2]), + getColor(strs[3]), getColor(strs[4]), width, height); + } + if(strs.length == 9){ + return new DrawningLocomotive(Integer.parseInt(strs[0]), + Integer.parseInt(strs[1]), getColor(strs[2]), + getColor(strs[3]), getColor(strs[4]), + Integer.parseInt(strs[5]), width, height, Boolean.parseBoolean(strs[6]), + Boolean.parseBoolean(strs[7]), getColor(strs[8])); + } + return null; + } + public static String GetDataForSave(DrawningMonorail drawningMonorail, char separatorForObject){ + var monorail = drawningMonorail.EntityMonorail; + if(monorail == null) + return null; + String colName = getName(monorail.BodyColor); + var str = String.format("%d%c%d%c%s%c%s%c%s", monorail.Speed(), separatorForObject, (int)monorail.Weight(), + separatorForObject, getName(monorail.BodyColor), separatorForObject, + getName(monorail.WheelColor), separatorForObject, getName(monorail.TireColor)); + if(!(monorail instanceof EntityLocomotive)){ + return str; + } + var nstr = String.format("%s%c%d%c%b%c%b%c%s", str, separatorForObject, + drawningMonorail._wheelNumb, separatorForObject, ((EntityLocomotive) monorail).SecondCabine(), separatorForObject, + ((EntityLocomotive) monorail).MagniteRail(), separatorForObject, + getName(((EntityLocomotive) monorail).AdditionalColor)); + return nstr; + } +} diff --git a/src/MonorailHard/FormMonorailCollection.java b/src/MonorailHard/FormMonorailCollection.java index 9a12af7..dd874cb 100644 --- a/src/MonorailHard/FormMonorailCollection.java +++ b/src/MonorailHard/FormMonorailCollection.java @@ -1,18 +1,44 @@ package MonorailHard; import MonorailHard.DrawningObjects.DrawningMonorail; +import MonorailHard.DrawningObjects.ExtentionDrawningMonorail; import MonorailHard.Generics.MonorailGenericCollection; import MonorailHard.Generics.MonorailGenericStorage; import MonorailHard.Generics.MonorailTrashCollection; import MonorailHard.MovementStrategy.DrawningObjectMonorail; import javax.swing.*; +import javax.swing.filechooser.FileFilter; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; +import java.io.File; +import java.io.FileNotFoundException; +import java.io.FileWriter; +import java.io.IOException; import java.text.Normalizer; +import java.util.HashMap; import java.util.List; +import java.util.Map; +import java.util.Scanner; +class TxtSaveFilter extends FileFilter { + @Override + public boolean accept(File f) { + if (f.isDirectory()) { + return false; + } + + String s = f.getName().toLowerCase(); + + return s.endsWith(".txt"); + } + + @Override + public String getDescription() { + return "*.txt"; + } +} public class FormMonorailCollection { private final MonorailGenericStorage _storage; @@ -43,7 +69,50 @@ public class FormMonorailCollection { listBoxStorages.setSelectedIndex(index); } + public boolean LoadCollection(File f) throws FileNotFoundException { + if(!f.exists()) + return false; + StringBuilder bufferTextFromFile =new StringBuilder(); + Scanner s = new Scanner(f); + while(s.hasNext()) + bufferTextFromFile.append(s.next() + "\n"); + s.close(); + var strs = bufferTextFromFile.toString().split("\n"); + if(strs == null || strs.length == 0) + return false; + if (!strs[0].startsWith("MonorailCollection")) + return false; + String collectionName = strs[1]; + MonorailGenericCollection collection = new MonorailGenericCollection<>(pictureBoxWidth, pictureBoxHeight); + String[] monorailsInfo = strs[2].split(Character.toString(MonorailGenericCollection._separatorRecords)); + for(String data : monorailsInfo){ + DrawningMonorail monorail = ExtentionDrawningMonorail.CreateDrawningMonorail(data, + MonorailGenericCollection._separatorForObject, pictureBoxWidth, pictureBoxHeight); + if (monorail != null) + { + if (!(collection.Insert(monorail))) + { + return false; + } + } + } + _storage.AddSetFromFile(collectionName, collection); + ReloadObjects(); + return true; + } + public FormMonorailCollection(){ + JMenuBar menuFile = new JMenuBar(); + JMenu file = new JMenu("Файл"); + menuFile.add(file); + JMenuItem saveFile = new JMenuItem("Сохранить"); + JMenuItem loadFile = new JMenuItem("Загрузить"); + JMenuItem saveCollection = new JMenuItem("Сохранить коллекцию"); + JMenuItem loadCollection = new JMenuItem("Загрузить коллекцию"); + file.add(saveCollection); + file.add(loadCollection); + file.add(saveFile); + file.add(loadFile); MonorailTrashCollection _trashCollection = new MonorailTrashCollection<>(); JButton callTrashButton = new JButton("мусор"); _storage = new MonorailGenericStorage(pictureBoxWidth, pictureBoxHeight); @@ -78,11 +147,94 @@ public class FormMonorailCollection { toolBox.add(refreshButton); toolBox.add(callTrashButton); collectionFrame.add(toolBox); + collectionFrame.setJMenuBar(menuFile); collectionFrame.add(canv); collectionFrame.setVisible(true); canv._storage = _storage; canv.listBoxStorages = listBoxStorages; + saveFile.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + JFileChooser fc = new JFileChooser(); + fc.addChoosableFileFilter(new TxtSaveFilter()); + int retrieval = fc.showSaveDialog(null); + + if (retrieval == JFileChooser.APPROVE_OPTION) { + File file = new File(fc.getSelectedFile() + "." + "txt"); + + try { + _storage.SaveData(file); + } catch (IOException ex) { + throw new RuntimeException(ex); + } + } + } + }); + + saveCollection.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + JFileChooser fc = new JFileChooser(); + fc.addChoosableFileFilter(new TxtSaveFilter()); + int retrieval = fc.showSaveDialog(null); + + if (retrieval == JFileChooser.APPROVE_OPTION) { + File file = new File(fc.getSelectedFile() + "." + "txt"); + + try { + if(listBoxStorages.getSelectedIndex() == -1) { + return; + } + _storage._monorailStorages.get(listBoxStorages.getSelectedValue()).SaveData(file, listBoxStorages.getSelectedValue()); + ReloadObjects(); + } catch (IOException ex) { + throw new RuntimeException(ex); + } + } + } + }); + + loadFile.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + JFileChooser fc = new JFileChooser(); + int ret = fc.showDialog(null, "Открыть файл"); + if(ret == JFileChooser.APPROVE_OPTION){ + File file = fc.getSelectedFile(); + try { + _storage.LoadData(file); + canv._storage =_storage; + ReloadObjects(); + canv.repaint(); + } catch (IOException ex) { + throw new RuntimeException(ex); + } + } + + } + }); + + loadCollection.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + JFileChooser fc = new JFileChooser(); + int ret = fc.showDialog(null, "Открыть файл"); + if(ret == JFileChooser.APPROVE_OPTION){ + File file = fc.getSelectedFile(); + try { + LoadCollection(file); + canv._storage =_storage; + ReloadObjects(); + canv.repaint(); + } catch (IOException ex) { + throw new RuntimeException(ex); + } + } + + } + }); + addStorageButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { @@ -99,7 +251,7 @@ public class FormMonorailCollection { if(listBoxStorages.getSelectedIndex() == -1) { return; } - _storage.DelSet(listBoxStorages.getSelectedValue()); + _storage.DelSet(listBoxStorages.getSelectedValue(), _trashCollection); ReloadObjects(); } }); @@ -213,4 +365,5 @@ class CollectionCanvas extends JComponent { g2d.drawImage(_storage.Get(listBoxStorages.getSelectedValue()).ShowMonorails(), 0, 0, this); super.repaint(); } + } diff --git a/src/MonorailHard/Generics/MonorailGenericCollection.java b/src/MonorailHard/Generics/MonorailGenericCollection.java index bae1ce8..beda094 100644 --- a/src/MonorailHard/Generics/MonorailGenericCollection.java +++ b/src/MonorailHard/Generics/MonorailGenericCollection.java @@ -1,14 +1,24 @@ package MonorailHard.Generics; import MonorailHard.DrawningObjects.DrawningMonorail; +import MonorailHard.DrawningObjects.ExtentionDrawningMonorail; +import MonorailHard.MovementStrategy.DrawningObjectMonorail; import MonorailHard.MovementStrategy.IMoveableObject; import java.awt.*; import java.awt.image.BufferedImage; +import java.io.File; +import java.io.FileWriter; +import java.io.IOException; +import java.util.ArrayList; +import java.util.Map; public class MonorailGenericCollection { private final int _pictureWidth; + public static char _separatorRecords = ';'; + public static char _separatorForObject = ':'; + private final int _pictureHeight; private final int _placeSizeWidth = 133; @@ -16,6 +26,33 @@ public class MonorailGenericCollection _collection; + public ArrayList GetMonorails(){ + return _collection.GetMonorails(_collection.Count); + } + + public boolean SaveData(File f, String name) throws IOException { + if(f.exists()) { + f.delete(); + } + f.createNewFile(); + StringBuilder data = new StringBuilder(); + data.append("MonorailCollection\n"); + data.append(String.format("%s\n", name)); + StringBuilder records = new StringBuilder(); + for(DrawningMonorail elem : GetMonorails()) + { + records.append(String.format("%s%c", ExtentionDrawningMonorail.GetDataForSave(elem, _separatorForObject), + _separatorRecords)); + } + data.append(records); + if(data.length() == 0) + return false; + FileWriter writer = new FileWriter(f); + writer.write(data.toString()); + writer.flush(); + writer.close(); + return true; + } public MonorailGenericCollection(int picWidth, int picHeight){ int width = picWidth / _placeSizeWidth; diff --git a/src/MonorailHard/Generics/MonorailGenericStorage.java b/src/MonorailHard/Generics/MonorailGenericStorage.java index 0508e68..6c98ca2 100644 --- a/src/MonorailHard/Generics/MonorailGenericStorage.java +++ b/src/MonorailHard/Generics/MonorailGenericStorage.java @@ -1,16 +1,81 @@ package MonorailHard.Generics; import MonorailHard.DrawningObjects.DrawningMonorail; +import MonorailHard.DrawningObjects.ExtentionDrawningMonorail; import MonorailHard.MovementStrategy.DrawningObjectMonorail; -import java.util.Dictionary; -import java.util.HashMap; -import java.util.List; -import java.util.Queue; +import javax.xml.crypto.dsig.keyinfo.KeyValue; +import java.io.*; +import java.util.*; import java.util.stream.Collectors; public class MonorailGenericStorage { - final HashMap> _monorailStorages; + public final HashMap> _monorailStorages; + private static final char _separatorForKeyValue = '|'; + private final char _separatorRecords = ';'; + private static final char _separatorForObject = ':'; + + public boolean SaveData(File f) throws IOException { + if(f.exists()) { + f.delete(); + } + f.createNewFile(); + StringBuilder data = new StringBuilder(); + data.append("MonorailStorage\n"); + for(Map.Entry> record : _monorailStorages.entrySet()){ + StringBuilder records = new StringBuilder(); + for(DrawningMonorail elem : record.getValue().GetMonorails()) + { + records.append(String.format("%s%c", ExtentionDrawningMonorail.GetDataForSave(elem, _separatorForObject), + _separatorRecords)); + } + data.append(String.format("%s%c%s\n", record.getKey(), _separatorForKeyValue, records.toString())); + } + if(data.length() == 0) + return false; + FileWriter writer = new FileWriter(f); + writer.write(data.toString()); + writer.flush(); + writer.close(); + return true; + } + public boolean LoadData(File f) throws FileNotFoundException { + if(!f.exists()) + return false; + StringBuilder bufferTextFromFile =new StringBuilder(); + Scanner s = new Scanner(f); + while(s.hasNext()) + bufferTextFromFile.append(s.next() + "\n"); + s.close(); + var strs = bufferTextFromFile.toString().split("\n"); + if(strs == null || strs.length == 0) + return false; + if (!strs[0].startsWith("MonorailStorage")) + return false; + _monorailStorages.clear(); + for(String data : strs){ + String st = new String("\\" + Character.toString( _separatorForKeyValue)); + String[]record = data.split(st); + if (record.length != 2) + continue; + MonorailGenericCollection collection = + new MonorailGenericCollection<>(_pictureWidth, _pictureHeight); + String[] set = record[1].split(Character.toString(_separatorRecords)); + for(String elem : set){ + DrawningMonorail monorail = ExtentionDrawningMonorail.CreateDrawningMonorail(elem, + _separatorForObject, _pictureWidth, _pictureHeight); + if (monorail != null) + { + if (!(collection.Insert(monorail))) + { + return false; + } + } + } + _monorailStorages.put(record[0], collection); + } + return true; + } public List Keys(){ if(_monorailStorages == null) return null; @@ -31,9 +96,20 @@ public class MonorailGenericStorage { _monorailStorages.put(name, new MonorailGenericCollection<>(_pictureWidth, _pictureHeight)); } - public void DelSet(String name){ + public void AddSetFromFile(String name, MonorailGenericCollection toAdd){ + if(_monorailStorages.containsKey(name)){ + _monorailStorages.remove(name); + } + _monorailStorages.put(name, toAdd); + } + + public void DelSet(String name, MonorailTrashCollection trashBox){ if(!_monorailStorages.containsKey(name)) return; + MonorailGenericCollection cur = _monorailStorages.get(name); + for(int i = 0; i < cur.Size(); i++) + trashBox.Push(cur.Get(i)); + _monorailStorages.remove(name); } -- 2.25.1 From baf8f8385581da679b9155eba59a5486124e7c27 Mon Sep 17 00:00:00 2001 From: gg12 darfren Date: Fri, 24 Nov 2023 17:04:38 +0400 Subject: [PATCH 2/3] All done --- .../DrawningObjects/DrawningMonorail.java | 24 ++++++++++++++- .../ExtentionDrawningMonorail.java | 29 ++++++++++++------- src/MonorailHard/FormMonorailCollection.java | 11 +++---- src/MonorailHard/FormMonorailConfig.java | 1 - .../Generics/MonorailGenericStorage.java | 4 ++- 5 files changed, 50 insertions(+), 19 deletions(-) diff --git a/src/MonorailHard/DrawningObjects/DrawningMonorail.java b/src/MonorailHard/DrawningObjects/DrawningMonorail.java index 87deca8..194de68 100644 --- a/src/MonorailHard/DrawningObjects/DrawningMonorail.java +++ b/src/MonorailHard/DrawningObjects/DrawningMonorail.java @@ -46,9 +46,31 @@ public class DrawningMonorail { DrawningWheels = new DrawningWheelsCart(_monorailWidth - dif, _monorailHeight,_startPosX,_startPosY,wheelColor,tireColor); else DrawningWheels = new DrawningWheelsOrn(_monorailWidth - dif, _monorailHeight,_startPosX,_startPosY,wheelColor,tireColor); - DrawningWheels.ChangeWheelsNumb(rand.nextInt(1, 6)); + DrawningWheels.ChangeWheelsNumb(rand.nextInt(4)); } + public int GetIDrawType(){ + if(DrawningWheels instanceof DrawningWheels) + return 0; + if(DrawningWheels instanceof DrawningWheelsCart) + return 1; + if(DrawningWheels instanceof DrawningWheelsOrn) + return 2; + return -1; + } + + public void ChangeIDraw(int variant){ + IDraw cur; + int dif = _monorailWidth / 10; + if(variant == 0) + cur = new DrawningWheels(_monorailWidth - dif, _monorailHeight,_startPosX,_startPosY,Color.GRAY,Color.BLACK); + else if(variant == 1) + cur = new DrawningWheelsCart(_monorailWidth - dif, _monorailHeight,_startPosX,_startPosY, Color.GRAY,Color.BLACK); + else + cur = new DrawningWheelsOrn(_monorailWidth - dif, _monorailHeight,_startPosX,_startPosY,Color.GRAY, Color.BLACK); + ChangeIDraw(cur); + + } public void ChangeIDraw(IDraw obj){ DrawningWheels = obj; obj.ChangeWheelsNumb(_wheelNumb); diff --git a/src/MonorailHard/DrawningObjects/ExtentionDrawningMonorail.java b/src/MonorailHard/DrawningObjects/ExtentionDrawningMonorail.java index 37c36df..adc34af 100644 --- a/src/MonorailHard/DrawningObjects/ExtentionDrawningMonorail.java +++ b/src/MonorailHard/DrawningObjects/ExtentionDrawningMonorail.java @@ -47,17 +47,23 @@ public class ExtentionDrawningMonorail { public static DrawningMonorail CreateDrawningMonorail(String info, char separatorForObject, int width, int height){ String[] strs = info.split(Character.toString(separatorForObject)); - if(strs.length == 5){ - return new DrawningMonorail(Integer.parseInt(strs[0]), + if(strs.length == 7){ + DrawningMonorail toRet = new DrawningMonorail(Integer.parseInt(strs[0]), Integer.parseInt(strs[1]), getColor(strs[2]), getColor(strs[3]), getColor(strs[4]), width, height); + toRet.ChangeWheelsNumb(Integer.parseInt(strs[5])); + toRet.ChangeIDraw(Integer.parseInt(strs[6])); + return toRet; } - if(strs.length == 9){ - return new DrawningLocomotive(Integer.parseInt(strs[0]), + if(strs.length == 10){ + DrawningMonorail toRet = new DrawningLocomotive(Integer.parseInt(strs[0]), Integer.parseInt(strs[1]), getColor(strs[2]), getColor(strs[3]), getColor(strs[4]), - Integer.parseInt(strs[5]), width, height, Boolean.parseBoolean(strs[6]), - Boolean.parseBoolean(strs[7]), getColor(strs[8])); + 4, width, height, Boolean.parseBoolean(strs[7]), + Boolean.parseBoolean(strs[8]), getColor(strs[9])); + toRet.ChangeWheelsNumb(Integer.parseInt(strs[5])); + toRet.ChangeIDraw(Integer.parseInt(strs[6])); + return toRet; } return null; } @@ -66,16 +72,17 @@ public class ExtentionDrawningMonorail { if(monorail == null) return null; String colName = getName(monorail.BodyColor); - var str = String.format("%d%c%d%c%s%c%s%c%s", monorail.Speed(), separatorForObject, (int)monorail.Weight(), + var str = String.format("%d%c%d%c%s%c%s%c%s%c%d%c%d", monorail.Speed(), separatorForObject, (int)monorail.Weight(), separatorForObject, getName(monorail.BodyColor), separatorForObject, - getName(monorail.WheelColor), separatorForObject, getName(monorail.TireColor)); + getName(monorail.WheelColor), separatorForObject, getName(monorail.TireColor), separatorForObject, + drawningMonorail._wheelNumb, separatorForObject, drawningMonorail.GetIDrawType()); if(!(monorail instanceof EntityLocomotive)){ return str; } - var nstr = String.format("%s%c%d%c%b%c%b%c%s", str, separatorForObject, - drawningMonorail._wheelNumb, separatorForObject, ((EntityLocomotive) monorail).SecondCabine(), separatorForObject, + var nstr = String.format("%s%c%b%c%b%c%s", str, separatorForObject, + ((EntityLocomotive) monorail).SecondCabine(), separatorForObject, ((EntityLocomotive) monorail).MagniteRail(), separatorForObject, - getName(((EntityLocomotive) monorail).AdditionalColor)); + getName(((EntityLocomotive) monorail).AdditionalColor), separatorForObject); return nstr; } } diff --git a/src/MonorailHard/FormMonorailCollection.java b/src/MonorailHard/FormMonorailCollection.java index dd874cb..d491e88 100644 --- a/src/MonorailHard/FormMonorailCollection.java +++ b/src/MonorailHard/FormMonorailCollection.java @@ -85,7 +85,8 @@ public class FormMonorailCollection { String collectionName = strs[1]; MonorailGenericCollection collection = new MonorailGenericCollection<>(pictureBoxWidth, pictureBoxHeight); String[] monorailsInfo = strs[2].split(Character.toString(MonorailGenericCollection._separatorRecords)); - for(String data : monorailsInfo){ + for(int i = monorailsInfo.length-1; i >= 0; i--){ + String data = monorailsInfo[i]; DrawningMonorail monorail = ExtentionDrawningMonorail.CreateDrawningMonorail(data, MonorailGenericCollection._separatorForObject, pictureBoxWidth, pictureBoxHeight); if (monorail != null) @@ -156,7 +157,7 @@ public class FormMonorailCollection { saveFile.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { - JFileChooser fc = new JFileChooser(); + JFileChooser fc = new JFileChooser("C:\\Users\\frenk\\OneDrive\\Рабочий стол\\lab6saves"); fc.addChoosableFileFilter(new TxtSaveFilter()); int retrieval = fc.showSaveDialog(null); @@ -175,7 +176,7 @@ public class FormMonorailCollection { saveCollection.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { - JFileChooser fc = new JFileChooser(); + JFileChooser fc = new JFileChooser("C:\\Users\\frenk\\OneDrive\\Рабочий стол\\lab6saves"); fc.addChoosableFileFilter(new TxtSaveFilter()); int retrieval = fc.showSaveDialog(null); @@ -198,7 +199,7 @@ public class FormMonorailCollection { loadFile.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { - JFileChooser fc = new JFileChooser(); + JFileChooser fc = new JFileChooser("C:\\Users\\frenk\\OneDrive\\Рабочий стол\\lab6saves"); int ret = fc.showDialog(null, "Открыть файл"); if(ret == JFileChooser.APPROVE_OPTION){ File file = fc.getSelectedFile(); @@ -218,7 +219,7 @@ public class FormMonorailCollection { loadCollection.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { - JFileChooser fc = new JFileChooser(); + JFileChooser fc = new JFileChooser("C:\\Users\\frenk\\OneDrive\\Рабочий стол\\lab6saves"); int ret = fc.showDialog(null, "Открыть файл"); if(ret == JFileChooser.APPROVE_OPTION){ File file = fc.getSelectedFile(); diff --git a/src/MonorailHard/FormMonorailConfig.java b/src/MonorailHard/FormMonorailConfig.java index 8cde07e..d40f78b 100644 --- a/src/MonorailHard/FormMonorailConfig.java +++ b/src/MonorailHard/FormMonorailConfig.java @@ -362,7 +362,6 @@ public class FormMonorailConfig { String data = (String) support.getTransferable().getTransferData(DataFlavor.stringFlavor); switch (data) { case "Простой": - _monorail = new DrawningMonorail(speed, weight, Color.WHITE, Color.GRAY, Color.BLACK, _pictureBoxWidth, _pictureBoxHeight); _monorail.ChangeWheelsNumb(wheelNumb); diff --git a/src/MonorailHard/Generics/MonorailGenericStorage.java b/src/MonorailHard/Generics/MonorailGenericStorage.java index 6c98ca2..add514a 100644 --- a/src/MonorailHard/Generics/MonorailGenericStorage.java +++ b/src/MonorailHard/Generics/MonorailGenericStorage.java @@ -61,7 +61,9 @@ public class MonorailGenericStorage { MonorailGenericCollection collection = new MonorailGenericCollection<>(_pictureWidth, _pictureHeight); String[] set = record[1].split(Character.toString(_separatorRecords)); - for(String elem : set){ + + for(int i = set.length -1; i >=0; i--){ + String elem = set[i]; DrawningMonorail monorail = ExtentionDrawningMonorail.CreateDrawningMonorail(elem, _separatorForObject, _pictureWidth, _pictureHeight); if (monorail != null) -- 2.25.1 From 4a7d61a167cdf3d4b0951c6d1db6e808aedbc5a0 Mon Sep 17 00:00:00 2001 From: gg12 darfren Date: Tue, 28 Nov 2023 12:07:33 +0400 Subject: [PATCH 3/3] =?UTF-8?q?=D0=A1=D0=B4=D0=B0=D0=BD=D0=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/MonorailHard/FormMonorailCollection.java | 36 +---------------- .../Generics/MonorailGenericCollection.java | 6 ++- .../Generics/MonorailGenericStorage.java | 40 +++++++++++++++++++ 3 files changed, 47 insertions(+), 35 deletions(-) diff --git a/src/MonorailHard/FormMonorailCollection.java b/src/MonorailHard/FormMonorailCollection.java index d491e88..50968cd 100644 --- a/src/MonorailHard/FormMonorailCollection.java +++ b/src/MonorailHard/FormMonorailCollection.java @@ -69,38 +69,7 @@ public class FormMonorailCollection { listBoxStorages.setSelectedIndex(index); } - public boolean LoadCollection(File f) throws FileNotFoundException { - if(!f.exists()) - return false; - StringBuilder bufferTextFromFile =new StringBuilder(); - Scanner s = new Scanner(f); - while(s.hasNext()) - bufferTextFromFile.append(s.next() + "\n"); - s.close(); - var strs = bufferTextFromFile.toString().split("\n"); - if(strs == null || strs.length == 0) - return false; - if (!strs[0].startsWith("MonorailCollection")) - return false; - String collectionName = strs[1]; - MonorailGenericCollection collection = new MonorailGenericCollection<>(pictureBoxWidth, pictureBoxHeight); - String[] monorailsInfo = strs[2].split(Character.toString(MonorailGenericCollection._separatorRecords)); - for(int i = monorailsInfo.length-1; i >= 0; i--){ - String data = monorailsInfo[i]; - DrawningMonorail monorail = ExtentionDrawningMonorail.CreateDrawningMonorail(data, - MonorailGenericCollection._separatorForObject, pictureBoxWidth, pictureBoxHeight); - if (monorail != null) - { - if (!(collection.Insert(monorail))) - { - return false; - } - } - } - _storage.AddSetFromFile(collectionName, collection); - ReloadObjects(); - return true; - } + public FormMonorailCollection(){ JMenuBar menuFile = new JMenuBar(); @@ -224,8 +193,7 @@ public class FormMonorailCollection { if(ret == JFileChooser.APPROVE_OPTION){ File file = fc.getSelectedFile(); try { - LoadCollection(file); - canv._storage =_storage; + _storage.LoadCollection(file); ReloadObjects(); canv.repaint(); } catch (IOException ex) { diff --git a/src/MonorailHard/Generics/MonorailGenericCollection.java b/src/MonorailHard/Generics/MonorailGenericCollection.java index beda094..a3847ee 100644 --- a/src/MonorailHard/Generics/MonorailGenericCollection.java +++ b/src/MonorailHard/Generics/MonorailGenericCollection.java @@ -25,7 +25,7 @@ public class MonorailGenericCollection _collection; + private SetGeneric _collection; public ArrayList GetMonorails(){ return _collection.GetMonorails(_collection.Count); } @@ -126,4 +126,8 @@ public class MonorailGenericCollection(_pictureWidth * _pictureHeight); + } } diff --git a/src/MonorailHard/Generics/MonorailGenericStorage.java b/src/MonorailHard/Generics/MonorailGenericStorage.java index add514a..4f05b38 100644 --- a/src/MonorailHard/Generics/MonorailGenericStorage.java +++ b/src/MonorailHard/Generics/MonorailGenericStorage.java @@ -78,6 +78,42 @@ public class MonorailGenericStorage { } return true; } + + public boolean LoadCollection(File f) throws FileNotFoundException { + if(!f.exists()) + return false; + StringBuilder bufferTextFromFile =new StringBuilder(); + Scanner s = new Scanner(f); + while(s.hasNext()) + bufferTextFromFile.append(s.next() + "\n"); + s.close(); + var strs = bufferTextFromFile.toString().split("\n"); + if(strs == null || strs.length == 0) + return false; + if (!strs[0].startsWith("MonorailCollection")) + return false; + String collectionName = strs[1]; + MonorailGenericCollection collection = GetCollection(collectionName); + if(collection == null) + collection = new MonorailGenericCollection<>(_pictureWidth, _pictureHeight); + else + collection.Clear(); + String[] monorailsInfo = strs[2].split(Character.toString(MonorailGenericCollection._separatorRecords)); + for(int i = monorailsInfo.length-1; i >= 0; i--){ + String data = monorailsInfo[i]; + DrawningMonorail monorail = ExtentionDrawningMonorail.CreateDrawningMonorail(data, + MonorailGenericCollection._separatorForObject, _pictureWidth, _pictureHeight); + if (monorail != null) + { + if (!(collection.Insert(monorail))) + { + return false; + } + } + } + AddSetFromFile(collectionName, collection); + return true; + } public List Keys(){ if(_monorailStorages == null) return null; @@ -124,4 +160,8 @@ public class MonorailGenericStorage { public DrawningMonorail Get(String collectionName, int position){ return _monorailStorages.get(collectionName).Get(position); } + + public MonorailGenericCollection GetCollection(String collectionName){ + return _monorailStorages.get(collectionName); + } } -- 2.25.1