From 04338dc2983087a1cb53d668dbb6f89f3a2508d7 Mon Sep 17 00:00:00 2001 From: "pyzhov.egor" <142977368+nxf1ve@users.noreply.github.com> Date: Tue, 9 Apr 2024 00:08:18 +0400 Subject: [PATCH] =?UTF-8?q?=D1=81=D0=B4=D0=B5=D0=BB=D0=B0=D0=BD=D0=BD?= =?UTF-8?q?=D0=B0=D1=8F=20=D1=80=D0=B0=D0=B1=D0=BE=D1=82=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../CollectionType.java | 16 ++ .../ListGenericCollection.java | 59 ++++++ .../StorageCollection.java | 48 +++++ .../Drawnings/DrawningAbstractCompany.java | 2 + .../src/Forms/FormBoatCollection.java | 184 +++++++++++++++--- .../Forms/FormBoatCollection$1.class | Bin 1703 -> 2281 bytes .../Forms/FormBoatCollection.class | Bin 7359 -> 12441 bytes 7 files changed, 282 insertions(+), 27 deletions(-) create mode 100644 ProjectCatamaran/src/CollectionGenericObjects/CollectionType.java create mode 100644 ProjectCatamaran/src/CollectionGenericObjects/ListGenericCollection.java create mode 100644 ProjectCatamaran/src/CollectionGenericObjects/StorageCollection.java diff --git a/ProjectCatamaran/src/CollectionGenericObjects/CollectionType.java b/ProjectCatamaran/src/CollectionGenericObjects/CollectionType.java new file mode 100644 index 0000000..cf2cfaa --- /dev/null +++ b/ProjectCatamaran/src/CollectionGenericObjects/CollectionType.java @@ -0,0 +1,16 @@ +package CollectionGenericObjects; + +public enum CollectionType { + None(0), + Massive(1), + List(2); + + final private int collectionTypeValue; + + CollectionType(int value){ + collectionTypeValue = value; + } + public int getCollectionTypeValue() { + return collectionTypeValue; + } +} diff --git a/ProjectCatamaran/src/CollectionGenericObjects/ListGenericCollection.java b/ProjectCatamaran/src/CollectionGenericObjects/ListGenericCollection.java new file mode 100644 index 0000000..6c12dc3 --- /dev/null +++ b/ProjectCatamaran/src/CollectionGenericObjects/ListGenericCollection.java @@ -0,0 +1,59 @@ +package CollectionGenericObjects; + +import Drawnings.DrawningBoat; + +import java.util.ArrayList; + +public class ListGenericCollection implements ICollectionGenericObjects { + private final ArrayList _collection; + public ListGenericCollection() { + _collection = new ArrayList<>(); + } + private int maxCount; + public int count; + @Override + public int getCount() { + return count; + } + @Override + public void setMaxCount(int count) { + maxCount = count; + } + @Override + public int insert(T obj) { + return insert(obj, count); + } + + @Override + public int insert(T obj, int index) { + if (index > maxCount || index < 0 || index > count){ + return -1; + } + if(index == count){ + _collection.add(obj); + } + else { + _collection.add(index, obj); + } + count = _collection.size(); + return index; + } + + @Override + public T remove(int index) { + if (index > maxCount || index < 0 || index >= count){ + return null; + } + count = _collection.size() - 1; + return _collection.remove(index); + + } + + @Override + public T get(int index) { + if (index >= count){ + return null; + } + return _collection.get(index); + } +} diff --git a/ProjectCatamaran/src/CollectionGenericObjects/StorageCollection.java b/ProjectCatamaran/src/CollectionGenericObjects/StorageCollection.java new file mode 100644 index 0000000..e3a76f3 --- /dev/null +++ b/ProjectCatamaran/src/CollectionGenericObjects/StorageCollection.java @@ -0,0 +1,48 @@ +package CollectionGenericObjects; + +import Drawnings.DrawningBoat; + +import java.util.ArrayList; +import java.util.HashMap; + +public class StorageCollection { + private final HashMap> _storages; + public final ArrayList keys; + + public StorageCollection() { + _storages = new HashMap<>(); + keys = new ArrayList<>(); + } + + public void addCollection(String name, CollectionType collectionType){ + if (_storages.containsKey(name) || name.isEmpty()){ + return; + } + switch (collectionType){ + case None: + return; + case Massive: + _storages.put(name, new MassiveGenericObjects<>()); + keys.add(name); + break; + case List: + _storages.put(name, new ListGenericCollection<>()); + keys.add(name); + break; + } + } + + public void delCollection(String name){ + _storages.remove(name); + keys.remove(name); + } + + public ICollectionGenericObjects getCollection(String name){ + return _storages.get(name); + } + + public T getObjectFromChooseCollection(String name, int ind){ + return this.getCollection(name).get(ind); + } + +} diff --git a/ProjectCatamaran/src/Drawnings/DrawningAbstractCompany.java b/ProjectCatamaran/src/Drawnings/DrawningAbstractCompany.java index 509fa07..0f635f7 100644 --- a/ProjectCatamaran/src/Drawnings/DrawningAbstractCompany.java +++ b/ProjectCatamaran/src/Drawnings/DrawningAbstractCompany.java @@ -89,6 +89,8 @@ public class DrawningAbstractCompany extends JComponent { if (boat == null) { return; } + JFrame.setDefaultLookAndFeelDecorated(false); + JFrame frame = new JFrame("Катамаран"); FormCatamaran formCatamaran = new FormCatamaran(); formCatamaran.setDrawningBoat(boat); formCatamaran.OpenFrame(); diff --git a/ProjectCatamaran/src/Forms/FormBoatCollection.java b/ProjectCatamaran/src/Forms/FormBoatCollection.java index 8f303b6..818b548 100644 --- a/ProjectCatamaran/src/Forms/FormBoatCollection.java +++ b/ProjectCatamaran/src/Forms/FormBoatCollection.java @@ -1,12 +1,18 @@ package Forms; +import CollectionGenericObjects.CollectionType; +import CollectionGenericObjects.StorageCollection; import Drawnings.DrawningAbstractCompany; +import Drawnings.DrawningBoat; + import javax.swing.*; import javax.swing.text.NumberFormatter; import java.awt.*; import java.awt.event.ComponentAdapter; import java.awt.event.ComponentEvent; import java.text.NumberFormat; +import java.util.ArrayList; +import java.util.Collection; public class FormBoatCollection extends JFrame { final private JFrame jFrameCollectionBoats = new JFrame(); @@ -34,6 +40,34 @@ public class FormBoatCollection extends JFrame { final private JPanel addFromConstructorPanel = new JPanel(); final private JButton addFromConstructorButton = new JButton("Добавить из констркутора"); + final JRadioButton massiveRadioButton = new JRadioButton("Массив"); + final JRadioButton listRadioButton = new JRadioButton("Лист"); + final JPanel radioButtonsPanel = new JPanel(); + + final JButton addCollectionButton = new JButton("Добавить коллекцию"); + final JPanel addCollectionPanel = new JPanel(); + + + final JButton createCompanyButton = new JButton("Создать компанию"); + final JPanel createCompanyPanel = new JPanel(); + + + final JButton deleteCollectionButton = new JButton("Удалить коллекцию"); + final JPanel deleteCollectionPanel = new JPanel(); + + DefaultListModel listModel = new DefaultListModel<>(); + JList collectionsList = new JList<>(listModel); + final JPanel collectionsListPanel = new JPanel(); + + final JTextField setCollectionName = new JTextField(); + final JLabel setCollectionNameLabel = new JLabel("Название коллекции:"); + final JPanel setCollectionNamePanel = new JPanel(); + + final private ArrayList listOfDownPanel = new ArrayList<>(); + + final private JButton goGoToCheckFromRubbishBinButton = new JButton("
Отправить на тест
объект из мусорки"); + final private JPanel goGoToCheckFromRubbishBinPanel = new JPanel(); + public void OpenFrame() { jFrameCollectionBoats.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); @@ -48,33 +82,68 @@ public class FormBoatCollection extends JFrame { labelPanel.add(toolsNameLabel); comboBoxPanel.setLayout(new BorderLayout()); - comboBoxPanel.setSize(new Dimension(130, 30)); + comboBoxPanel.setSize(new Dimension(170, 25)); comboBoxPanel.add(comboBoxSelectorCompany, BorderLayout.CENTER); addBoatPanel.setLayout(new BorderLayout()); - addBoatPanel.setSize(170, 40); + addBoatPanel.setSize(170, 25); addBoatPanel.add(buttonAddBoat, BorderLayout.CENTER); addCatamaranPanel.setLayout(new BorderLayout()); - addCatamaranPanel.setSize(170, 40); + addCatamaranPanel.setSize(170, 25); addCatamaranPanel.add(buttonAddCatamaran, BorderLayout.CENTER); removePanel.setLayout(new BorderLayout()); - removePanel.setSize(170, 40); + removePanel.setSize(170, 25); removePanel.add(buttonRemove, BorderLayout.CENTER); goToCheckPanel.setLayout(new BorderLayout()); - goToCheckPanel.setSize(170, 40); + goToCheckPanel.setSize(170, 25); goToCheckPanel.add(goToCheckButton, BorderLayout.CENTER); refreshPanel.setLayout(new BorderLayout()); - refreshPanel.setSize(170, 40); + refreshPanel.setSize(170, 25); refreshPanel.add(refreshButton, BorderLayout.CENTER); addFromConstructorPanel.setLayout(new BorderLayout()); - addFromConstructorPanel.setSize(170, 40); + addFromConstructorPanel.setSize(170, 25); addFromConstructorPanel.add(addFromConstructorButton, BorderLayout.CENTER); + setCollectionNamePanel.setLayout(new BorderLayout()); + setCollectionNamePanel.setSize(170, 45); + setCollectionNamePanel.add(setCollectionNameLabel, BorderLayout.NORTH); + setCollectionNamePanel.add(setCollectionName, BorderLayout.SOUTH); + + radioButtonsPanel.setLayout(new BorderLayout()); + radioButtonsPanel.setSize(170, 25); + ButtonGroup group = new ButtonGroup(); + group.add(massiveRadioButton); + group.add(listRadioButton); + radioButtonsPanel.add(massiveRadioButton, BorderLayout.WEST); + radioButtonsPanel.add(listRadioButton, BorderLayout.EAST); + + addCollectionPanel.setLayout(new BorderLayout()); + addCollectionPanel.setSize(170, 30); + addCollectionPanel.add(addCollectionButton, BorderLayout.CENTER); + + collectionsListPanel.setLayout(new BorderLayout()); + collectionsListPanel.setSize(170, 100); + + JScrollPane scrollPane = new JScrollPane(collectionsList); + collectionsListPanel.add(scrollPane, BorderLayout.CENTER); + + deleteCollectionPanel.setLayout(new BorderLayout()); + deleteCollectionPanel.setSize(170, 30); + deleteCollectionPanel.add(deleteCollectionButton, BorderLayout.CENTER); + + createCompanyPanel.setLayout(new BorderLayout()); + createCompanyPanel.setSize(170, 30); + createCompanyPanel.add(createCompanyButton, BorderLayout.CENTER); + + goGoToCheckFromRubbishBinPanel.setLayout(new BorderLayout()); + goGoToCheckFromRubbishBinPanel.setSize(170, 50); + goGoToCheckFromRubbishBinPanel.add(goGoToCheckFromRubbishBinButton, BorderLayout.CENTER); + NumberFormat format = NumberFormat.getInstance(); NumberFormatter formatter = new NumberFormatter(format); formatter.setValueClass(Integer.class); @@ -86,12 +155,18 @@ public class FormBoatCollection extends JFrame { JTextField textBoxPosition = new JFormattedTextField(formatter); JPanel textBoxPanel = new JPanel(); textBoxPanel.setLayout(new BorderLayout()); - textBoxPanel.setSize(170, 40); + textBoxPanel.setSize(170, 25); textBoxPanel.add(textBoxPosition, BorderLayout.CENTER); jFrameCollectionBoats.add(toolsPanel); jFrameCollectionBoats.add(labelPanel); + jFrameCollectionBoats.add(setCollectionNamePanel); + jFrameCollectionBoats.add(radioButtonsPanel); + jFrameCollectionBoats.add(addCollectionPanel); + jFrameCollectionBoats.add(collectionsListPanel); + jFrameCollectionBoats.add(deleteCollectionPanel); jFrameCollectionBoats.add(comboBoxPanel); + jFrameCollectionBoats.add(createCompanyPanel); jFrameCollectionBoats.add(addBoatPanel); jFrameCollectionBoats.add(addCatamaranPanel); jFrameCollectionBoats.add(textBoxPanel); @@ -99,33 +174,48 @@ public class FormBoatCollection extends JFrame { jFrameCollectionBoats.add(goToCheckPanel); jFrameCollectionBoats.add(refreshPanel); jFrameCollectionBoats.add(addFromConstructorPanel); + jFrameCollectionBoats.add(goGoToCheckFromRubbishBinPanel); jFrameCollectionBoats.add(_company); + listOfDownPanel.add(buttonAddBoat); + listOfDownPanel.add(buttonAddCatamaran); + listOfDownPanel.add(addFromConstructorButton); + listOfDownPanel.add(textBoxPosition); + listOfDownPanel.add(buttonRemove); + listOfDownPanel.add(goToCheckButton); + listOfDownPanel.add(goGoToCheckFromRubbishBinButton); + listOfDownPanel.add(refreshButton); + + setEnableComponentsOfList(listOfDownPanel, false); jFrameCollectionBoats.addComponentListener(new ComponentAdapter() { public void componentResized(ComponentEvent componentEvent) { + labelPanel.setLocation(jFrameCollectionBoats.getWidth() - 210, 0); toolsPanel.setLocation(jFrameCollectionBoats.getWidth() - 233, 0); - comboBoxPanel.setLocation(jFrameCollectionBoats.getWidth() - 200, 30); - addBoatPanel.setLocation(jFrameCollectionBoats.getWidth() - 200, 70); - addCatamaranPanel.setLocation(jFrameCollectionBoats.getWidth() - 200, 120); - textBoxPanel.setLocation(jFrameCollectionBoats.getWidth() - 200, 220); - removePanel.setLocation(jFrameCollectionBoats.getWidth() - 200, 260); - goToCheckPanel.setLocation(jFrameCollectionBoats.getWidth() - 200, 300); - refreshPanel.setLocation(jFrameCollectionBoats.getWidth() - 200, 340); - addFromConstructorPanel.setLocation(jFrameCollectionBoats.getWidth() - 200, 170); + setCollectionNamePanel.setLocation(jFrameCollectionBoats.getWidth() - 200, 30); + radioButtonsPanel.setLocation(jFrameCollectionBoats.getWidth() - 200, 78); + addCollectionPanel.setLocation(jFrameCollectionBoats.getWidth() - 200, 103); + collectionsListPanel.setLocation(jFrameCollectionBoats.getWidth() - 200, 137); + deleteCollectionPanel.setLocation(jFrameCollectionBoats.getWidth() - 200, 227); + comboBoxPanel.setLocation(jFrameCollectionBoats.getWidth() - 200, jFrameCollectionBoats.getHeight() - 400); + createCompanyPanel.setLocation(jFrameCollectionBoats.getWidth() - 200, jFrameCollectionBoats.getHeight() - 370); + goToCheckPanel.setLocation(jFrameCollectionBoats.getWidth() - 200, + jFrameCollectionBoats.getHeight() - 320); + goGoToCheckFromRubbishBinPanel.setLocation(jFrameCollectionBoats.getWidth() - 200, + jFrameCollectionBoats.getHeight() - 295); + addBoatPanel.setLocation(jFrameCollectionBoats.getWidth() - 200, jFrameCollectionBoats.getHeight() - 241); + addCatamaranPanel.setLocation(jFrameCollectionBoats.getWidth() - 200, jFrameCollectionBoats.getHeight() - 214); + addFromConstructorPanel.setLocation(jFrameCollectionBoats.getWidth() - 200, jFrameCollectionBoats.getHeight() - 187); + textBoxPanel.setLocation(jFrameCollectionBoats.getWidth() - 200, jFrameCollectionBoats.getHeight() - 146); + removePanel.setLocation(jFrameCollectionBoats.getWidth() - 200, jFrameCollectionBoats.getHeight() - 119); + + refreshPanel.setLocation(jFrameCollectionBoats.getWidth() - 200, jFrameCollectionBoats.getHeight() - 67); toolsPanel.setSize(new Dimension(10, jFrameCollectionBoats.getHeight())); jFrameCollectionBoats.repaint(); } }); - comboBoxSelectorCompany.addActionListener(e -> { - - _company.collectionComboBox_SelectedIndexChanged(comboBoxSelectorCompany, - jFrameCollectionBoats.getWidth() - 233, jFrameCollectionBoats.getHeight()); - jFrameCollectionBoats.repaint(); - - }); buttonAddBoat.addActionListener(e -> { _company.createObject(0, jFrameCollectionBoats); jFrameCollectionBoats.repaint(); @@ -136,11 +226,16 @@ public class FormBoatCollection extends JFrame { }); buttonRemove.addActionListener(e -> { + int pos = -1; if (!textBoxPosition.getText().isEmpty()) { - if (Integer.parseInt(textBoxPosition.getText()) <= 99 - && Integer.parseInt(textBoxPosition.getText()) >= 0) { - int pos = Integer.parseInt(textBoxPosition.getText()); - _company.deleteButtonAction(pos, jFrameCollectionBoats); + int inputPos = Integer.parseInt(textBoxPosition.getText()); + if (inputPos <= 99 && inputPos >= 0) { + pos = inputPos; + } + } + if (pos != -1) { + if(_company.deleteButtonAction(pos, jFrameCollectionBoats)) { + goGoToCheckFromRubbishBinButton.setEnabled(true); } } jFrameCollectionBoats.repaint(); @@ -153,11 +248,46 @@ public class FormBoatCollection extends JFrame { _company.goToCheckButtonAction(); jFrameCollectionBoats.repaint(); }); + goGoToCheckFromRubbishBinButton.addActionListener(e -> { + goGoToCheckFromRubbishBinButton.setEnabled(_company.goToCheckFromRubbishBinAction()); + jFrameCollectionBoats.repaint(); + }); + createCompanyButton.addActionListener(e -> { + boolean res = _company.collectionComboBox_SelectedIndexChanged(jFrameCollectionBoats, collectionsList, comboBoxSelectorCompany, + jFrameCollectionBoats.getWidth() - 233, jFrameCollectionBoats.getHeight()); + setEnableComponentsOfList(listOfDownPanel, res); + jFrameCollectionBoats.repaint(); + }); addFromConstructorButton.addActionListener(e -> { _company.getObjFromConstructor(jFrameCollectionBoats); }); + addCollectionButton.addActionListener(e -> { + StorageCollection result = _company.addCollectionButtonAction(jFrameCollectionBoats, setCollectionName, + massiveRadioButton, listRadioButton); + updateCollectionsList(result); + }); + deleteCollectionButton.addActionListener(e -> { + StorageCollection result = _company.deleteCollectionButtonAction(jFrameCollectionBoats, collectionsList); + updateCollectionsList(result); + }); + jFrameCollectionBoats.setVisible(true); } + private void updateCollectionsList(StorageCollection storageCollection) { + if (storageCollection == null) { + return; + } + listModel.clear(); + ArrayList keys = storageCollection.keys; + for (String key : keys) { + listModel.addElement(key); + } + } + private void setEnableComponentsOfList(ArrayList list, boolean type) { + for(var i: list) { + i.setEnabled(type); + } + } } diff --git a/out/production/ProjectCatamaran/Forms/FormBoatCollection$1.class b/out/production/ProjectCatamaran/Forms/FormBoatCollection$1.class index d8a3821af3a0d605435a4a77f2c4a3efba96098e..fa9ceeee7d41079a89ee52662834b737922de747 100644 GIT binary patch literal 2281 zcmZ`)S#uLd5dKCsmL(5Za(nOQUiq;I`Bvoog7{I(7laZV~E>EQP}>OTB(O)FZMBXEsVQH zRfMtX$h{rD`Xuu8Q5=ZkF^*mwWa!uuj!$7|EemzoGF8QQa59d^aX5-6IQr1PU8SCv zHczOWEEzi047*a3lk0&Us zNhdULiepHl9foO!1_I?LIiAvRXDKKEFK2lwAUwnItR{4s!WL>%?gGa194~0b?vkt) z)hz zv`WR|l1756V!f$ngh!#742L(xwyp8U^cG}gbUq-_sOvpo(sC8!LqFWN#qN z5_<9hw9+`$68g8pptVSESz4R4WboK6u)*WE5FNaYwvT;ciJmQB^t=m`p51k2fvdFB zX0%C$GQG#h?)8L!4nqYNiOGKCZ=w(qnIF6fb`#0VzS$6s6$*BlB>TV&SZ4z{#kOV!J7T#Z zYdDbaV4VwDqm5ZdL)Q6*Ec_d?rW&(;4_Ox*v+mSc(Z-YyLqpSzSc&D3G~1Ar4M|7t zpl~G-52%^jcx4r@2KzU|DlO7?6Zj1K@HtN73!0o?QjLCv>-ZWU;Tx=C4S(TV7QsE% zi|<%JttouZM)3o?Kx-a9GKHVm4gAbL#V_mu?nhejYvcrei%j8<$Q=F*J0LQTdI!+k i0CmfByq-e?XG} delta 707 zcmZ9K&rcIU6vw{@Pw=BILD=k9`>Z8+EVKi z99JU!NJCXsu_N6Qb%sUa|mO+2DFOa!!O4v#5El^OFVR3`~-+JJ4- zz&xrHD**dIEksx@{9`VSmwFgIy$!aF{9YRF;dmO~>-NSTNgR~Z_#G||jdYly2QT+^ zu$)F$`%zV+8+{0$H5&Vd$pzce4R^kv*u!0Yp4~zR^oGcc38W~lU<9kUh&7bqU>Pnp zq3{uJ(ZxIbgoj=D%s{}hXtOg|-#3rt{+mbDQ#>P=3_Pcu19*W2$_9PGmv|j387xw^ Kzz)T}Q~eLU*>M-o_o%@ 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 E05_=5E&u=k