From d1d9dfb2d31c31f139c4d9530ca9bf8fbecc006d Mon Sep 17 00:00:00 2001 From: ilyaryabovv Date: Sun, 28 Apr 2024 15:44:48 +0400 Subject: [PATCH 1/4] =?UTF-8?q?=D0=BB=D0=B0=D0=B15?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/Drawnings/DrawingStormtrooper.java | 19 +- .../src/Entities/EntityBaseStormtrooper.java | 9 + .../src/Entities/EntityStormtrooper.java | 12 + .../src/FormStormtrooperCollection.java | 138 +++++- .../src/FormStormtrooperConfig.java | 467 ++++++++++++++++++ 5 files changed, 602 insertions(+), 43 deletions(-) create mode 100644 ProjectStormtrooper/src/FormStormtrooperConfig.java diff --git a/ProjectStormtrooper/src/Drawnings/DrawingStormtrooper.java b/ProjectStormtrooper/src/Drawnings/DrawingStormtrooper.java index 6901e46..dea49e1 100644 --- a/ProjectStormtrooper/src/Drawnings/DrawingStormtrooper.java +++ b/ProjectStormtrooper/src/Drawnings/DrawingStormtrooper.java @@ -8,25 +8,8 @@ import java.awt.*; public class DrawingStormtrooper extends DrawingBaseStormtrooper{ - public DrawingStormtrooper(int speed, float weight, Color bodyColor, Color additionalColor,boolean rockets, boolean bombs, boolean engines, int typeOfEngines) { + public DrawingStormtrooper(int speed, float weight, Color bodyColor, Color additionalColor,boolean rockets, boolean bombs, boolean engines) { EntityBaseStormtrooper = new EntityStormtrooper(speed, weight, bodyColor, additionalColor, rockets, bombs, engines); - if(engines){ - switch(typeOfEngines){ - case 1: - drawingEngines = new DrawingEngines(); - drawingEngines.setAmountOfEngines((int)((Math.random()*3)+1)*2); - break; - case 2: - drawingEngines = new DrawingTriangleEngines(); - drawingEngines.setAmountOfEngines((int)((Math.random()*3)+1)*2); - break; - case 3: - drawingEngines = new DrawingOvalEngines(); - drawingEngines.setAmountOfEngines((int)((Math.random()*3)+1)*2); - break; - } - - } _startPosX=null; _startPosY=null; _pictureWidth = null; diff --git a/ProjectStormtrooper/src/Entities/EntityBaseStormtrooper.java b/ProjectStormtrooper/src/Entities/EntityBaseStormtrooper.java index 3616188..9846166 100644 --- a/ProjectStormtrooper/src/Entities/EntityBaseStormtrooper.java +++ b/ProjectStormtrooper/src/Entities/EntityBaseStormtrooper.java @@ -5,8 +5,17 @@ import java.awt.*; public class EntityBaseStormtrooper { private int Speed; + public void setSpeed(int speed){ + Speed = speed; + } private float Weight; + public void setWeight ( float weight){ + Weight= 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) diff --git a/ProjectStormtrooper/src/Entities/EntityStormtrooper.java b/ProjectStormtrooper/src/Entities/EntityStormtrooper.java index 1ee9923..03a18f3 100644 --- a/ProjectStormtrooper/src/Entities/EntityStormtrooper.java +++ b/ProjectStormtrooper/src/Entities/EntityStormtrooper.java @@ -3,18 +3,30 @@ package Entities; import java.awt.*; public class EntityStormtrooper extends EntityBaseStormtrooper{ private Color AdditionalColor; + public void setAdditionalColor(Color additionalColor){ + AdditionalColor = additionalColor; + } public Color getAdditionalColor() { return AdditionalColor; } private boolean Rockets; + public void setRockets ( boolean rockets){ + Rockets= rockets; + } public boolean getRockets() { return Rockets; } private boolean Bombs; + public void setBombs (boolean bombs){ + Bombs= bombs; + } public boolean getBombs() { return Bombs; } private boolean Engines; + public void setEngines (boolean engines){ + Engines = engines; + } public boolean getEngines() {return Engines;} public EntityStormtrooper(int speed, float weight, Color bodyColor, Color additionalColor, boolean rockets, boolean bombs, boolean engines) { diff --git a/ProjectStormtrooper/src/FormStormtrooperCollection.java b/ProjectStormtrooper/src/FormStormtrooperCollection.java index 801662a..4fb7324 100644 --- a/ProjectStormtrooper/src/FormStormtrooperCollection.java +++ b/ProjectStormtrooper/src/FormStormtrooperCollection.java @@ -17,9 +17,19 @@ public class FormStormtrooperCollection extends JFrame{ private Dimension dimension; public static CanvasFormStormtrooperCollection _canvasStormtrooper = new CanvasFormStormtrooperCollection(); private static AbstractCompany _company = null; - private JButton CreateButton = new JButton("Создать бомбардировщик");; - private JButton CreateShipButton = new JButton("Создать базовый бомбардировщик"); - private JButton RemoveButton = new JButton("Удалить"); + + private Queue _collectionRemovedObjects = new LinkedList<>(); + private StorageCollection _storageCollection = new StorageCollection(); + private JTextField textBoxCollection = new JTextField(); + private JRadioButton radioButtonMassive = new JRadioButton("Массив"); + private JRadioButton radioButtonList = new JRadioButton("Список"); + private JButton buttonAddCollection = new JButton("Добавить"); + private JList listBoxCollection = new JList(); + private JButton buttonRemoveCollection = new JButton("Удалить"); + private JButton buttonCreateCompany = new JButton("Создать компанию"); + private JButton createButton = new JButton("Создать бомбардировщик"); + private JButton removeButton = new JButton("Удалить"); + private JButton removeObjectsButton = new JButton("Удаленные объекты"); private JButton GoToCheckButton = new JButton("На проверку"); private JButton RandomButton = new JButton("Случайные"); private JButton RefreshButton = new JButton("Обновить"); @@ -67,35 +77,20 @@ public class FormStormtrooperCollection extends JFrame{ Color color = JColorChooser.showDialog(this, "Цвет", initializator); return color; } + public void Init() { setTitle(title); setMinimumSize(dimension); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); - - TextField = new JFormattedTextField(); - ComboBoxCollections.addActionListener(new ActionListener() { + createButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { - switch (ComboBoxCollections.getSelectedItem().toString()) { - case "Хранилище": - _company = new StormtrooperSharingService(getWidth()-200, getHeight()-110, new MassiveGenericObjects()); - break; - } - } - }); - - CreateShipButton.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent e) { - CreateObject("DrawingBaseStormtrooper"); - } - }); - CreateButton.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent e) { - CreateObject("DrawingStormtrooper"); + if (_company==null) return; + FormStormtrooperConfig form = new FormStormtrooperConfig("",new Dimension(800,300)); + form.setCompany(_company); + form.Init(); } }); @@ -184,7 +179,100 @@ public class FormStormtrooperCollection extends JFrame{ GoToCheckButton.setBounds(getWidth()-190, 280, 150, 30); RefreshButton.setBounds(getWidth()-190, getHeight()-90, 150, 30); - setSize(dimension.width,dimension.height); + + 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 StormtrooperSharingService(getWidth() - 200, getHeight() - 110, + collection); + break; + } + RerfreshListBoxItems(); + } + }); + removeObjectsButton.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + if (_collectionRemovedObjects.isEmpty()) { + JOptionPane.showMessageDialog(null, "Коллекция пуста"); + return; + } + DrawingBaseStormtrooper stormtrooper = null; + stormtrooper = _collectionRemovedObjects.remove(); + if (stormtrooper == null) { + return; + } + FormStormtrooper form = new FormStormtrooper("Бомбардировщик", new Dimension(1000, 750)); + form.Init(stormtrooper); + } + }); + 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); + ComboBoxCollections.setBounds(getWidth() - 190, 225, 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); + TextField.setBounds(getWidth() - 190, 545, 150, 30); + removeButton.setBounds(getWidth() - 190, 585, 150, 30); + GoToCheckButton.setBounds(getWidth() - 190, 625, 150, 30); + RefreshButton.setBounds(getWidth() - 190, 665, 150, 30); + setSize(dimension.width, dimension.height); setLayout(null); add(_canvasStormtrooper); add(ComboBoxCollections); diff --git a/ProjectStormtrooper/src/FormStormtrooperConfig.java b/ProjectStormtrooper/src/FormStormtrooperConfig.java new file mode 100644 index 0000000..2e6be98 --- /dev/null +++ b/ProjectStormtrooper/src/FormStormtrooperConfig.java @@ -0,0 +1,467 @@ +import CollectionGenericObjects.AbstractCompany; +import Drawnings.*; +import Drawnings.Engines.*; +import Entities.EntityStormtrooper; +import javax.swing.*; +import javax.swing.event.ChangeEvent; +import javax.swing.event.ChangeListener; +import java.awt.*; +import java.awt.datatransfer.DataFlavor; +import java.awt.datatransfer.StringSelection; +import java.awt.datatransfer.Transferable; +import java.awt.datatransfer.UnsupportedFlavorException; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.awt.event.MouseAdapter; +import java.awt.event.MouseEvent; +import java.io.IOException; + +public class FormStormtrooperConfig extends JFrame { + private String title; + private Dimension dimension; + private DrawingBaseStormtrooper _stormtrooper; + private AbstractCompany company = null; + private JLabel labelSpeed = new JLabel("Скорость"); + private JLabel labelWeight = new JLabel("Вес"); + private JLabel labelNumberOfEngines = new JLabel("Двигатели"); + + private JLabel labelBaseStormtrooper = new JLabel("Самолет", SwingConstants.CENTER); + private JLabel labelStormtrooper = new JLabel("Бомбардировщик", SwingConstants.CENTER); + private JLabel labelColor = new JLabel("Цвета"); + private JLabel labelBodyColor = new JLabel("Основной цвет", SwingConstants.CENTER); + private JLabel labelAdditionalColor = new JLabel("Дополнительный цвет", SwingConstants.CENTER); + private JLabel labelEngines = new JLabel("Тип двигателей",SwingConstants.CENTER); + private JLabel labelDefaultEngines = new JLabel("Классические",SwingConstants.CENTER); + private JLabel labelOvalEngines = new JLabel("Овальные", SwingConstants.CENTER); + private JLabel labelTriangleEngines = new JLabel("Треугольные", SwingConstants.CENTER); + + private JSpinner spinnerSpeed = new JSpinner(); + private JSpinner spinnerWeight = new JSpinner(); + private JSpinner spinnerNumberOfEngines = new JSpinner(); + private JCheckBox checkBoxBombs = new JCheckBox("Имеет бомбы"); + private JCheckBox checkBoxRockets = new JCheckBox("Имеет ракеты"); + private JCheckBox checkBoxEngines = new JCheckBox("Имеет двигатели"); + private JComponent panelObject = new JPanel(); + private JPanel panelColorRed = new JPanel(); + private JPanel panelColorGreen = new JPanel(); + private JPanel panelColorBlue = new JPanel(); + private JPanel panelColorYellow = new JPanel(); + private JPanel panelColorBlack = new JPanel(); + private JPanel panelColorWhite = new JPanel(); + private JPanel panelColorGray = new JPanel(); + private JPanel panelColorCyan = new JPanel(); + private JButton buttonAdd = new JButton("Добавить"); + private JButton buttonCancel = new JButton("Отмена"); + + public FormStormtrooperConfig(String title, Dimension dimension) { + this.title = title; + this.dimension = dimension; + } + public void Init() { + SpinnerModel numSpeed = new SpinnerNumberModel(100, 100, 1000, 1); + SpinnerModel numWeight = new SpinnerNumberModel(100, 100, 1000, 1); + spinnerSpeed.setModel(numSpeed); + spinnerWeight.setModel(numWeight); + SpinnerModel numEngines = new SpinnerNumberModel(2, 2, 6, 2); + spinnerNumberOfEngines.setModel(numEngines); + panelObject = new Canvas(); + panelObject.setBorder(BorderFactory.createLineBorder(Color.BLACK, 2)); + + spinnerSpeed.addChangeListener(new ChangeListener() { + @Override + public void stateChanged(ChangeEvent e) { + if (_stormtrooper == null) return; + _stormtrooper.EntityBaseStormtrooper.setSpeed((int)spinnerSpeed.getValue()); + } + }); + spinnerWeight.addChangeListener(new ChangeListener() { + @Override + public void stateChanged(ChangeEvent e) { + if (_stormtrooper == null) return; + _stormtrooper.EntityBaseStormtrooper.setWeight((int)spinnerWeight.getValue()); + } + }); + + spinnerNumberOfEngines.addChangeListener(new ChangeListener() { + @Override + public void stateChanged(ChangeEvent e) { + if(_stormtrooper ==null)return; + if(_stormtrooper.EntityBaseStormtrooper instanceof EntityStormtrooper stormtrooper){ + _stormtrooper.drawingEngines.setAmountOfEngines((int) spinnerNumberOfEngines.getValue()); + panelObject.repaint(); + } + } + }); + checkBoxBombs.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + if (_stormtrooper == null) return; + if (_stormtrooper.EntityBaseStormtrooper instanceof EntityStormtrooper stormtrooper) { + stormtrooper.setBombs(checkBoxBombs.isSelected()); + panelObject.repaint(); + } + } + }); + checkBoxRockets.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + if (_stormtrooper == null) return; + if (_stormtrooper.EntityBaseStormtrooper instanceof EntityStormtrooper stormtrooper) { + stormtrooper.setRockets(checkBoxRockets.isSelected()); + panelObject.repaint(); + } + } + }); + + checkBoxEngines.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + if(_stormtrooper == null)return; + if(_stormtrooper.EntityBaseStormtrooper instanceof EntityStormtrooper stormtrooper){ + stormtrooper.setEngines(checkBoxEngines.isSelected()); + if(_stormtrooper instanceof DrawingStormtrooper stormtrooper1 && stormtrooper1.drawingEngines==null){ + stormtrooper1.drawingEngines=new DrawingEngines(); + stormtrooper1.drawingEngines.setAmountOfEngines((int) spinnerNumberOfEngines.getValue()); + } + panelObject.repaint(); + } + } + }); + labelBaseStormtrooper.setBackground(Color.WHITE); + labelStormtrooper.setBackground(Color.WHITE); + labelBaseStormtrooper.setBorder(BorderFactory.createLineBorder(Color.BLACK, 2)); + labelStormtrooper.setBorder(BorderFactory.createLineBorder(Color.BLACK, 2)); + labelBodyColor.setBorder(BorderFactory.createLineBorder(Color.BLACK, 2)); + labelAdditionalColor.setBorder(BorderFactory.createLineBorder(Color.BLACK, 2)); + labelDefaultEngines.setBorder(BorderFactory.createLineBorder(Color.BLACK, 2)); + labelOvalEngines.setBorder(BorderFactory.createLineBorder(Color.BLACK, 2)); + labelTriangleEngines.setBorder(BorderFactory.createLineBorder(Color.BLACK, 2)); + MouseAdapter labelObjectsMouseDown = new MouseAdapter() { + @Override + public void mousePressed(MouseEvent e) { + ((JLabel) e.getComponent()).getTransferHandler().exportAsDrag(((JLabel) e.getComponent()), e, TransferHandler.COPY); + } + }; + TransferHandler labelObjectsTransferHandler = new TransferHandler() { + @Override + public int getSourceActions(JComponent c) { + return TransferHandler.COPY; + } + @Override + protected Transferable createTransferable(JComponent c) { + return new StringSelection(((JLabel) c).getText()); + } + }; + + labelBaseStormtrooper.addMouseListener(labelObjectsMouseDown); + labelBaseStormtrooper.setTransferHandler(labelObjectsTransferHandler); + labelStormtrooper.addMouseListener(labelObjectsMouseDown); + labelStormtrooper.setTransferHandler(labelObjectsTransferHandler); + + MouseAdapter labelEnginesMouseDown = new MouseAdapter() { + @Override + public void mousePressed(MouseEvent e) { + ((JLabel) e.getComponent()).getTransferHandler().exportAsDrag(((JLabel) e.getComponent()), e, TransferHandler.COPY); + } + }; + + labelDefaultEngines.addMouseListener(labelEnginesMouseDown); + labelOvalEngines.addMouseListener(labelEnginesMouseDown); + labelTriangleEngines.addMouseListener(labelEnginesMouseDown); + labelDefaultEngines.setTransferHandler(new TransferHandler() { + @Override + public int getSourceActions(JComponent c) {return TransferHandler.COPY;} + + @Override + protected Transferable createTransferable(JComponent c) { + return new EnginesTransferable(new DrawingEngines()); + } + }); + labelOvalEngines.setTransferHandler(new TransferHandler() { + @Override + public int getSourceActions(JComponent c) {return TransferHandler.COPY;} + + @Override + protected Transferable createTransferable(JComponent c) { + return new EnginesTransferable(new DrawingOvalEngines()); + } + }); + labelTriangleEngines.setTransferHandler(new TransferHandler() { + @Override + public int getSourceActions(JComponent c) {return TransferHandler.COPY;} + + @Override + protected Transferable createTransferable(JComponent c) { + return new EnginesTransferable(new DrawingTriangleEngines()); + } + }); + + panelObject.setTransferHandler(new TransferHandler() { + @Override + public boolean canImport(TransferHandler.TransferSupport support) { + return support.isDataFlavorSupported(DataFlavor.stringFlavor) + || support.isDataFlavorSupported(EnginesTransferable.enginesDataFlavor); + } + @Override + public boolean importData(TransferHandler.TransferSupport support) { + if (canImport(support)) { + try { + String data = (String) support.getTransferable().getTransferData(DataFlavor.stringFlavor); + switch (data) { + case "Самолет": + _stormtrooper = new DrawingBaseStormtrooper((int) spinnerSpeed.getValue(), (int) spinnerWeight.getValue(), + Color.WHITE); + break; + case "Бомбардировщик": + _stormtrooper = new DrawingStormtrooper((int) spinnerSpeed.getValue(), (int) spinnerWeight.getValue(), + Color.WHITE, Color.BLACK, checkBoxBombs.isSelected(), checkBoxRockets.isSelected(),checkBoxEngines.isSelected()); + _stormtrooper.drawingEngines=new DrawingEngines(); + _stormtrooper.drawingEngines.setAmountOfEngines((int) spinnerNumberOfEngines.getValue()); + break; + } + if (_stormtrooper != null) { + _stormtrooper.SetPictureSize(155,155); + _stormtrooper.SetPosition(5,10); + } + else return false; + } + catch (UnsupportedFlavorException | IOException e) {} + try { + IDrawingEngines engines = + (IDrawingEngines) support.getTransferable().getTransferData(EnginesTransferable.enginesDataFlavor); + _stormtrooper.drawingEngines = engines; + _stormtrooper.drawingEngines.setAmountOfEngines((int) spinnerNumberOfEngines.getValue()); + + }catch (UnsupportedFlavorException | IOException e) {} + panelObject.repaint(); + return true; + } + return false; + } + }); + JPanel[] colorPanels = { + panelColorRed, + panelColorGreen, + panelColorBlue, + panelColorYellow, + panelColorWhite, + panelColorBlack, + panelColorGray, + panelColorCyan, + }; + panelColorRed.setBackground(Color.RED); + panelColorGreen.setBackground(Color.GREEN); + panelColorBlue.setBackground(Color.BLUE); + panelColorYellow.setBackground(Color.YELLOW); + panelColorWhite.setBackground(Color.WHITE); + panelColorBlack.setBackground(Color.BLACK); + panelColorGray.setBackground(Color.GRAY); + panelColorCyan.setBackground(Color.CYAN); + MouseAdapter colorMouseDown = new MouseAdapter() { + @Override + public void mousePressed(MouseEvent e) { + ((JPanel) e.getComponent()).getTransferHandler().exportAsDrag(((JPanel) e.getComponent()), e, TransferHandler.COPY); + } + }; + for (var panelColor : colorPanels) { + panelColor.addMouseListener(colorMouseDown); + panelColor.setTransferHandler(new ColorTransferHandler()); + } + labelBodyColor.setTransferHandler(new TransferHandler() { + @Override + public boolean canImport(TransferHandler.TransferSupport support) { + return support.isDataFlavorSupported(ColorTransferable.colorDataFlavor); + } + @Override + public boolean importData(TransferSupport support) { + try { + Color color = (Color) support.getTransferable().getTransferData(ColorTransferable.colorDataFlavor); + if (_stormtrooper == null) return false; + _stormtrooper.EntityBaseStormtrooper.setBodyColor(color); + return true; + } catch (UnsupportedFlavorException | IOException e) { + e.printStackTrace(); + } + return false; + } + }); + labelAdditionalColor.setTransferHandler(new TransferHandler() { + @Override + public boolean canImport(TransferHandler.TransferSupport support) { + if (!(_stormtrooper instanceof DrawingStormtrooper)) return false; + return support.isDataFlavorSupported(ColorTransferable.colorDataFlavor); + } + @Override + public boolean importData(TransferSupport support) { + try { + Color color = (Color) support.getTransferable().getTransferData(ColorTransferable.colorDataFlavor); + if (_stormtrooper == null) return false; + if (_stormtrooper.EntityBaseStormtrooper instanceof EntityStormtrooper stormtrooper) { + stormtrooper.setAdditionalColor(color); + labelColor.setBackground(color); + return true; + } + return false; + } catch (UnsupportedFlavorException | IOException e) { + e.printStackTrace(); + } + return false; + } + }); + buttonAdd.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + if (_stormtrooper == null) return; + DrawingBaseStormtrooper copyStormtrooper; + if (_stormtrooper instanceof DrawingStormtrooper) + copyStormtrooper = new DrawingStormtrooper((EntityStormtrooper) _stormtrooper.EntityBaseStormtrooper, _stormtrooper.drawingEngines); + else + copyStormtrooper = new DrawingBaseStormtrooper(_stormtrooper.EntityBaseStormtrooper, _stormtrooper.drawingEngines); + company._collection.Insert(copyStormtrooper); + FormStormtrooperCollection.canvasShow(); + dispose(); + } + }); + buttonCancel.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + dispose(); + } + }); + labelSpeed.setBounds(8, 17, 75, 15); + labelWeight.setBounds(8,43, 75, 15); + labelNumberOfEngines.setBounds(8, 68, 75, 15); + labelBaseStormtrooper.setBounds(8,150,105,30); + labelStormtrooper.setBounds(8,190,110,30); + checkBoxBombs.setBounds(8,85,150,20); + checkBoxRockets.setBounds(8,105,150,20); + checkBoxEngines.setBounds(8,125,150,20); + spinnerSpeed.setBounds(80,15, 60,20); + spinnerWeight.setBounds(80,40, 60,20); + spinnerNumberOfEngines.setBounds(80, 65,60,20); + panelObject.setBounds(555,50,160,150); + labelBodyColor.setBounds(500,5,100, 40); + labelAdditionalColor.setBounds(605,5,170,40); + labelEngines.setBounds(225,190,150,15); + labelDefaultEngines.setBounds(140, 210, 100, 40); + labelOvalEngines.setBounds(250, 210, 100,40); + labelTriangleEngines.setBounds(360,210,100,40); + labelColor.setBounds(200,10,50,15); + panelColorRed.setBounds(200, 30, 40, 40); + panelColorGreen.setBounds(250, 30, 40,40); + panelColorBlue.setBounds(300,30,40,40); + panelColorYellow.setBounds(350,30,40,40); + panelColorWhite.setBounds(200, 80,40,40); + panelColorBlack.setBounds(250,80,40,40); + panelColorGray.setBounds(300,80,40,40); + panelColorCyan.setBounds(350,80,40,40); + buttonAdd.setBounds(515, 210, 110, 40); + buttonCancel.setBounds(640, 210, 110, 40); + setSize(dimension.width, dimension.height); + setLayout(null); + add(labelSpeed); + add(labelWeight); + add(labelNumberOfEngines); + add(labelBaseStormtrooper); + add(labelStormtrooper); + add(labelColor); + add(labelBodyColor); + add(labelAdditionalColor); + add(labelDefaultEngines); + add(labelDefaultEngines); + add(labelOvalEngines); + add(labelTriangleEngines); + add(spinnerSpeed); + add(spinnerWeight); + add(spinnerNumberOfEngines); + add(checkBoxBombs); + add(checkBoxRockets); + add(checkBoxEngines); + add(panelObject); + add(panelColorRed); + add(panelColorGreen); + add(panelColorBlue); + add(panelColorYellow); + add(panelColorWhite); + add(labelEngines); + add(panelColorBlack); + add(panelColorGray); + add(panelColorCyan); + add(buttonAdd); + add(buttonCancel); + setVisible(true); + } + public void setCompany(AbstractCompany company) { + this.company = company; + } + private class Canvas extends JComponent { + public Canvas() { + } + public void paintComponent(Graphics g) { + if (_stormtrooper == null) { + return; + } + super.paintComponents(g); + Graphics2D g2d = (Graphics2D) g; + _stormtrooper.DrawTransport(g2d); + super.repaint(); + } + } + private class ColorTransferable implements Transferable { + private Color color; + private static final DataFlavor colorDataFlavor = new DataFlavor(Color.class, "Color"); + public ColorTransferable(Color color) { + this.color = color; + } + @Override + public DataFlavor[] getTransferDataFlavors() { + return new DataFlavor[]{colorDataFlavor}; + } + @Override + public boolean isDataFlavorSupported(DataFlavor flavor) { + return colorDataFlavor.equals(flavor); + } + @Override + public Object getTransferData(DataFlavor flavor) throws UnsupportedFlavorException { + if (isDataFlavorSupported(flavor)) { + return color; + } else { + throw new UnsupportedFlavorException(flavor); + } + } + } + private class ColorTransferHandler extends TransferHandler { + @Override + public int getSourceActions(JComponent c) { + return TransferHandler.COPY; + } + @Override + protected Transferable createTransferable(JComponent c) { + return new ColorTransferable(c.getBackground()); + } + } + private class EnginesTransferable implements Transferable { + private IDrawingEngines engines; + private static final DataFlavor enginesDataFlavor = new DataFlavor(IDrawingEngines.class, "Engines"); + public EnginesTransferable(IDrawingEngines engines) { + this.engines = engines; + } + @Override + public DataFlavor[] getTransferDataFlavors() { + return new DataFlavor[]{enginesDataFlavor}; + } + @Override + public boolean isDataFlavorSupported(DataFlavor flavor) { + return flavor.equals(enginesDataFlavor); + } + @Override + public Object getTransferData(DataFlavor flavor) throws UnsupportedFlavorException { + if (isDataFlavorSupported(flavor)) { + return engines; + } else { + throw new UnsupportedFlavorException(flavor); + } + } + } + +} \ No newline at end of file -- 2.25.1 From b345db3a0008b7c09d18bbbd17ca4cab7d40917c Mon Sep 17 00:00:00 2001 From: ilyaryabovv Date: Sun, 12 May 2024 12:27:14 +0400 Subject: [PATCH 2/4] =?UTF-8?q?Revert=20"=D0=BB=D0=B0=D0=B15"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This reverts commit 8fd3691dd45acf3bea55b6915a1fc9f19d7e43e6. --- .../src/Drawnings/DrawingStormtrooper.java | 19 +- .../src/Entities/EntityBaseStormtrooper.java | 9 - .../src/Entities/EntityStormtrooper.java | 12 - .../src/FormStormtrooperCollection.java | 43 +- .../src/FormStormtrooperConfig.java | 467 ------------------ 5 files changed, 45 insertions(+), 505 deletions(-) delete mode 100644 ProjectStormtrooper/src/FormStormtrooperConfig.java diff --git a/ProjectStormtrooper/src/Drawnings/DrawingStormtrooper.java b/ProjectStormtrooper/src/Drawnings/DrawingStormtrooper.java index dea49e1..6901e46 100644 --- a/ProjectStormtrooper/src/Drawnings/DrawingStormtrooper.java +++ b/ProjectStormtrooper/src/Drawnings/DrawingStormtrooper.java @@ -8,8 +8,25 @@ import java.awt.*; public class DrawingStormtrooper extends DrawingBaseStormtrooper{ - public DrawingStormtrooper(int speed, float weight, Color bodyColor, Color additionalColor,boolean rockets, boolean bombs, boolean engines) { + public DrawingStormtrooper(int speed, float weight, Color bodyColor, Color additionalColor,boolean rockets, boolean bombs, boolean engines, int typeOfEngines) { EntityBaseStormtrooper = new EntityStormtrooper(speed, weight, bodyColor, additionalColor, rockets, bombs, engines); + if(engines){ + switch(typeOfEngines){ + case 1: + drawingEngines = new DrawingEngines(); + drawingEngines.setAmountOfEngines((int)((Math.random()*3)+1)*2); + break; + case 2: + drawingEngines = new DrawingTriangleEngines(); + drawingEngines.setAmountOfEngines((int)((Math.random()*3)+1)*2); + break; + case 3: + drawingEngines = new DrawingOvalEngines(); + drawingEngines.setAmountOfEngines((int)((Math.random()*3)+1)*2); + break; + } + + } _startPosX=null; _startPosY=null; _pictureWidth = null; diff --git a/ProjectStormtrooper/src/Entities/EntityBaseStormtrooper.java b/ProjectStormtrooper/src/Entities/EntityBaseStormtrooper.java index 9846166..3616188 100644 --- a/ProjectStormtrooper/src/Entities/EntityBaseStormtrooper.java +++ b/ProjectStormtrooper/src/Entities/EntityBaseStormtrooper.java @@ -5,17 +5,8 @@ import java.awt.*; public class EntityBaseStormtrooper { private int Speed; - public void setSpeed(int speed){ - Speed = speed; - } private float Weight; - public void setWeight ( float weight){ - Weight= 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) diff --git a/ProjectStormtrooper/src/Entities/EntityStormtrooper.java b/ProjectStormtrooper/src/Entities/EntityStormtrooper.java index 03a18f3..1ee9923 100644 --- a/ProjectStormtrooper/src/Entities/EntityStormtrooper.java +++ b/ProjectStormtrooper/src/Entities/EntityStormtrooper.java @@ -3,30 +3,18 @@ package Entities; import java.awt.*; public class EntityStormtrooper extends EntityBaseStormtrooper{ private Color AdditionalColor; - public void setAdditionalColor(Color additionalColor){ - AdditionalColor = additionalColor; - } public Color getAdditionalColor() { return AdditionalColor; } private boolean Rockets; - public void setRockets ( boolean rockets){ - Rockets= rockets; - } public boolean getRockets() { return Rockets; } private boolean Bombs; - public void setBombs (boolean bombs){ - Bombs= bombs; - } public boolean getBombs() { return Bombs; } private boolean Engines; - public void setEngines (boolean engines){ - Engines = engines; - } public boolean getEngines() {return Engines;} public EntityStormtrooper(int speed, float weight, Color bodyColor, Color additionalColor, boolean rockets, boolean bombs, boolean engines) { diff --git a/ProjectStormtrooper/src/FormStormtrooperCollection.java b/ProjectStormtrooper/src/FormStormtrooperCollection.java index 4fb7324..7715c11 100644 --- a/ProjectStormtrooper/src/FormStormtrooperCollection.java +++ b/ProjectStormtrooper/src/FormStormtrooperCollection.java @@ -28,6 +28,7 @@ public class FormStormtrooperCollection extends JFrame{ private JButton buttonRemoveCollection = new JButton("Удалить"); private JButton buttonCreateCompany = new JButton("Создать компанию"); private JButton createButton = new JButton("Создать бомбардировщик"); + private JButton createShipButton = new JButton("Создать базовый бомбардировщик"); private JButton removeButton = new JButton("Удалить"); private JButton removeObjectsButton = new JButton("Удаленные объекты"); private JButton GoToCheckButton = new JButton("На проверку"); @@ -44,10 +45,10 @@ public class FormStormtrooperCollection extends JFrame{ _canvasStormtrooper.SetCollectionToCanvas(_company); _canvasStormtrooper.repaint(); } - private void CreateObject(String typeOfClass){ + private void CreateObject(String typeOfClass) { if (_company == null) return; - int speed = (int)(Math.random() * 300 + 100); - float weight = (float)(Math.random() * 3000 + 1000); + int speed = (int) (Math.random() * 300 + 100); + float weight = (float) (Math.random() * 3000 + 1000); Color bodyColor = getColor(); DrawingBaseStormtrooper drawingBaseStormtrooper; switch (typeOfClass) { @@ -59,21 +60,23 @@ public class FormStormtrooperCollection extends JFrame{ boolean rockets = new Random().nextBoolean(); boolean bombs = new Random().nextBoolean(); boolean engines = new Random().nextBoolean(); - int typeOfEngine = ((int)((Math.random()*3)+1)); - drawingBaseStormtrooper = new DrawingStormtrooper(speed, weight, bodyColor, additionalColor, rockets, bombs,engines,typeOfEngine); + + int typeOfEngine = ((int) ((Math.random() * 3) + 1)); + drawingBaseStormtrooper = new DrawingStormtrooper(speed, weight, bodyColor, additionalColor, rockets, bombs, engines, typeOfEngine); break; - default: return; + default: + return; } - if (_company._collection.Insert(drawingBaseStormtrooper, 0) != -1) { + if (_company._collection.Insert(drawingBaseStormtrooper) != -1) { JOptionPane.showMessageDialog(null, "Объект добавлен"); canvasShow(); - } - else { + } else { JOptionPane.showMessageDialog(null, "Объект не удалось добавить"); } } + public Color getColor() { - Color initializator = new Color((int)(Math.random() * 255 + 0),(int)(Math.random() * 255 + 0),(int)(Math.random() * 255 + 0)); + Color initializator = new Color((int) (Math.random() * 255 + 0), (int) (Math.random() * 255 + 0), (int) (Math.random() * 255 + 0)); Color color = JColorChooser.showDialog(this, "Цвет", initializator); return color; } @@ -82,15 +85,22 @@ public class FormStormtrooperCollection extends JFrame{ setTitle(title); setMinimumSize(dimension); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + + TextField = new JFormattedTextField(); + + + createShipButton.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + CreateObject("DrawingBaseStormtrooper"); + } + }); createButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { - if (_company==null) return; - FormStormtrooperConfig form = new FormStormtrooperConfig("",new Dimension(800,300)); - form.setCompany(_company); - form.Init(); + CreateObject("DrawingStormtrooper"); } }); @@ -265,6 +275,7 @@ public class FormStormtrooperCollection extends JFrame{ buttonRemoveCollection.setBounds(getWidth()-190, 195, 150, 20); ComboBoxCollections.setBounds(getWidth() - 190, 225, 150, 20); buttonCreateCompany.setBounds(getWidth()-190, 255, 150, 20); + createShipButton.setBounds(getWidth() - 190, 285, 150, 30); createButton.setBounds(getWidth() - 190, 325, 150, 30); RandomButton.setBounds(getWidth() - 190, 365, 150, 30); removeObjectsButton.setBounds(getWidth()-190, 505, 150, 30); @@ -276,8 +287,8 @@ public class FormStormtrooperCollection extends JFrame{ setLayout(null); add(_canvasStormtrooper); add(ComboBoxCollections); - add(CreateShipButton); - add(CreateButton); + add(createShipButton); + add(createButton); add(TextField); add(RemoveButton); add(GoToCheckButton); diff --git a/ProjectStormtrooper/src/FormStormtrooperConfig.java b/ProjectStormtrooper/src/FormStormtrooperConfig.java deleted file mode 100644 index 2e6be98..0000000 --- a/ProjectStormtrooper/src/FormStormtrooperConfig.java +++ /dev/null @@ -1,467 +0,0 @@ -import CollectionGenericObjects.AbstractCompany; -import Drawnings.*; -import Drawnings.Engines.*; -import Entities.EntityStormtrooper; -import javax.swing.*; -import javax.swing.event.ChangeEvent; -import javax.swing.event.ChangeListener; -import java.awt.*; -import java.awt.datatransfer.DataFlavor; -import java.awt.datatransfer.StringSelection; -import java.awt.datatransfer.Transferable; -import java.awt.datatransfer.UnsupportedFlavorException; -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; -import java.awt.event.MouseAdapter; -import java.awt.event.MouseEvent; -import java.io.IOException; - -public class FormStormtrooperConfig extends JFrame { - private String title; - private Dimension dimension; - private DrawingBaseStormtrooper _stormtrooper; - private AbstractCompany company = null; - private JLabel labelSpeed = new JLabel("Скорость"); - private JLabel labelWeight = new JLabel("Вес"); - private JLabel labelNumberOfEngines = new JLabel("Двигатели"); - - private JLabel labelBaseStormtrooper = new JLabel("Самолет", SwingConstants.CENTER); - private JLabel labelStormtrooper = new JLabel("Бомбардировщик", SwingConstants.CENTER); - private JLabel labelColor = new JLabel("Цвета"); - private JLabel labelBodyColor = new JLabel("Основной цвет", SwingConstants.CENTER); - private JLabel labelAdditionalColor = new JLabel("Дополнительный цвет", SwingConstants.CENTER); - private JLabel labelEngines = new JLabel("Тип двигателей",SwingConstants.CENTER); - private JLabel labelDefaultEngines = new JLabel("Классические",SwingConstants.CENTER); - private JLabel labelOvalEngines = new JLabel("Овальные", SwingConstants.CENTER); - private JLabel labelTriangleEngines = new JLabel("Треугольные", SwingConstants.CENTER); - - private JSpinner spinnerSpeed = new JSpinner(); - private JSpinner spinnerWeight = new JSpinner(); - private JSpinner spinnerNumberOfEngines = new JSpinner(); - private JCheckBox checkBoxBombs = new JCheckBox("Имеет бомбы"); - private JCheckBox checkBoxRockets = new JCheckBox("Имеет ракеты"); - private JCheckBox checkBoxEngines = new JCheckBox("Имеет двигатели"); - private JComponent panelObject = new JPanel(); - private JPanel panelColorRed = new JPanel(); - private JPanel panelColorGreen = new JPanel(); - private JPanel panelColorBlue = new JPanel(); - private JPanel panelColorYellow = new JPanel(); - private JPanel panelColorBlack = new JPanel(); - private JPanel panelColorWhite = new JPanel(); - private JPanel panelColorGray = new JPanel(); - private JPanel panelColorCyan = new JPanel(); - private JButton buttonAdd = new JButton("Добавить"); - private JButton buttonCancel = new JButton("Отмена"); - - public FormStormtrooperConfig(String title, Dimension dimension) { - this.title = title; - this.dimension = dimension; - } - public void Init() { - SpinnerModel numSpeed = new SpinnerNumberModel(100, 100, 1000, 1); - SpinnerModel numWeight = new SpinnerNumberModel(100, 100, 1000, 1); - spinnerSpeed.setModel(numSpeed); - spinnerWeight.setModel(numWeight); - SpinnerModel numEngines = new SpinnerNumberModel(2, 2, 6, 2); - spinnerNumberOfEngines.setModel(numEngines); - panelObject = new Canvas(); - panelObject.setBorder(BorderFactory.createLineBorder(Color.BLACK, 2)); - - spinnerSpeed.addChangeListener(new ChangeListener() { - @Override - public void stateChanged(ChangeEvent e) { - if (_stormtrooper == null) return; - _stormtrooper.EntityBaseStormtrooper.setSpeed((int)spinnerSpeed.getValue()); - } - }); - spinnerWeight.addChangeListener(new ChangeListener() { - @Override - public void stateChanged(ChangeEvent e) { - if (_stormtrooper == null) return; - _stormtrooper.EntityBaseStormtrooper.setWeight((int)spinnerWeight.getValue()); - } - }); - - spinnerNumberOfEngines.addChangeListener(new ChangeListener() { - @Override - public void stateChanged(ChangeEvent e) { - if(_stormtrooper ==null)return; - if(_stormtrooper.EntityBaseStormtrooper instanceof EntityStormtrooper stormtrooper){ - _stormtrooper.drawingEngines.setAmountOfEngines((int) spinnerNumberOfEngines.getValue()); - panelObject.repaint(); - } - } - }); - checkBoxBombs.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent e) { - if (_stormtrooper == null) return; - if (_stormtrooper.EntityBaseStormtrooper instanceof EntityStormtrooper stormtrooper) { - stormtrooper.setBombs(checkBoxBombs.isSelected()); - panelObject.repaint(); - } - } - }); - checkBoxRockets.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent e) { - if (_stormtrooper == null) return; - if (_stormtrooper.EntityBaseStormtrooper instanceof EntityStormtrooper stormtrooper) { - stormtrooper.setRockets(checkBoxRockets.isSelected()); - panelObject.repaint(); - } - } - }); - - checkBoxEngines.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent e) { - if(_stormtrooper == null)return; - if(_stormtrooper.EntityBaseStormtrooper instanceof EntityStormtrooper stormtrooper){ - stormtrooper.setEngines(checkBoxEngines.isSelected()); - if(_stormtrooper instanceof DrawingStormtrooper stormtrooper1 && stormtrooper1.drawingEngines==null){ - stormtrooper1.drawingEngines=new DrawingEngines(); - stormtrooper1.drawingEngines.setAmountOfEngines((int) spinnerNumberOfEngines.getValue()); - } - panelObject.repaint(); - } - } - }); - labelBaseStormtrooper.setBackground(Color.WHITE); - labelStormtrooper.setBackground(Color.WHITE); - labelBaseStormtrooper.setBorder(BorderFactory.createLineBorder(Color.BLACK, 2)); - labelStormtrooper.setBorder(BorderFactory.createLineBorder(Color.BLACK, 2)); - labelBodyColor.setBorder(BorderFactory.createLineBorder(Color.BLACK, 2)); - labelAdditionalColor.setBorder(BorderFactory.createLineBorder(Color.BLACK, 2)); - labelDefaultEngines.setBorder(BorderFactory.createLineBorder(Color.BLACK, 2)); - labelOvalEngines.setBorder(BorderFactory.createLineBorder(Color.BLACK, 2)); - labelTriangleEngines.setBorder(BorderFactory.createLineBorder(Color.BLACK, 2)); - MouseAdapter labelObjectsMouseDown = new MouseAdapter() { - @Override - public void mousePressed(MouseEvent e) { - ((JLabel) e.getComponent()).getTransferHandler().exportAsDrag(((JLabel) e.getComponent()), e, TransferHandler.COPY); - } - }; - TransferHandler labelObjectsTransferHandler = new TransferHandler() { - @Override - public int getSourceActions(JComponent c) { - return TransferHandler.COPY; - } - @Override - protected Transferable createTransferable(JComponent c) { - return new StringSelection(((JLabel) c).getText()); - } - }; - - labelBaseStormtrooper.addMouseListener(labelObjectsMouseDown); - labelBaseStormtrooper.setTransferHandler(labelObjectsTransferHandler); - labelStormtrooper.addMouseListener(labelObjectsMouseDown); - labelStormtrooper.setTransferHandler(labelObjectsTransferHandler); - - MouseAdapter labelEnginesMouseDown = new MouseAdapter() { - @Override - public void mousePressed(MouseEvent e) { - ((JLabel) e.getComponent()).getTransferHandler().exportAsDrag(((JLabel) e.getComponent()), e, TransferHandler.COPY); - } - }; - - labelDefaultEngines.addMouseListener(labelEnginesMouseDown); - labelOvalEngines.addMouseListener(labelEnginesMouseDown); - labelTriangleEngines.addMouseListener(labelEnginesMouseDown); - labelDefaultEngines.setTransferHandler(new TransferHandler() { - @Override - public int getSourceActions(JComponent c) {return TransferHandler.COPY;} - - @Override - protected Transferable createTransferable(JComponent c) { - return new EnginesTransferable(new DrawingEngines()); - } - }); - labelOvalEngines.setTransferHandler(new TransferHandler() { - @Override - public int getSourceActions(JComponent c) {return TransferHandler.COPY;} - - @Override - protected Transferable createTransferable(JComponent c) { - return new EnginesTransferable(new DrawingOvalEngines()); - } - }); - labelTriangleEngines.setTransferHandler(new TransferHandler() { - @Override - public int getSourceActions(JComponent c) {return TransferHandler.COPY;} - - @Override - protected Transferable createTransferable(JComponent c) { - return new EnginesTransferable(new DrawingTriangleEngines()); - } - }); - - panelObject.setTransferHandler(new TransferHandler() { - @Override - public boolean canImport(TransferHandler.TransferSupport support) { - return support.isDataFlavorSupported(DataFlavor.stringFlavor) - || support.isDataFlavorSupported(EnginesTransferable.enginesDataFlavor); - } - @Override - public boolean importData(TransferHandler.TransferSupport support) { - if (canImport(support)) { - try { - String data = (String) support.getTransferable().getTransferData(DataFlavor.stringFlavor); - switch (data) { - case "Самолет": - _stormtrooper = new DrawingBaseStormtrooper((int) spinnerSpeed.getValue(), (int) spinnerWeight.getValue(), - Color.WHITE); - break; - case "Бомбардировщик": - _stormtrooper = new DrawingStormtrooper((int) spinnerSpeed.getValue(), (int) spinnerWeight.getValue(), - Color.WHITE, Color.BLACK, checkBoxBombs.isSelected(), checkBoxRockets.isSelected(),checkBoxEngines.isSelected()); - _stormtrooper.drawingEngines=new DrawingEngines(); - _stormtrooper.drawingEngines.setAmountOfEngines((int) spinnerNumberOfEngines.getValue()); - break; - } - if (_stormtrooper != null) { - _stormtrooper.SetPictureSize(155,155); - _stormtrooper.SetPosition(5,10); - } - else return false; - } - catch (UnsupportedFlavorException | IOException e) {} - try { - IDrawingEngines engines = - (IDrawingEngines) support.getTransferable().getTransferData(EnginesTransferable.enginesDataFlavor); - _stormtrooper.drawingEngines = engines; - _stormtrooper.drawingEngines.setAmountOfEngines((int) spinnerNumberOfEngines.getValue()); - - }catch (UnsupportedFlavorException | IOException e) {} - panelObject.repaint(); - return true; - } - return false; - } - }); - JPanel[] colorPanels = { - panelColorRed, - panelColorGreen, - panelColorBlue, - panelColorYellow, - panelColorWhite, - panelColorBlack, - panelColorGray, - panelColorCyan, - }; - panelColorRed.setBackground(Color.RED); - panelColorGreen.setBackground(Color.GREEN); - panelColorBlue.setBackground(Color.BLUE); - panelColorYellow.setBackground(Color.YELLOW); - panelColorWhite.setBackground(Color.WHITE); - panelColorBlack.setBackground(Color.BLACK); - panelColorGray.setBackground(Color.GRAY); - panelColorCyan.setBackground(Color.CYAN); - MouseAdapter colorMouseDown = new MouseAdapter() { - @Override - public void mousePressed(MouseEvent e) { - ((JPanel) e.getComponent()).getTransferHandler().exportAsDrag(((JPanel) e.getComponent()), e, TransferHandler.COPY); - } - }; - for (var panelColor : colorPanels) { - panelColor.addMouseListener(colorMouseDown); - panelColor.setTransferHandler(new ColorTransferHandler()); - } - labelBodyColor.setTransferHandler(new TransferHandler() { - @Override - public boolean canImport(TransferHandler.TransferSupport support) { - return support.isDataFlavorSupported(ColorTransferable.colorDataFlavor); - } - @Override - public boolean importData(TransferSupport support) { - try { - Color color = (Color) support.getTransferable().getTransferData(ColorTransferable.colorDataFlavor); - if (_stormtrooper == null) return false; - _stormtrooper.EntityBaseStormtrooper.setBodyColor(color); - return true; - } catch (UnsupportedFlavorException | IOException e) { - e.printStackTrace(); - } - return false; - } - }); - labelAdditionalColor.setTransferHandler(new TransferHandler() { - @Override - public boolean canImport(TransferHandler.TransferSupport support) { - if (!(_stormtrooper instanceof DrawingStormtrooper)) return false; - return support.isDataFlavorSupported(ColorTransferable.colorDataFlavor); - } - @Override - public boolean importData(TransferSupport support) { - try { - Color color = (Color) support.getTransferable().getTransferData(ColorTransferable.colorDataFlavor); - if (_stormtrooper == null) return false; - if (_stormtrooper.EntityBaseStormtrooper instanceof EntityStormtrooper stormtrooper) { - stormtrooper.setAdditionalColor(color); - labelColor.setBackground(color); - return true; - } - return false; - } catch (UnsupportedFlavorException | IOException e) { - e.printStackTrace(); - } - return false; - } - }); - buttonAdd.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent e) { - if (_stormtrooper == null) return; - DrawingBaseStormtrooper copyStormtrooper; - if (_stormtrooper instanceof DrawingStormtrooper) - copyStormtrooper = new DrawingStormtrooper((EntityStormtrooper) _stormtrooper.EntityBaseStormtrooper, _stormtrooper.drawingEngines); - else - copyStormtrooper = new DrawingBaseStormtrooper(_stormtrooper.EntityBaseStormtrooper, _stormtrooper.drawingEngines); - company._collection.Insert(copyStormtrooper); - FormStormtrooperCollection.canvasShow(); - dispose(); - } - }); - buttonCancel.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent e) { - dispose(); - } - }); - labelSpeed.setBounds(8, 17, 75, 15); - labelWeight.setBounds(8,43, 75, 15); - labelNumberOfEngines.setBounds(8, 68, 75, 15); - labelBaseStormtrooper.setBounds(8,150,105,30); - labelStormtrooper.setBounds(8,190,110,30); - checkBoxBombs.setBounds(8,85,150,20); - checkBoxRockets.setBounds(8,105,150,20); - checkBoxEngines.setBounds(8,125,150,20); - spinnerSpeed.setBounds(80,15, 60,20); - spinnerWeight.setBounds(80,40, 60,20); - spinnerNumberOfEngines.setBounds(80, 65,60,20); - panelObject.setBounds(555,50,160,150); - labelBodyColor.setBounds(500,5,100, 40); - labelAdditionalColor.setBounds(605,5,170,40); - labelEngines.setBounds(225,190,150,15); - labelDefaultEngines.setBounds(140, 210, 100, 40); - labelOvalEngines.setBounds(250, 210, 100,40); - labelTriangleEngines.setBounds(360,210,100,40); - labelColor.setBounds(200,10,50,15); - panelColorRed.setBounds(200, 30, 40, 40); - panelColorGreen.setBounds(250, 30, 40,40); - panelColorBlue.setBounds(300,30,40,40); - panelColorYellow.setBounds(350,30,40,40); - panelColorWhite.setBounds(200, 80,40,40); - panelColorBlack.setBounds(250,80,40,40); - panelColorGray.setBounds(300,80,40,40); - panelColorCyan.setBounds(350,80,40,40); - buttonAdd.setBounds(515, 210, 110, 40); - buttonCancel.setBounds(640, 210, 110, 40); - setSize(dimension.width, dimension.height); - setLayout(null); - add(labelSpeed); - add(labelWeight); - add(labelNumberOfEngines); - add(labelBaseStormtrooper); - add(labelStormtrooper); - add(labelColor); - add(labelBodyColor); - add(labelAdditionalColor); - add(labelDefaultEngines); - add(labelDefaultEngines); - add(labelOvalEngines); - add(labelTriangleEngines); - add(spinnerSpeed); - add(spinnerWeight); - add(spinnerNumberOfEngines); - add(checkBoxBombs); - add(checkBoxRockets); - add(checkBoxEngines); - add(panelObject); - add(panelColorRed); - add(panelColorGreen); - add(panelColorBlue); - add(panelColorYellow); - add(panelColorWhite); - add(labelEngines); - add(panelColorBlack); - add(panelColorGray); - add(panelColorCyan); - add(buttonAdd); - add(buttonCancel); - setVisible(true); - } - public void setCompany(AbstractCompany company) { - this.company = company; - } - private class Canvas extends JComponent { - public Canvas() { - } - public void paintComponent(Graphics g) { - if (_stormtrooper == null) { - return; - } - super.paintComponents(g); - Graphics2D g2d = (Graphics2D) g; - _stormtrooper.DrawTransport(g2d); - super.repaint(); - } - } - private class ColorTransferable implements Transferable { - private Color color; - private static final DataFlavor colorDataFlavor = new DataFlavor(Color.class, "Color"); - public ColorTransferable(Color color) { - this.color = color; - } - @Override - public DataFlavor[] getTransferDataFlavors() { - return new DataFlavor[]{colorDataFlavor}; - } - @Override - public boolean isDataFlavorSupported(DataFlavor flavor) { - return colorDataFlavor.equals(flavor); - } - @Override - public Object getTransferData(DataFlavor flavor) throws UnsupportedFlavorException { - if (isDataFlavorSupported(flavor)) { - return color; - } else { - throw new UnsupportedFlavorException(flavor); - } - } - } - private class ColorTransferHandler extends TransferHandler { - @Override - public int getSourceActions(JComponent c) { - return TransferHandler.COPY; - } - @Override - protected Transferable createTransferable(JComponent c) { - return new ColorTransferable(c.getBackground()); - } - } - private class EnginesTransferable implements Transferable { - private IDrawingEngines engines; - private static final DataFlavor enginesDataFlavor = new DataFlavor(IDrawingEngines.class, "Engines"); - public EnginesTransferable(IDrawingEngines engines) { - this.engines = engines; - } - @Override - public DataFlavor[] getTransferDataFlavors() { - return new DataFlavor[]{enginesDataFlavor}; - } - @Override - public boolean isDataFlavorSupported(DataFlavor flavor) { - return flavor.equals(enginesDataFlavor); - } - @Override - public Object getTransferData(DataFlavor flavor) throws UnsupportedFlavorException { - if (isDataFlavorSupported(flavor)) { - return engines; - } else { - throw new UnsupportedFlavorException(flavor); - } - } - } - -} \ No newline at end of file -- 2.25.1 From 648d42871ed4ceac1f249698a812bb1bae5d63ec Mon Sep 17 00:00:00 2001 From: ilyaryabovv Date: Sun, 28 Apr 2024 13:45:08 +0400 Subject: [PATCH 3/4] =?UTF-8?q?=D0=BB=D0=B0=D0=B14?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../AbstractCompany.java | 3 +- .../CollectionType.java | 7 ++ .../ICollectionGenericObjects.java | 3 +- .../ListGenericObjects.java | 41 +++++++++ .../MassiveGenericObjects.java | 42 ++------- .../StorageCollection.java | 39 ++++++++ .../StormtrooperSharingService.java | 3 - .../src/FormStormtrooperCollection.java | 88 +++++++++---------- 8 files changed, 137 insertions(+), 89 deletions(-) create mode 100644 ProjectStormtrooper/src/CollectionGenericObjects/CollectionType.java create mode 100644 ProjectStormtrooper/src/CollectionGenericObjects/ListGenericObjects.java create mode 100644 ProjectStormtrooper/src/CollectionGenericObjects/StorageCollection.java diff --git a/ProjectStormtrooper/src/CollectionGenericObjects/AbstractCompany.java b/ProjectStormtrooper/src/CollectionGenericObjects/AbstractCompany.java index f04184c..b1a22d8 100644 --- a/ProjectStormtrooper/src/CollectionGenericObjects/AbstractCompany.java +++ b/ProjectStormtrooper/src/CollectionGenericObjects/AbstractCompany.java @@ -18,8 +18,7 @@ public abstract class AbstractCompany { _pictureWidth = picWidth; _pictureHeight = picHeight; _collection = collection; - System.out.println(_pictureHeight+" "+_pictureWidth+" "+_placeSizeHeight+" "+_placeSizeWidth); - _collection.SetMaxCount(GetMaxCount(), (Class) DrawingBaseStormtrooper.class); + _collection.SetMaxCount(GetMaxCount()); } //Перегрузок нет public DrawingBaseStormtrooper GetRandomObject() diff --git a/ProjectStormtrooper/src/CollectionGenericObjects/CollectionType.java b/ProjectStormtrooper/src/CollectionGenericObjects/CollectionType.java new file mode 100644 index 0000000..bba944c --- /dev/null +++ b/ProjectStormtrooper/src/CollectionGenericObjects/CollectionType.java @@ -0,0 +1,7 @@ +package CollectionGenericObjects; + +public enum CollectionType { + None, + Massive, + List +} diff --git a/ProjectStormtrooper/src/CollectionGenericObjects/ICollectionGenericObjects.java b/ProjectStormtrooper/src/CollectionGenericObjects/ICollectionGenericObjects.java index d9e4279..b0f2825 100644 --- a/ProjectStormtrooper/src/CollectionGenericObjects/ICollectionGenericObjects.java +++ b/ProjectStormtrooper/src/CollectionGenericObjects/ICollectionGenericObjects.java @@ -4,9 +4,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/ProjectStormtrooper/src/CollectionGenericObjects/ListGenericObjects.java b/ProjectStormtrooper/src/CollectionGenericObjects/ListGenericObjects.java new file mode 100644 index 0000000..c7dbf28 --- /dev/null +++ b/ProjectStormtrooper/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; + } +} \ No newline at end of file diff --git a/ProjectStormtrooper/src/CollectionGenericObjects/MassiveGenericObjects.java b/ProjectStormtrooper/src/CollectionGenericObjects/MassiveGenericObjects.java index d3f6753..cdc06ab 100644 --- a/ProjectStormtrooper/src/CollectionGenericObjects/MassiveGenericObjects.java +++ b/ProjectStormtrooper/src/CollectionGenericObjects/MassiveGenericObjects.java @@ -1,15 +1,19 @@ package CollectionGenericObjects; +import Drawnings.DrawingBaseStormtrooper; + import java.lang.reflect.Array; public class MassiveGenericObjects implements ICollectionGenericObjects{ - private T[] _collection; + private T[] _collection = null; private int Count; - public void SetMaxCount(int size, Class type) { + public void SetMaxCount(int size) { if (size > 0) { - _collection = (T[]) Array.newInstance(type, size); - Count = size; + if (_collection == null) { + _collection = (T[]) Array.newInstance((Class) DrawingBaseStormtrooper.class, size); + Count = size; + } } } @Override @@ -31,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/ProjectStormtrooper/src/CollectionGenericObjects/StorageCollection.java b/ProjectStormtrooper/src/CollectionGenericObjects/StorageCollection.java new file mode 100644 index 0000000..bf56bdc --- /dev/null +++ b/ProjectStormtrooper/src/CollectionGenericObjects/StorageCollection.java @@ -0,0 +1,39 @@ +package CollectionGenericObjects; +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; + } + public T remove(String name, int position){ + if(_storages.containsKey(name)) + return _storages.get(name).Remove(position); + return null; + } + +} \ No newline at end of file diff --git a/ProjectStormtrooper/src/CollectionGenericObjects/StormtrooperSharingService.java b/ProjectStormtrooper/src/CollectionGenericObjects/StormtrooperSharingService.java index de43749..2a9311f 100644 --- a/ProjectStormtrooper/src/CollectionGenericObjects/StormtrooperSharingService.java +++ b/ProjectStormtrooper/src/CollectionGenericObjects/StormtrooperSharingService.java @@ -26,16 +26,13 @@ public class StormtrooperSharingService extends AbstractCompany{ protected void SetObjectsPosition() { int width = _pictureWidth / _placeSizeWidth; int height = _pictureHeight / _placeSizeHeight; - int curWidth = width - 4; int curHeight = 0; - for (int i = 0; i < (_collection.getCount()); i++) { if (_collection.Get(i) != null) { _collection.Get(i).SetPictureSize(_pictureWidth, _pictureHeight); _collection.Get(i).SetPosition(_placeSizeWidth * curWidth + 16, curHeight * _placeSizeHeight + 3); } - if (curWidth < width-1) curWidth++; else diff --git a/ProjectStormtrooper/src/FormStormtrooperCollection.java b/ProjectStormtrooper/src/FormStormtrooperCollection.java index 7715c11..3fc1480 100644 --- a/ProjectStormtrooper/src/FormStormtrooperCollection.java +++ b/ProjectStormtrooper/src/FormStormtrooperCollection.java @@ -1,18 +1,16 @@ -import CollectionGenericObjects.AbstractCompany; -import CollectionGenericObjects.MassiveGenericObjects; -import CollectionGenericObjects.StormtrooperSharingService; +import CollectionGenericObjects.*; import Drawnings.DrawingBaseStormtrooper; import Drawnings.DrawingStormtrooper; import javax.swing.*; -import javax.swing.text.MaskFormatter; import java.awt.*; import java.awt.event.*; -import java.text.ParseException; +import java.util.LinkedList; +import java.util.Queue; import java.util.Random; import static java.lang.Integer.parseInt; -public class FormStormtrooperCollection extends JFrame{ +public class FormStormtrooperCollection extends JFrame { private String title; private Dimension dimension; public static CanvasFormStormtrooperCollection _canvasStormtrooper = new CanvasFormStormtrooperCollection(); @@ -36,15 +34,18 @@ public class FormStormtrooperCollection extends JFrame{ private JButton RefreshButton = new JButton("Обновить"); private JComboBox ComboBoxCollections = new JComboBox(new String[]{"", "Хранилище"}); private JFormattedTextField TextField; + public FormStormtrooperCollection(String title, Dimension dimension) { this.title = title; this.dimension = dimension; } + public static void canvasShow() { _company.SetPosition(); _canvasStormtrooper.SetCollectionToCanvas(_company); _canvasStormtrooper.repaint(); } + private void CreateObject(String typeOfClass) { if (_company == null) return; int speed = (int) (Math.random() * 300 + 100); @@ -104,49 +105,45 @@ public class FormStormtrooperCollection extends JFrame{ } }); - RemoveButton.addActionListener(new ActionListener() { + 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()); int resultConfirmDialog = JOptionPane.showConfirmDialog(null, "Удалить", "Удаление", JOptionPane.YES_NO_OPTION); if (resultConfirmDialog == JOptionPane.NO_OPTION) return; - if (_company._collection.Remove(pos) != null) { - System.out.println(pos); + DrawingBaseStormtrooper obj = _storageCollection.remove( + listBoxCollection.getSelectedValue().toString(), pos); + if (obj != null) { JOptionPane.showMessageDialog(null, "Объект удален"); + _collectionRemovedObjects.add(obj); canvasShow(); - } - else { + } else { JOptionPane.showMessageDialog(null, "Не удалось удалить объект"); } } }); - GoToCheckButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { - if (_company == null) - { + if (_company == null) { return; } DrawingBaseStormtrooper stormtrooper = null; int counter = 100; - while (stormtrooper == null) - { + while (stormtrooper == null) { stormtrooper = _company.GetRandomObject(); counter--; - if (counter <= 0) - { + if (counter <= 0) { break; } } - if (stormtrooper == null) - { + if (stormtrooper == null) { return; } - FormStormtrooper form = new FormStormtrooper("Бомбардировщик", new Dimension(1000,750)); + FormStormtrooper form = new FormStormtrooper("Бомбардировщик", new Dimension(1000, 750)); form.addWindowListener(new WindowAdapter() { @Override public void windowClosing(WindowEvent e) { @@ -162,8 +159,7 @@ public class FormStormtrooperCollection extends JFrame{ RefreshButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { - if (_company == null) - { + if (_company == null) { return; } canvasShow(); @@ -172,22 +168,14 @@ public class FormStormtrooperCollection extends JFrame{ RandomButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { - if(_company==null){ + if (_company == null) { return; } FormAdditionalCollection form = new FormAdditionalCollection(); form.setCompany(_company); } }); - _canvasStormtrooper.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); - RandomButton.setBounds(getWidth()-190, 140, 150, 30); - TextField.setBounds(getWidth()-190,200,150,30); - RemoveButton.setBounds(getWidth()-190, 240, 150, 30); - GoToCheckButton.setBounds(getWidth()-190, 280, 150, 30); - RefreshButton.setBounds(getWidth()-190, getHeight()-90, 150, 30); + buttonAddCollection.addActionListener(new ActionListener() { @@ -285,29 +273,33 @@ public class FormStormtrooperCollection extends JFrame{ RefreshButton.setBounds(getWidth() - 190, 665, 150, 30); setSize(dimension.width, dimension.height); setLayout(null); + add(textBoxCollection); + add(radioButtonMassive); + add(radioButtonList); + add(buttonAddCollection); + add(listBoxCollection); + add(buttonRemoveCollection); + add(buttonCreateCompany); + add(labelCollectionName); + add(removeObjectsButton); add(_canvasStormtrooper); add(ComboBoxCollections); add(createShipButton); add(createButton); add(TextField); - add(RemoveButton); + add(removeButton); add(GoToCheckButton); add(RandomButton); add(RefreshButton); setVisible(true); - - addComponentListener(new ComponentAdapter() { - public void componentResized(ComponentEvent e) { - _canvasStormtrooper.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); - TextField.setBounds(getWidth()-190,200,150,30); - RemoveButton.setBounds(getWidth()-190, 240, 150, 30); - GoToCheckButton.setBounds(getWidth()-190, 280, 150, 30); - RandomButton.setBounds(getWidth()-190, 140, 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); } } \ No newline at end of file -- 2.25.1 From c2d708e526c578a0f491a35c4571b163b8d462a7 Mon Sep 17 00:00:00 2001 From: ilyaryabovv Date: Sun, 12 May 2024 13:51:52 +0400 Subject: [PATCH 4/4] Revert "Merge branch 'LabWork03' into LabWork04" This reverts commit c792adbea7b07621117d92c982abb3224e55aec2, reversing changes made to 615abc0bca9e61dbc7889619db0ca05b058e020a. --- .../AbstractCompany.java | 3 +- .../CollectionType.java | 7 + .../ICollectionGenericObjects.java | 3 +- .../ListGenericObjects.java | 41 +++ .../MassiveGenericObjects.java | 42 +-- .../StorageCollection.java | 39 +++ .../StormtrooperSharingService.java | 3 - .../src/FormStormtrooperCollection.java | 239 ++++++++++++------ 8 files changed, 259 insertions(+), 118 deletions(-) create mode 100644 ProjectStormtrooper/src/CollectionGenericObjects/CollectionType.java create mode 100644 ProjectStormtrooper/src/CollectionGenericObjects/ListGenericObjects.java create mode 100644 ProjectStormtrooper/src/CollectionGenericObjects/StorageCollection.java diff --git a/ProjectStormtrooper/src/CollectionGenericObjects/AbstractCompany.java b/ProjectStormtrooper/src/CollectionGenericObjects/AbstractCompany.java index f04184c..b1a22d8 100644 --- a/ProjectStormtrooper/src/CollectionGenericObjects/AbstractCompany.java +++ b/ProjectStormtrooper/src/CollectionGenericObjects/AbstractCompany.java @@ -18,8 +18,7 @@ public abstract class AbstractCompany { _pictureWidth = picWidth; _pictureHeight = picHeight; _collection = collection; - System.out.println(_pictureHeight+" "+_pictureWidth+" "+_placeSizeHeight+" "+_placeSizeWidth); - _collection.SetMaxCount(GetMaxCount(), (Class) DrawingBaseStormtrooper.class); + _collection.SetMaxCount(GetMaxCount()); } //Перегрузок нет public DrawingBaseStormtrooper GetRandomObject() diff --git a/ProjectStormtrooper/src/CollectionGenericObjects/CollectionType.java b/ProjectStormtrooper/src/CollectionGenericObjects/CollectionType.java new file mode 100644 index 0000000..bba944c --- /dev/null +++ b/ProjectStormtrooper/src/CollectionGenericObjects/CollectionType.java @@ -0,0 +1,7 @@ +package CollectionGenericObjects; + +public enum CollectionType { + None, + Massive, + List +} diff --git a/ProjectStormtrooper/src/CollectionGenericObjects/ICollectionGenericObjects.java b/ProjectStormtrooper/src/CollectionGenericObjects/ICollectionGenericObjects.java index d9e4279..b0f2825 100644 --- a/ProjectStormtrooper/src/CollectionGenericObjects/ICollectionGenericObjects.java +++ b/ProjectStormtrooper/src/CollectionGenericObjects/ICollectionGenericObjects.java @@ -4,9 +4,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/ProjectStormtrooper/src/CollectionGenericObjects/ListGenericObjects.java b/ProjectStormtrooper/src/CollectionGenericObjects/ListGenericObjects.java new file mode 100644 index 0000000..c7dbf28 --- /dev/null +++ b/ProjectStormtrooper/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; + } +} \ No newline at end of file diff --git a/ProjectStormtrooper/src/CollectionGenericObjects/MassiveGenericObjects.java b/ProjectStormtrooper/src/CollectionGenericObjects/MassiveGenericObjects.java index d3f6753..cdc06ab 100644 --- a/ProjectStormtrooper/src/CollectionGenericObjects/MassiveGenericObjects.java +++ b/ProjectStormtrooper/src/CollectionGenericObjects/MassiveGenericObjects.java @@ -1,15 +1,19 @@ package CollectionGenericObjects; +import Drawnings.DrawingBaseStormtrooper; + import java.lang.reflect.Array; public class MassiveGenericObjects implements ICollectionGenericObjects{ - private T[] _collection; + private T[] _collection = null; private int Count; - public void SetMaxCount(int size, Class type) { + public void SetMaxCount(int size) { if (size > 0) { - _collection = (T[]) Array.newInstance(type, size); - Count = size; + if (_collection == null) { + _collection = (T[]) Array.newInstance((Class) DrawingBaseStormtrooper.class, size); + Count = size; + } } } @Override @@ -31,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/ProjectStormtrooper/src/CollectionGenericObjects/StorageCollection.java b/ProjectStormtrooper/src/CollectionGenericObjects/StorageCollection.java new file mode 100644 index 0000000..bf56bdc --- /dev/null +++ b/ProjectStormtrooper/src/CollectionGenericObjects/StorageCollection.java @@ -0,0 +1,39 @@ +package CollectionGenericObjects; +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; + } + public T remove(String name, int position){ + if(_storages.containsKey(name)) + return _storages.get(name).Remove(position); + return null; + } + +} \ No newline at end of file diff --git a/ProjectStormtrooper/src/CollectionGenericObjects/StormtrooperSharingService.java b/ProjectStormtrooper/src/CollectionGenericObjects/StormtrooperSharingService.java index de43749..2a9311f 100644 --- a/ProjectStormtrooper/src/CollectionGenericObjects/StormtrooperSharingService.java +++ b/ProjectStormtrooper/src/CollectionGenericObjects/StormtrooperSharingService.java @@ -26,16 +26,13 @@ public class StormtrooperSharingService extends AbstractCompany{ protected void SetObjectsPosition() { int width = _pictureWidth / _placeSizeWidth; int height = _pictureHeight / _placeSizeHeight; - int curWidth = width - 4; int curHeight = 0; - for (int i = 0; i < (_collection.getCount()); i++) { if (_collection.Get(i) != null) { _collection.Get(i).SetPictureSize(_pictureWidth, _pictureHeight); _collection.Get(i).SetPosition(_placeSizeWidth * curWidth + 16, curHeight * _placeSizeHeight + 3); } - if (curWidth < width-1) curWidth++; else diff --git a/ProjectStormtrooper/src/FormStormtrooperCollection.java b/ProjectStormtrooper/src/FormStormtrooperCollection.java index de8b7b3..736fd58 100644 --- a/ProjectStormtrooper/src/FormStormtrooperCollection.java +++ b/ProjectStormtrooper/src/FormStormtrooperCollection.java @@ -1,43 +1,54 @@ -import CollectionGenericObjects.AbstractCompany; -import CollectionGenericObjects.MassiveGenericObjects; -import CollectionGenericObjects.StormtrooperSharingService; +import CollectionGenericObjects.*; import Drawnings.DrawingBaseStormtrooper; import Drawnings.DrawingStormtrooper; import javax.swing.*; -import javax.swing.text.MaskFormatter; import java.awt.*; import java.awt.event.*; -import java.text.ParseException; +import java.util.LinkedList; +import java.util.Queue; import java.util.Random; import static java.lang.Integer.parseInt; -public class FormStormtrooperCollection extends JFrame{ +public class FormStormtrooperCollection extends JFrame { private String title; private Dimension dimension; public static CanvasFormStormtrooperCollection _canvasStormtrooper = new CanvasFormStormtrooperCollection(); private static AbstractCompany _company = null; - private JButton CreateButton = new JButton("Создать бомбардировщик");; - private JButton CreateShipButton = new JButton("Создать базовый бомбардировщик"); - private JButton RemoveButton = new JButton("Удалить"); + private Queue _collectionRemovedObjects = new LinkedList<>(); + private StorageCollection _storageCollection = new StorageCollection(); + private JTextField textBoxCollection = new JTextField(); + private JRadioButton radioButtonMassive = new JRadioButton("Массив"); + private JRadioButton radioButtonList = new JRadioButton("Список"); + private JButton buttonAddCollection = new JButton("Добавить"); + private JList listBoxCollection = new JList(); + private JButton buttonRemoveCollection = new JButton("Удалить"); + private JButton buttonCreateCompany = new JButton("Создать компанию"); + private JButton createButton = new JButton("Создать бомбардировщик"); + private JButton createShipButton = new JButton("Создать базовый бомбардировщик"); + private JButton removeButton = new JButton("Удалить"); + private JButton removeObjectsButton = new JButton("Удаленные объекты"); private JButton GoToCheckButton = new JButton("На проверку"); private JButton RandomButton = new JButton("Случайные"); private JButton RefreshButton = new JButton("Обновить"); private JComboBox ComboBoxCollections = new JComboBox(new String[]{"", "Хранилище"}); private JFormattedTextField TextField; + public FormStormtrooperCollection(String title, Dimension dimension) { this.title = title; this.dimension = dimension; } + public static void canvasShow() { _company.SetPosition(); _canvasStormtrooper.SetCollectionToCanvas(_company); _canvasStormtrooper.repaint(); } - private void CreateObject(String typeOfClass){ + + private void CreateObject(String typeOfClass) { if (_company == null) return; - int speed = (int)(Math.random() * 300 + 100); - float weight = (float)(Math.random() * 3000 + 1000); + int speed = (int) (Math.random() * 300 + 100); + float weight = (float) (Math.random() * 3000 + 1000); Color bodyColor = getColor(); DrawingBaseStormtrooper drawingBaseStormtrooper; switch (typeOfClass) { @@ -49,24 +60,26 @@ public class FormStormtrooperCollection extends JFrame{ boolean rockets = new Random().nextBoolean(); boolean bombs = new Random().nextBoolean(); boolean engines = new Random().nextBoolean(); - int typeOfEngine = ((int)((Math.random()*3)+1)); - drawingBaseStormtrooper = new DrawingStormtrooper(speed, weight, bodyColor, additionalColor, rockets, bombs,engines,typeOfEngine); + int typeOfEngine = ((int) ((Math.random() * 3) + 1)); + drawingBaseStormtrooper = new DrawingStormtrooper(speed, weight, bodyColor, additionalColor, rockets, bombs, engines, typeOfEngine); break; - default: return; + default: + return; } - if (_company._collection.Insert(drawingBaseStormtrooper, 0) != -1) { + if (_company._collection.Insert(drawingBaseStormtrooper) != -1) { JOptionPane.showMessageDialog(null, "Объект добавлен"); canvasShow(); - } - else { + } else { JOptionPane.showMessageDialog(null, "Объект не удалось добавить"); } } + public Color getColor() { - Color initializator = new Color((int)(Math.random() * 255 + 0),(int)(Math.random() * 255 + 0),(int)(Math.random() * 255 + 0)); + Color initializator = new Color((int) (Math.random() * 255 + 0), (int) (Math.random() * 255 + 0), (int) (Math.random() * 255 + 0)); Color color = JColorChooser.showDialog(this, "Цвет", initializator); return color; } + public void Init() { setTitle(title); setMinimumSize(dimension); @@ -76,73 +89,58 @@ public class FormStormtrooperCollection extends JFrame{ TextField = new JFormattedTextField(); - ComboBoxCollections.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent e) { - switch (ComboBoxCollections.getSelectedItem().toString()) { - case "Хранилище": - _company = new StormtrooperSharingService(getWidth()-200, getHeight()-110, new MassiveGenericObjects()); - break; - } - } - }); - - CreateShipButton.addActionListener(new ActionListener() { + createShipButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { CreateObject("DrawingBaseStormtrooper"); } }); - CreateButton.addActionListener(new ActionListener() { + createButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { CreateObject("DrawingStormtrooper"); } }); - RemoveButton.addActionListener(new ActionListener() { + 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()); int resultConfirmDialog = JOptionPane.showConfirmDialog(null, "Удалить", "Удаление", JOptionPane.YES_NO_OPTION); if (resultConfirmDialog == JOptionPane.NO_OPTION) return; - if (_company._collection.Remove(pos) != null) { - System.out.println(pos); + DrawingBaseStormtrooper obj = _storageCollection.remove( + listBoxCollection.getSelectedValue().toString(), pos); + if (obj != null) { JOptionPane.showMessageDialog(null, "Объект удален"); + _collectionRemovedObjects.add(obj); canvasShow(); - } - else { + } else { JOptionPane.showMessageDialog(null, "Не удалось удалить объект"); } } }); - GoToCheckButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { - if (_company == null) - { + if (_company == null) { return; } DrawingBaseStormtrooper stormtrooper = null; int counter = 100; - while (stormtrooper == null) - { + while (stormtrooper == null) { stormtrooper = _company.GetRandomObject(); counter--; - if (counter <= 0) - { + if (counter <= 0) { break; } } - if (stormtrooper == null) - { + if (stormtrooper == null) { return; } - FormStormtrooper form = new FormStormtrooper("Бомбардировщик", new Dimension(1000,750)); + FormStormtrooper form = new FormStormtrooper("Бомбардировщик", new Dimension(1000, 750)); form.addWindowListener(new WindowAdapter() { @Override public void windowClosing(WindowEvent e) { @@ -158,8 +156,7 @@ public class FormStormtrooperCollection extends JFrame{ RefreshButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { - if (_company == null) - { + if (_company == null) { return; } canvasShow(); @@ -168,48 +165,136 @@ public class FormStormtrooperCollection extends JFrame{ RandomButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { - if(_company==null){ + if (_company == null) { return; } FormAdditionalCollection form = new FormAdditionalCollection(); form.setCompany(_company); } }); - _canvasStormtrooper.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); - RandomButton.setBounds(getWidth()-190, 140, 150, 30); - TextField.setBounds(getWidth()-190,200,150,30); - RemoveButton.setBounds(getWidth()-190, 240, 150, 30); - GoToCheckButton.setBounds(getWidth()-190, 280, 150, 30); - RefreshButton.setBounds(getWidth()-190, getHeight()-90, 150, 30); - setSize(dimension.width,dimension.height); + 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 StormtrooperSharingService(getWidth() - 200, getHeight() - 110, + collection); + break; + } + RerfreshListBoxItems(); + } + }); + removeObjectsButton.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + if (_collectionRemovedObjects.isEmpty()) { + JOptionPane.showMessageDialog(null, "Коллекция пуста"); + return; + } + DrawingBaseStormtrooper stormtrooper = null; + stormtrooper = _collectionRemovedObjects.remove(); + if (stormtrooper == null) { + return; + } + FormStormtrooper form = new FormStormtrooper("Бомбардировщик", new Dimension(1000, 750)); + form.Init(stormtrooper); + } + }); + 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); + ComboBoxCollections.setBounds(getWidth() - 190, 225, 150, 20); + buttonCreateCompany.setBounds(getWidth()-190, 255, 150, 20); + createShipButton.setBounds(getWidth() - 190, 285, 150, 30); + createButton.setBounds(getWidth() - 190, 325, 150, 30); + RandomButton.setBounds(getWidth() - 190, 365, 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); + RefreshButton.setBounds(getWidth() - 190, 665, 150, 30); + setSize(dimension.width, dimension.height); setLayout(null); + add(textBoxCollection); + add(radioButtonMassive); + add(radioButtonList); + add(buttonAddCollection); + add(listBoxCollection); + add(buttonRemoveCollection); + add(buttonCreateCompany); + add(labelCollectionName); + add(removeObjectsButton); add(_canvasStormtrooper); add(ComboBoxCollections); - add(CreateShipButton); - add(CreateButton); + add(createShipButton); + add(createButton); add(TextField); - add(RemoveButton); + add(removeButton); add(GoToCheckButton); add(RandomButton); add(RefreshButton); setVisible(true); - - addComponentListener(new ComponentAdapter() { - public void componentResized(ComponentEvent e) { - _canvasStormtrooper.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); - TextField.setBounds(getWidth()-190,200,150,30); - RemoveButton.setBounds(getWidth()-190, 240, 150, 30); - GoToCheckButton.setBounds(getWidth()-190, 280, 150, 30); - RandomButton.setBounds(getWidth()-190, 140, 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); } } \ No newline at end of file -- 2.25.1