diff --git a/WarmlyShip/src/CollectionAdditionalObjects/AdditionalCollections.java b/WarmlyShip/src/CollectionAdditionalObjects/AdditionalCollections.java index 56aa2c9..ef5318a 100644 --- a/WarmlyShip/src/CollectionAdditionalObjects/AdditionalCollections.java +++ b/WarmlyShip/src/CollectionAdditionalObjects/AdditionalCollections.java @@ -6,10 +6,7 @@ import DrawingShip.DrawingWarmlyShip; import Entities.EntityShip; import Entities.EntityWarmlyShip; -import java.awt.*; import java.lang.reflect.Array; -import java.util.ArrayList; -import java.util.List; import java.util.Random; public class AdditionalCollections { diff --git a/WarmlyShip/src/CollectionGenericObjects/AbstractCompany.java b/WarmlyShip/src/CollectionGenericObjects/AbstractCompany.java index 1de5e3b..d87c264 100644 --- a/WarmlyShip/src/CollectionGenericObjects/AbstractCompany.java +++ b/WarmlyShip/src/CollectionGenericObjects/AbstractCompany.java @@ -18,7 +18,7 @@ public abstract class AbstractCompany { _pictureWidth = picWidth; _pictureHeight = picHeight; _collection = collection; - _collection.SetMaxCount(GetMaxCount(), (Class) DrawingShip.class); + _collection.SetMaxCount(GetMaxCount()); } //перегрузка операторов в джаве не возможна public DrawingShip GetRandomObject() diff --git a/WarmlyShip/src/CollectionGenericObjects/CollectionType.java b/WarmlyShip/src/CollectionGenericObjects/CollectionType.java new file mode 100644 index 0000000..bba944c --- /dev/null +++ b/WarmlyShip/src/CollectionGenericObjects/CollectionType.java @@ -0,0 +1,7 @@ +package CollectionGenericObjects; + +public enum CollectionType { + None, + Massive, + List +} diff --git a/WarmlyShip/src/CollectionGenericObjects/ICollectionGenericObjects.java b/WarmlyShip/src/CollectionGenericObjects/ICollectionGenericObjects.java index 9e865e8..3fc89c1 100644 --- a/WarmlyShip/src/CollectionGenericObjects/ICollectionGenericObjects.java +++ b/WarmlyShip/src/CollectionGenericObjects/ICollectionGenericObjects.java @@ -3,10 +3,8 @@ package CollectionGenericObjects; public interface ICollectionGenericObjects { int getCount(); - void SetMaxCount(int count, Class type); + void SetMaxCount(int count); int Insert(T obj); - //подумать что делать с этим методом - int Insert(T obj, int position); T Remove(int position); T Get(int position); } diff --git a/WarmlyShip/src/CollectionGenericObjects/ListGenericObjects.java b/WarmlyShip/src/CollectionGenericObjects/ListGenericObjects.java new file mode 100644 index 0000000..bcbc1a7 --- /dev/null +++ b/WarmlyShip/src/CollectionGenericObjects/ListGenericObjects.java @@ -0,0 +1,41 @@ +package CollectionGenericObjects; + +import java.util.ArrayList; +import java.util.List; +public class ListGenericObjects implements ICollectionGenericObjects { + private List _collection; + private int _maxCount; + public int getCount() { + return _collection.size(); + } + @Override + public void SetMaxCount(int size) { + if (size > 0) { + _maxCount = size; + } + } + public ListGenericObjects() { + _collection = new ArrayList(); + } + @Override + public T Get(int position) + { + if (position >= getCount() || position < 0) return null; + return _collection.get(position); + } + @Override + public int Insert(T obj) + { + if (getCount() == _maxCount) return -1; + _collection.add(obj); + return getCount(); + } + @Override + public T Remove(int position) + { + if (position >= getCount() || position < 0) return null; + T obj = _collection.get(position); + _collection.remove(position); + return obj; + } +} diff --git a/WarmlyShip/src/CollectionGenericObjects/MassiveGenericObjects.java b/WarmlyShip/src/CollectionGenericObjects/MassiveGenericObjects.java index 1779b68..c708376 100644 --- a/WarmlyShip/src/CollectionGenericObjects/MassiveGenericObjects.java +++ b/WarmlyShip/src/CollectionGenericObjects/MassiveGenericObjects.java @@ -1,16 +1,19 @@ package CollectionGenericObjects; +import DrawingShip.DrawingShip; + import java.lang.reflect.Array; -import java.util.ArrayList; -import java.util.List; public class MassiveGenericObjects implements ICollectionGenericObjects{ - private T[] _collection; + private T[] _collection = null; private int Count; - public void SetMaxCount(int size, Class type) { + @Override + public void SetMaxCount(int size) { if (size > 0) { - _collection = (T[]) Array.newInstance(type, size); - Count = size; + if (_collection == null) { + _collection = (T[]) Array.newInstance((Class) DrawingShip.class, size); + Count = size; + } } } @Override @@ -32,36 +35,6 @@ public class MassiveGenericObjects implements ICollectionGenericObjects{ return -1; } @Override - public int Insert(T obj, int position) { - if (position >= getCount() || position < 0) - return -1; - if (_collection[position] == null) { - _collection[position] = obj; - return position; - } - int index = position + 1; - while (index < getCount()) - { - if (_collection[index] == null) - { - _collection[index] = obj; - return index; - } - ++index; - } - index = position - 1; - while (index >= 0) - { - if (_collection[index] == null) - { - _collection[index] = obj; - return index; - } - --index; - } - return -1; - } - @Override public T Remove(int position) { if (position >= getCount() || position < 0) return null; diff --git a/WarmlyShip/src/CollectionGenericObjects/StorageCollection.java b/WarmlyShip/src/CollectionGenericObjects/StorageCollection.java new file mode 100644 index 0000000..3fcf559 --- /dev/null +++ b/WarmlyShip/src/CollectionGenericObjects/StorageCollection.java @@ -0,0 +1,43 @@ +package CollectionGenericObjects; + +import DrawingShip.DrawingShip; + +import java.util.*; + +public class StorageCollection { + private Map> _storages; + public StorageCollection() + { + _storages = new HashMap>(); + } + public Set Keys() { + Set keys = _storages.keySet(); + return keys; + } + public void AddCollection(String name, CollectionType collectionType) + { + if (_storages.containsKey(name)) return; + if (collectionType == CollectionType.None) return; + else if (collectionType == CollectionType.Massive) + _storages.put(name, new MassiveGenericObjects()); + else if (collectionType == CollectionType.List) + _storages.put(name, new ListGenericObjects()); + } + public void DelCollection(String name) + { + if (_storages.containsKey(name)) + _storages.remove(name); + } + // в джаве отсутствуют индикаторы + public ICollectionGenericObjects getCollectionObject(String name) { + if (_storages.containsKey(name)) + return _storages.get(name); + return null; + } + //дополнительное задание номер 1 + public T Get(String name, int position){ + if(_storages.containsKey(name)) + return _storages.get(name).Remove(position); + return null; + } +} diff --git a/WarmlyShip/src/DrawingShip/CanvasFormShipCollection.java b/WarmlyShip/src/DrawingShip/CanvasFormShipCollection.java index 4559430..01f9908 100644 --- a/WarmlyShip/src/DrawingShip/CanvasFormShipCollection.java +++ b/WarmlyShip/src/DrawingShip/CanvasFormShipCollection.java @@ -1,16 +1,12 @@ package DrawingShip; import CollectionGenericObjects.AbstractCompany; -import CollectionGenericObjects.ICollectionGenericObjects; -import CollectionGenericObjects.MassiveGenericObjects; import javax.swing.*; import java.awt.*; public class CanvasFormShipCollection extends JComponent { - //неиспользуемые методы - public ICollectionGenericObjects collection = new MassiveGenericObjects(); public AbstractCompany company = null; public void SetCollectionToCanvas(AbstractCompany company) { this.company = company; diff --git a/WarmlyShip/src/FormAdditionalCollection.java b/WarmlyShip/src/FormAdditionalCollection.java index 63c302c..849c2dc 100644 --- a/WarmlyShip/src/FormAdditionalCollection.java +++ b/WarmlyShip/src/FormAdditionalCollection.java @@ -35,7 +35,6 @@ public class FormAdditionalCollection extends JFrame { buttonGenerate.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { - drawingShip = additionalCollection.CreateAdditionalCollectionShip(); drawingShip.SetPictureSize(getWidth(), getHeight()); drawingShip.SetPosition(50,50); diff --git a/WarmlyShip/src/FormShipCollection.java b/WarmlyShip/src/FormShipCollection.java index 3b09d7b..e1ee3ee 100644 --- a/WarmlyShip/src/FormShipCollection.java +++ b/WarmlyShip/src/FormShipCollection.java @@ -1,9 +1,8 @@ -import CollectionGenericObjects.AbstractCompany; -import CollectionGenericObjects.MassiveGenericObjects; -import CollectionGenericObjects.ShipPortService; +import CollectionGenericObjects.*; import DrawingShip.CanvasFormShipCollection; import DrawingShip.DrawingShip; import DrawingShip.DrawingWarmlyShip; +import Entities.EntityShip; import javax.swing.*; import javax.swing.text.MaskFormatter; @@ -14,6 +13,7 @@ import java.awt.event.ComponentAdapter; import java.awt.event.ComponentEvent; import java.text.ParseException; import java.util.Random; +import java.util.Stack; import static java.lang.Integer.parseInt; @@ -22,11 +22,21 @@ public class FormShipCollection extends JFrame{ private Dimension dimension; public static CanvasFormShipCollection _canvasWarmlyShip = new CanvasFormShipCollection(); private static AbstractCompany _company = null; + private Stack _collectionRemoveObjects = new Stack(); + private StorageCollection _storageCollection = new StorageCollection(); + private JTextField textBoxCollection = new JTextField(); + private JRadioButton radioButtonMassive = new JRadioButton("Massive"); + private JRadioButton radioButtonList = new JRadioButton("List"); + private JButton buttonAddCollection = new JButton("Add"); + private JList listBoxCollection = new JList(); + private JButton buttonRemoveCollection = new JButton("Remove"); + private JButton buttonCreateCompany = new JButton("Create company"); private JButton CreateButton = new JButton("Create warmlyship");; private JButton CreateShipButton = new JButton("Create ship"); private JButton RemoveButton = new JButton("Remove"); private JButton GoToCheckButton = new JButton("Check"); private JButton RandomButton = new JButton("RandomShip"); + private JButton RemoveObjectsButton = new JButton("Show remove"); private JButton RefreshButton = new JButton("Refresh"); private JComboBox ComboBoxCollections = new JComboBox(new String[]{"", "Хранилище"}); private JFormattedTextField MaskedTextField; @@ -57,7 +67,7 @@ public class FormShipCollection extends JFrame{ break; default: return; } - if (_company._collection.Insert(drawingShip, 0) != -1) { + if (_company._collection.Insert(drawingShip) != -1) { JOptionPane.showMessageDialog(null, "Объект добавлен"); canvasShow(); } @@ -85,22 +95,9 @@ public class FormShipCollection extends JFrame{ MaskedTextField = new JFormattedTextField(mask); - ComboBoxCollections.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent e) { - switch (ComboBoxCollections.getSelectedItem().toString()) { - case "Хранилище": - _company = new ShipPortService(getWidth()-200, getHeight()-70, new MassiveGenericObjects()); - break; - } - } - }); - CreateShipButton.addActionListener(new ActionListener() { @Override - public void actionPerformed(ActionEvent e) { - CreateObject("DrawingShip"); - } + public void actionPerformed(ActionEvent e) { CreateObject("DrawingShip"); } }); CreateButton.addActionListener(new ActionListener() { @Override @@ -112,7 +109,8 @@ public class FormShipCollection extends JFrame{ RemoveButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { - if (_company == null || MaskedTextField.getText() == null) { + if (_company == null || MaskedTextField.getText() == null || + listBoxCollection.getSelectedValue().toString() == null) { return; } int pos = parseInt(MaskedTextField.getText()); @@ -120,8 +118,11 @@ public class FormShipCollection extends JFrame{ "Удалить", "Удаление", JOptionPane.YES_NO_OPTION); if (resultConfirmDialog == JOptionPane.NO_OPTION) return; - if (_company._collection.Remove(pos) != null) { + DrawingShip obj = _storageCollection.Get( + listBoxCollection.getSelectedValue().toString(), pos); + if (obj != null) { JOptionPane.showMessageDialog(null, "Объект удален"); + _collectionRemoveObjects.push(obj); canvasShow(); } else { @@ -180,41 +181,140 @@ public class FormShipCollection extends JFrame{ } }); + buttonAddCollection.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + if (textBoxCollection.getText().isEmpty() || (!radioButtonMassive.isSelected() + && !radioButtonList.isSelected())) { + JOptionPane.showMessageDialog(null, "Не все данные заполнены"); + return; + } + CollectionType collectionType = CollectionType.None; + if (radioButtonMassive.isSelected()) + { + collectionType = CollectionType.Massive; + } + else if (radioButtonList.isSelected()) + { + collectionType = CollectionType.List; + } + _storageCollection.AddCollection(textBoxCollection.getText(), collectionType); + RerfreshListBoxItems(); + } + }); + + buttonRemoveCollection.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + if (listBoxCollection.getSelectedIndex() < 0 || listBoxCollection.getSelectedValue() == null) { + JOptionPane.showMessageDialog(null, "Коллекция не выбрана"); + return; + } + int resultConfirmDialog = JOptionPane.showConfirmDialog(null, + "Удалить", "Удаление", + JOptionPane.YES_NO_OPTION); + if (resultConfirmDialog == JOptionPane.NO_OPTION) return; + _storageCollection.DelCollection(listBoxCollection.getSelectedValue().toString()); + RerfreshListBoxItems(); + } + }); + + buttonCreateCompany.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + if (listBoxCollection.getSelectedIndex() < 0 || listBoxCollection.getSelectedValue() == null) { + JOptionPane.showMessageDialog(null, "Коллекция не выбрана"); + return; + } + ICollectionGenericObjects collection = + _storageCollection.getCollectionObject(listBoxCollection.getSelectedValue().toString()); + if (collection == null) { + JOptionPane.showMessageDialog(null, "Коллекция не проинициализирована"); + return; + } + switch (ComboBoxCollections.getSelectedItem().toString()) { + case "Хранилище": + _company = new ShipPortService(getWidth()-200, getHeight()-70, + collection); + break; + } + RerfreshListBoxItems(); + } + }); + + RemoveObjectsButton.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + if (_collectionRemoveObjects.empty()) + { + return; + } + DrawingShip ship = null; + ship = _collectionRemoveObjects.pop(); + if (ship == null) + { + return; + } + FormWarmlyShip form = new FormWarmlyShip("Теплоход", new Dimension(900,565)); + form.Init(ship); + } + }); + + JLabel labelCollectionName = new JLabel("Название коллекции"); + ButtonGroup radiobuttonsGroup = new ButtonGroup(); + radiobuttonsGroup.add(radioButtonMassive); + radiobuttonsGroup.add(radioButtonList); + _canvasWarmlyShip.setBounds(0, 0, getWidth()-200, getHeight()); - ComboBoxCollections.setBounds(getWidth()-190, 10, 150, 20); - CreateShipButton.setBounds(getWidth()-190, 60, 150, 30); - CreateButton.setBounds(getWidth()-190, 100, 150, 30); - MaskedTextField.setBounds(getWidth()-190,200,150,30); - RemoveButton.setBounds(getWidth()-190, 240, 150, 30); - GoToCheckButton.setBounds(getWidth()-190, 280, 150, 30); - RandomButton.setBounds(getWidth()-190, 320, 150, 30); + labelCollectionName.setBounds(getWidth()-190, 10, 150, 20); + textBoxCollection.setBounds(getWidth()-190, 32, 150, 25); + radioButtonMassive.setBounds(getWidth()-190, 60, 75, 20); + radioButtonList.setBounds(getWidth()-105, 60, 50, 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, 235, 150, 20); + buttonCreateCompany.setBounds(getWidth()-190, 260, 150, 20); + CreateShipButton.setBounds(getWidth()-190, 295, 150, 30); + CreateButton.setBounds(getWidth()-190, 330, 150, 30); + MaskedTextField.setBounds(getWidth()-190,365,150,30); + RemoveButton.setBounds(getWidth()-190, 400, 150, 30); + GoToCheckButton.setBounds(getWidth()-190, 435, 150, 30); + RandomButton.setBounds(getWidth()-190, 470, 150, 30); + RemoveObjectsButton.setBounds(getWidth()-190, 505, 150, 30); RefreshButton.setBounds(getWidth()-190, getHeight()-90, 150, 30); setSize(dimension.width,dimension.height); setLayout(null); add(_canvasWarmlyShip); + add(labelCollectionName); + add(textBoxCollection); + add(radioButtonMassive); + add(radioButtonList); + add(buttonAddCollection); + add(listBoxCollection); + add(buttonRemoveCollection); add(ComboBoxCollections); + add(buttonCreateCompany); add(CreateShipButton); add(CreateButton); add(MaskedTextField); add(RemoveButton); add(GoToCheckButton); add(RandomButton); + add(RemoveObjectsButton); add(RefreshButton); setVisible(true); - - addComponentListener(new ComponentAdapter() { - public void componentResized(ComponentEvent e) { - _canvasWarmlyShip.setBounds(0, 0, getWidth()-200, getHeight()-70); - ComboBoxCollections.setBounds(getWidth()-190, 10, 150, 20); - CreateShipButton.setBounds(getWidth()-190, 60, 150, 30); - CreateButton.setBounds(getWidth()-190, 100, 150, 30); - MaskedTextField.setBounds(getWidth()-190,200,150,30); - RemoveButton.setBounds(getWidth()-190, 240, 150, 30); - GoToCheckButton.setBounds(getWidth()-190, 280, 150, 30); - RandomButton.setBounds(getWidth()-190, 320, 150, 30); - RefreshButton.setBounds(getWidth()-190, getHeight()-90, 150, 30); + } + private void RerfreshListBoxItems() + { + DefaultListModel list = new DefaultListModel(); + for (String name : _storageCollection.Keys()) { + if (name != "") + { + list.addElement(name); } - }); + } + listBoxCollection.setModel(list); } } diff --git a/WarmlyShip/src/FormWarmlyShip.java b/WarmlyShip/src/FormWarmlyShip.java index 14f7a6f..9673890 100644 --- a/WarmlyShip/src/FormWarmlyShip.java +++ b/WarmlyShip/src/FormWarmlyShip.java @@ -1,4 +1,3 @@ -import DrawingShip.CanvasFormShipCollection; import DrawingShip.CanvasWarmlyShip; import DrawingShip.DirectionType; import DrawingShip.DrawingShip; @@ -30,7 +29,6 @@ public class FormWarmlyShip extends JFrame { public void Init(DrawingShip ship) { setTitle(title); setMinimumSize(dimension); - setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); Width = getWidth() - 10; Height = getHeight() - 34;