diff --git a/ProjectStormtrooper/DrawingPlane.java b/ProjectStormtrooper/DrawingPlane.java
index 80f8b25..db224d4 100644
--- a/ProjectStormtrooper/DrawingPlane.java
+++ b/ProjectStormtrooper/DrawingPlane.java
@@ -1,9 +1,10 @@
package ProjectStormtrooper;
+import javax.swing.*;
import java.awt.*;
import java.util.Random;
-public class DrawingPlane {
+public class DrawingPlane extends JPanel {
public EntityPlane EntityPlane;
protected IDrawingEngines _drawingEngines;
protected int _pictureWidth;
diff --git a/ProjectStormtrooper/FormPlaneCollection.form b/ProjectStormtrooper/FormPlaneCollection.form
index aba2572..c0cb0dd 100644
--- a/ProjectStormtrooper/FormPlaneCollection.form
+++ b/ProjectStormtrooper/FormPlaneCollection.form
@@ -14,7 +14,7 @@
-
+
@@ -22,7 +22,7 @@
-
+
@@ -30,12 +30,12 @@
-
+
-
+
@@ -43,7 +43,7 @@
-
+
@@ -51,7 +51,7 @@
-
+
@@ -59,22 +59,77 @@
-
+
-
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/ProjectStormtrooper/FormPlaneCollection.java b/ProjectStormtrooper/FormPlaneCollection.java
index ce48a8a..e975064 100644
--- a/ProjectStormtrooper/FormPlaneCollection.java
+++ b/ProjectStormtrooper/FormPlaneCollection.java
@@ -1,12 +1,16 @@
package ProjectStormtrooper;
import javax.swing.*;
+import javax.swing.event.ListSelectionEvent;
import java.awt.*;
import java.awt.event.ActionEvent;
+import java.util.Objects;
+import java.util.Stack;
public class FormPlaneCollection {
- PlanesGenericCollection _planes;
+ final PlanesGenericStorage _storage;
FrameDoubleParametrized _frameDoubleParametrized;
+ FrameStormtrooper _frameRemovedPlanes;
private JPanel PanelWrapper;
private JPanel GroupBoxInstruments;
private JPanel PictureBoxCollection;
@@ -15,7 +19,14 @@ public class FormPlaneCollection {
private JButton buttonRemovePlane;
private JButton buttonRefreshCollection;
private JButton buttonOpenGenerateWindow;
+ private JTextField textFieldStorageName;
+ private JButton buttonAddStorage;
+ private JList listBoxStorages;
+ private JButton buttonRemoveStorage;
+ private JPanel storagesPanel;
+ private JButton buttonShowRemovedPlanes;
public DrawingPlane SelectedPlane;
+ Stack _removedPlanes;
public JPanel getPanelWrapper() {
@@ -24,21 +35,83 @@ public class FormPlaneCollection {
public FormPlaneCollection() {
PictureBoxCollection.setPreferredSize(new Dimension(600, 500));
- _planes = new PlanesGenericCollection<>(600, 500);
+ _storage = new PlanesGenericStorage(600, 500);
+ _removedPlanes = new Stack<>();
buttonAddPlane.addActionListener(this::buttonAddPlaneClicked);
buttonRemovePlane.addActionListener(this::buttonRemovePlaneClicked);
buttonRefreshCollection.addActionListener(this::buttonRefreshCollectionClicked);
buttonOpenGenerateWindow.addActionListener(this::buttonOpenGenerateWindowClicked);
+ buttonAddStorage.addActionListener(this::buttonAddStorageClicked);
+ buttonRemoveStorage.addActionListener(this::buttonRemoveStorageClicked);
+ listBoxStorages.addListSelectionListener(this::listBoxObjectsSelectedIndexChanged);
+ buttonShowRemovedPlanes.addActionListener(this::buttonShowRemovedPlanesClicked);
+ }
+
+ private void ReloadObjects() {
+ int index = listBoxStorages.getSelectedIndex();
+ listBoxStorages.setListData(_storage.Keys().toArray());
+ if (listBoxStorages.getModel().getSize() > 0 && (index == -1 || index >= listBoxStorages.getModel().getSize())) {
+ listBoxStorages.setSelectedIndex(0);
+ } else if (listBoxStorages.getModel().getSize() > 0 && index > -1 && index < listBoxStorages.getModel().getSize()) {
+ listBoxStorages.setSelectedIndex(index);
+ }
+ listBoxStorages.invalidate();
+ }
+
+ private void buttonAddStorageClicked(ActionEvent e) {
+ String storageName = textFieldStorageName.getText();
+ if (Objects.equals(storageName, "")) {
+ JOptionPane.showMessageDialog(this.getPanelWrapper(),
+ "Введите название",
+ "Ошибка",
+ JOptionPane.ERROR_MESSAGE);
+ return;
+ }
+ _storage.AddSet(storageName);
+ ReloadObjects();
+ }
+
+ private void listBoxObjectsSelectedIndexChanged(ListSelectionEvent e) {
+ refreshPictureBox();
+ }
+
+ private void buttonRemoveStorageClicked(ActionEvent e) {
+ if (listBoxStorages.getSelectedIndex() == -1) {
+ return;
+ }
+ Object[] options = {"Да", "Нет"};
+ int n = JOptionPane.showOptionDialog(this.getPanelWrapper(),
+ "Удалить объект?",
+ "Все серьезно",
+ JOptionPane.YES_NO_OPTION,
+ JOptionPane.QUESTION_MESSAGE,
+ null,
+ options,
+ options[0]
+ );
+ if (n == 1) {
+ return;
+ }
+ _storage.DelSet(listBoxStorages.getSelectedValue().toString());
+ ReloadObjects();
}
public void buttonAddPlaneClicked(ActionEvent e) {
+ if (listBoxStorages.getSelectedIndex() == -1) {
+ return;
+ }
+ var obj = _storage.Get(listBoxStorages.getSelectedValue().toString());
+ if (obj == null) {
+ return;
+ }
+
FrameStormtrooper frameStormtrooper = new FrameStormtrooper();
frameStormtrooper.setVisible(true);
- frameStormtrooper._formPlaneCollection.buttonSelectPlane.addActionListener(ev -> {
- SelectedPlane = frameStormtrooper._formPlaneCollection._drawingPlane;
+ frameStormtrooper._formStromtrooper.buttonSelectPlane.addActionListener(ev -> {
+ SelectedPlane = frameStormtrooper._formStromtrooper._drawingPlane;
frameStormtrooper.dispose();
if (SelectedPlane != null) {
- if (_planes.Add(SelectedPlane) > -1) {
+ if (obj.Add(SelectedPlane) > -1) {
refreshPictureBox();
JOptionPane.showMessageDialog(this.getPanelWrapper(),
"Объект добавлен",
@@ -55,6 +128,13 @@ public class FormPlaneCollection {
}
public void buttonRemovePlaneClicked(ActionEvent e) {
+ if (listBoxStorages.getSelectedIndex() == -1) {
+ return;
+ }
+ var obj = _storage.Get(listBoxStorages.getSelectedValue().toString());
+ if (obj == null) {
+ return;
+ }
int pos;
try {
pos = Integer.parseInt(textFieldNumber.getText());
@@ -78,7 +158,9 @@ public class FormPlaneCollection {
if (n == 1) {
return;
}
- if (_planes.Sub(pos) != null) {
+ DrawingPlane removedPlane = obj.Sub(pos);
+ if (removedPlane != null) {
+ _removedPlanes.push(removedPlane);
refreshPictureBox();
JOptionPane.showMessageDialog(this.getPanelWrapper(),
"Объект удален",
@@ -104,9 +186,30 @@ public class FormPlaneCollection {
_frameDoubleParametrized.setVisible(true);
}
+ public void buttonShowRemovedPlanesClicked(ActionEvent e) {
+ if (_removedPlanes.empty()) {
+ JOptionPane.showMessageDialog(this.getPanelWrapper(),
+ "Нет удаленных объектов",
+ "Инфо",
+ JOptionPane.INFORMATION_MESSAGE);
+ return;
+ }
+ _frameRemovedPlanes = new FrameStormtrooper();
+ _frameRemovedPlanes._formStromtrooper._drawingPlane = _removedPlanes.pop();
+ _frameRemovedPlanes.setVisible(true);
+ _frameRemovedPlanes._formStromtrooper.Draw();
+ }
+
public void refreshPictureBox() {
+ if (listBoxStorages.getSelectedIndex() == -1) {
+ return;
+ }
+ var obj = _storage.Get(listBoxStorages.getSelectedValue().toString());
+ if (obj == null) {
+ return;
+ }
Graphics g = PictureBoxCollection.getGraphics();
PictureBoxCollection.paint(g);
- _planes.ShowPlanes(g);
+ obj.ShowPlanes(g);
}
}
diff --git a/ProjectStormtrooper/FormStormtrooper.form b/ProjectStormtrooper/FormStormtrooper.form
index 6993efe..e24fe2e 100644
--- a/ProjectStormtrooper/FormStormtrooper.form
+++ b/ProjectStormtrooper/FormStormtrooper.form
@@ -1,6 +1,6 @@