Лабораторная работа №4

This commit is contained in:
insideq 2024-05-11 18:36:37 +04:00
parent cf1bbe3133
commit 6aa347f8eb
7 changed files with 237 additions and 61 deletions

View File

@ -18,7 +18,7 @@ public abstract class AbstractCompany {
_pictureWidth = picWidth; _pictureWidth = picWidth;
_pictureHeight = picHeight; _pictureHeight = picHeight;
_collection = collection; _collection = collection;
_collection.SetMaxCount(GetMaxCount(), DrawingBulldozer.class); _collection.SetMaxCount(GetMaxCount());
} }
//перегрузка операторов в джаве невозможна //перегрузка операторов в джаве невозможна
public DrawingBulldozer GetRandomObject() public DrawingBulldozer GetRandomObject()

View File

@ -0,0 +1,7 @@
package CollectionGenericObjects;
public enum CollectionType {
None,
Massive,
List
}

View File

@ -3,9 +3,8 @@ package CollectionGenericObjects;
public interface ICollectionGenericObjects<T> public interface ICollectionGenericObjects<T>
{ {
int getCount(); int getCount();
void SetMaxCount(int count, Class<T> type); void SetMaxCount(int count);
int Insert(T obj); int Insert(T obj);
int Insert(T obj, int position);
T Remove(int position); T Remove(int position);
T Get(int position); T Get(int position);
} }

View File

@ -0,0 +1,41 @@
package CollectionGenericObjects;
import java.util.ArrayList;
import java.util.List;
public class ListGenericObjects<T> implements ICollectionGenericObjects<T> {
private List<T> _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<T>();
}
@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;
}
}

View File

@ -1,14 +1,18 @@
package CollectionGenericObjects; package CollectionGenericObjects;
import Drawings.DrawingBulldozer;
import java.lang.reflect.Array; import java.lang.reflect.Array;
public class MassiveGenericObjects<T> implements ICollectionGenericObjects<T>{ public class MassiveGenericObjects<T> implements ICollectionGenericObjects<T>{
private T[] _collection; private T[] _collection = null;
private int Count; private int Count;
public void SetMaxCount(int size, Class<T> type) { @Override
public void SetMaxCount(int size) {
if (size > 0) { if (size > 0) {
_collection = (T[]) Array.newInstance(type, size); if (_collection == null){
Count = size; _collection = (T[]) Array.newInstance((Class) DrawingBulldozer.class, size);
Count = size;
}
} }
} }
@Override @Override
@ -30,36 +34,6 @@ public class MassiveGenericObjects<T> implements ICollectionGenericObjects<T>{
return -1; return -1;
} }
@Override @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) { public T Remove(int position) {
if (position >= getCount() || position < 0) if (position >= getCount() || position < 0)
return null; return null;

View File

@ -0,0 +1,41 @@
package CollectionGenericObjects;
import java.util.*;
public class StorageCollection<T> {
private Map<String, ICollectionGenericObjects<T>> _storages;
public StorageCollection()
{
_storages = new HashMap<String, ICollectionGenericObjects<T>>();
}
public Set<String> Keys() {
Set<String> 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<T>());
else if (collectionType == CollectionType.List)
_storages.put(name, new ListGenericObjects<T>());
}
public void DelCollection(String name)
{
if (_storages.containsKey(name))
_storages.remove(name);
}
// в джаве отсутствуют индикаторы
public ICollectionGenericObjects<T> getCollectionObject(String name) {
if (_storages.containsKey(name))
return _storages.get(name);
return null;
}
//дополнительное задание 1
public T Get(String name, int position){
if(_storages.containsKey(name))
return _storages.get(name).Remove(position);
return null;
}
}

View File

@ -1,6 +1,4 @@
import CollectionGenericObjects.AbstractCompany; import CollectionGenericObjects.*;
import CollectionGenericObjects.BulldozerSharingService;
import CollectionGenericObjects.MassiveGenericObjects;
import Drawings.CanvasFormBulldozerCollection; import Drawings.CanvasFormBulldozerCollection;
import Drawings.DrawingBulldozer; import Drawings.DrawingBulldozer;
import Drawings.DrawingExcavator; import Drawings.DrawingExcavator;
@ -12,6 +10,7 @@ import java.awt.event.ActionEvent;
import java.awt.event.ActionListener; import java.awt.event.ActionListener;
import java.text.ParseException; import java.text.ParseException;
import java.util.Random; import java.util.Random;
import java.util.LinkedList;
import static java.lang.Integer.parseInt; import static java.lang.Integer.parseInt;
@ -20,11 +19,21 @@ public class FormBulldozerCollection extends JFrame{
private Dimension dimension; private Dimension dimension;
public static CanvasFormBulldozerCollection<DrawingBulldozer> _canvasExcavator = new CanvasFormBulldozerCollection<DrawingBulldozer>(); public static CanvasFormBulldozerCollection<DrawingBulldozer> _canvasExcavator = new CanvasFormBulldozerCollection<DrawingBulldozer>();
private static AbstractCompany _company = null; private static AbstractCompany _company = null;
private JButton CreateExcButton = new JButton("Создать экскаватор"); private LinkedList<DrawingBulldozer> _collectionRemoveObjects = new LinkedList<DrawingBulldozer>();
private StorageCollection<DrawingBulldozer> _storageCollection = new StorageCollection<DrawingBulldozer>();
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 CreateExcButton = new JButton("Создать экскаватор");;
private JButton CreateBullButton = new JButton("Создать бульдозер"); private JButton CreateBullButton = new JButton("Создать бульдозер");
private JButton RemoveButton = new JButton("Удалить"); private JButton RemoveButton = new JButton("Удалить");
private JButton GoToCheckButton = new JButton("Тест"); private JButton GoToCheckButton = new JButton("Тест");
private JButton RandomButton = new JButton("Случайный объект"); private JButton RandomButton = new JButton("Случайный объект");
private JButton RemoveObjectsButton = new JButton("Показать удаленный");
private JButton RefreshButton = new JButton("Обновить"); private JButton RefreshButton = new JButton("Обновить");
private JComboBox ComboBoxCollections = new JComboBox(new String[]{"", "Хранилище"}); private JComboBox ComboBoxCollections = new JComboBox(new String[]{"", "Хранилище"});
private JFormattedTextField MaskedTextField; private JFormattedTextField MaskedTextField;
@ -55,7 +64,7 @@ public class FormBulldozerCollection extends JFrame{
break; break;
default: return; default: return;
} }
if (_company._collection.Insert(drawingBulldozer, 0) != -1) { if (_company._collection.Insert(drawingBulldozer) != -1) {
JOptionPane.showMessageDialog(null, "Объект добавлен"); JOptionPane.showMessageDialog(null, "Объект добавлен");
canvasShow(); canvasShow();
} }
@ -83,17 +92,6 @@ public class FormBulldozerCollection extends JFrame{
MaskedTextField = new JFormattedTextField(mask); MaskedTextField = new JFormattedTextField(mask);
ComboBoxCollections.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
switch (ComboBoxCollections.getSelectedItem().toString()) {
case "Хранилище":
_company = new BulldozerSharingService(getWidth()-200, getHeight()-70, new MassiveGenericObjects<DrawingBulldozer>());
break;
}
}
});
CreateBullButton.addActionListener(new ActionListener() { CreateBullButton.addActionListener(new ActionListener() {
@Override @Override
public void actionPerformed(ActionEvent e) { public void actionPerformed(ActionEvent e) {
@ -110,7 +108,7 @@ public class FormBulldozerCollection extends JFrame{
RemoveButton.addActionListener(new ActionListener() { RemoveButton.addActionListener(new ActionListener() {
@Override @Override
public void actionPerformed(ActionEvent e) { public void actionPerformed(ActionEvent e) {
if (_company == null || MaskedTextField.getText() == null) { if (_company == null || MaskedTextField.getText() == null || listBoxCollection.getSelectedValue().toString() == null) {
return; return;
} }
int pos = parseInt(MaskedTextField.getText()); int pos = parseInt(MaskedTextField.getText());
@ -118,8 +116,10 @@ public class FormBulldozerCollection extends JFrame{
"Удалить", "Удаление", "Удалить", "Удаление",
JOptionPane.YES_NO_OPTION); JOptionPane.YES_NO_OPTION);
if (resultConfirmDialog == JOptionPane.NO_OPTION) return; if (resultConfirmDialog == JOptionPane.NO_OPTION) return;
if (_company._collection.Remove(pos) != null) { DrawingBulldozer obj = _storageCollection.Get(listBoxCollection.getSelectedValue().toString(), pos);
if (obj != null) {
JOptionPane.showMessageDialog(null, "Объект удален"); JOptionPane.showMessageDialog(null, "Объект удален");
_collectionRemoveObjects.push(obj);
canvasShow(); canvasShow();
} }
else { else {
@ -178,27 +178,141 @@ public class FormBulldozerCollection extends JFrame{
} }
}); });
buttonAddCollection.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
if (textBoxCollection.getText().isEmpty() || (!radioButtonMassive.isSelected()
&& !radioButtonList.isSelected())) {
JOptionPane.showMessageDialog(null, "Не все данные заполнены");
return;
}
CollectionType collectionType = CollectionType.None;
if (radioButtonMassive.isSelected())
{
collectionType = CollectionType.Massive;
}
else if (radioButtonList.isSelected())
{
collectionType = CollectionType.List;
}
_storageCollection.AddCollection(textBoxCollection.getText(), collectionType);
RefreshListBoxItems();
}
});
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());
RefreshListBoxItems();
}
});
buttonCreateCompany.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
if (listBoxCollection.getSelectedIndex() < 0 || listBoxCollection.getSelectedValue() == null) {
JOptionPane.showMessageDialog(null, "Коллекция не выбрана");
return;
}
ICollectionGenericObjects<DrawingBulldozer> collection =
_storageCollection.getCollectionObject(listBoxCollection.getSelectedValue().toString());
if (collection == null) {
JOptionPane.showMessageDialog(null, "Коллекция не проинициализирована");
return;
}
switch (ComboBoxCollections.getSelectedItem().toString()) {
case "Хранилище":
_company = new BulldozerSharingService(getWidth()-200, getHeight()-70,
collection);
break;
}
RefreshListBoxItems();
}
});
RemoveObjectsButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
if (_collectionRemoveObjects.isEmpty())
{
return;
}
DrawingBulldozer bulldozer = null;
bulldozer = _collectionRemoveObjects.pop();
if (bulldozer == null)
{
return;
}
FormExcavator form = new FormExcavator("Экскаватор", new Dimension(900,565));
form.Init(bulldozer);
}
});
JLabel labelCollectionName = new JLabel("Название коллекции");
ButtonGroup radioButtonsGroup = new ButtonGroup();
radioButtonsGroup.add(radioButtonMassive);
radioButtonsGroup.add(radioButtonList);
_canvasExcavator.setBounds(0, 0, getWidth()-200, getHeight()); _canvasExcavator.setBounds(0, 0, getWidth()-200, getHeight());
labelCollectionName.setBounds(getWidth()-190, 30, 150, 20);
textBoxCollection.setBounds(getWidth()-190, 52, 150, 25);
radioButtonMassive.setBounds(getWidth()-190, 80, 75, 20);
radioButtonList.setBounds(getWidth()-105, 80, 75, 20);
buttonAddCollection.setBounds(getWidth()-190, 105, 150, 20);
listBoxCollection.setBounds(getWidth()-190, 135, 150, 70);
buttonRemoveCollection.setBounds(getWidth()-190, 210, 150, 20);
ComboBoxCollections.setBounds(getWidth()-190, 10, 150, 20); ComboBoxCollections.setBounds(getWidth()-190, 10, 150, 20);
CreateBullButton.setBounds(getWidth()-190, 60, 150, 30); buttonCreateCompany.setBounds(getWidth()-190, 240, 150, 20);
CreateExcButton.setBounds(getWidth()-190, 100, 150, 30); CreateBullButton.setBounds(getWidth()-190, 280, 150, 30);
MaskedTextField.setBounds(getWidth()-190,200,150,30); CreateExcButton.setBounds(getWidth()-190, 320, 150, 30);
RemoveButton.setBounds(getWidth()-190, 240, 150, 30); MaskedTextField.setBounds(getWidth()-190,360,150,30);
GoToCheckButton.setBounds(getWidth()-190, 280, 150, 30); RemoveButton.setBounds(getWidth()-190, 400, 150, 30);
RandomButton.setBounds(getWidth()-190, 320, 150, 30); GoToCheckButton.setBounds(getWidth()-190, 440, 150, 30);
RandomButton.setBounds(getWidth()-190, 480, 150, 30);
RemoveObjectsButton.setBounds(getWidth()-190, 520, 150, 30);
RefreshButton.setBounds(getWidth()-190, getHeight()-90, 150, 30); RefreshButton.setBounds(getWidth()-190, getHeight()-90, 150, 30);
setSize(dimension.width,dimension.height); setSize(dimension.width,dimension.height);
setLayout(null); setLayout(null);
add(_canvasExcavator); add(_canvasExcavator);
add(labelCollectionName);
add(textBoxCollection);
add(radioButtonMassive);
add(radioButtonList);
add(buttonAddCollection);
add(listBoxCollection);
add(buttonRemoveCollection);
add(ComboBoxCollections); add(ComboBoxCollections);
add(buttonCreateCompany);
add(CreateBullButton); add(CreateBullButton);
add(CreateExcButton); add(CreateExcButton);
add(MaskedTextField); add(MaskedTextField);
add(RemoveButton); add(RemoveButton);
add(GoToCheckButton); add(GoToCheckButton);
add(RandomButton); add(RandomButton);
add(RemoveObjectsButton);
add(RefreshButton); add(RefreshButton);
setVisible(true); setVisible(true);
} }
private void RefreshListBoxItems()
{
DefaultListModel<String> list = new DefaultListModel<String>();
for (String name : _storageCollection.Keys()) {
if (name != "")
{
list.addElement(name);
}
}
listBoxCollection.setModel(list);
}
} }