diff --git a/src/BusesGenericCollection.java b/src/BusesGenericCollection.java index e6d8793..b9037cf 100644 --- a/src/BusesGenericCollection.java +++ b/src/BusesGenericCollection.java @@ -10,7 +10,7 @@ public class BusesGenericCollection(width * height, (Class) DrawingBus.class); + _collection = new SetGeneric(width * height); } public void showBuses(Graphics2D g){ drawBackground(g); @@ -24,16 +24,18 @@ public class BusesGenericCollection= _collection.getCount()) + return null; + return _collection.Get(position); + } private void drawBackground(Graphics2D g) { BasicStroke pen = new BasicStroke(3); g.setStroke(pen); diff --git a/src/BusesGenericStorage.java b/src/BusesGenericStorage.java new file mode 100644 index 0000000..5e32046 --- /dev/null +++ b/src/BusesGenericStorage.java @@ -0,0 +1,41 @@ +import java.util.HashMap; +import java.util.List; +import java.util.stream.Collectors; +public class BusesGenericStorage { + final HashMap> _busStorages; + public List Keys(){ + if(_busStorages == null) + return null; + return _busStorages.keySet().stream().collect(Collectors.toList()); + } + private final int _pictureWidth; + private final int _pictureHeight; + + public BusesGenericStorage(int pictureWidth, int pictureHeight){ + _busStorages = new HashMap<>(); + _pictureWidth = pictureWidth; + _pictureHeight = pictureHeight; + } + + public void addSet(String name){ + if(_busStorages.containsKey(name)) + return; + _busStorages.put(name, new BusesGenericCollection<>(_pictureWidth, _pictureHeight)); + } + + public void delSet(String name){ + if(!_busStorages.containsKey(name)) + return; + _busStorages.remove(name); + } + + public BusesGenericCollection getCollection(String name){ + if(!_busStorages.containsKey(name)) + return null; + return _busStorages.get(name); + } + + public DrawingBus Get(String collectionName, int position){ + return _busStorages.get(collectionName).Get(position); + } +} diff --git a/src/FrameBusCollection.java b/src/FrameBusCollection.java index df40ecb..31d0734 100644 --- a/src/FrameBusCollection.java +++ b/src/FrameBusCollection.java @@ -1,17 +1,26 @@ import javax.swing.*; +import javax.swing.border.StrokeBorder; import java.awt.*; import java.io.IOException; +import java.util.List; +import java.util.Objects; +import java.util.ArrayDeque; +import java.util.Queue; public class FrameBusCollection extends JFrame { - private BusesGenericCollection buses; + private BusesGenericStorage storage; + private JList listBoxStorages; + private DefaultListModel listBoxModel; JComponent pictureBoxCollection; TextField textFieldNumber; + TextField textFieldStorageName; + Queue queue = new ArrayDeque<>(); public FrameBusCollection(){ super("Набор автобусов"); - setSize(new Dimension(900,500)); + setSize(new Dimension(1000,500)); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); createGui(); - buses = new BusesGenericCollection<>(pictureBoxCollection.getWidth(),pictureBoxCollection.getHeight()); + storage = new BusesGenericStorage(pictureBoxCollection.getWidth(),pictureBoxCollection.getHeight()); setVisible(true); } private void createGui(){ @@ -19,43 +28,83 @@ public class FrameBusCollection extends JFrame { public void paintComponent(Graphics graphics){ super.paintComponent(graphics); Graphics2D graphics2D = (Graphics2D) graphics; - if (buses != null) buses.showBuses(graphics2D); + if (listBoxStorages == null || storage == null) + return; + var collection = storage.getCollection(listBoxStorages.getSelectedValue()); + if (collection == null) + return; + collection.showBuses(graphics2D); super.repaint(); } }; pictureBoxCollection.setSize(new Dimension(700,450)); JButton buttonAddBus = new JButton("Добавить автобус"); - buttonAddBus.setPreferredSize(new Dimension(160,30)); textFieldNumber = new TextField(); + textFieldStorageName = new TextField(); + JScrollPane scrollPane = new JScrollPane(); JButton buttonRemoveBus = new JButton("Удалить автобус"); - buttonRemoveBus.setPreferredSize(new Dimension(160,30)); JButton buttonRefreshCollection = new JButton("Обновить коллекцию"); - buttonAddBus.setPreferredSize(new Dimension(160,30)); + JButton buttonAddCollection = new JButton("Добавить набор"); + listBoxModel = new DefaultListModel<>(); + listBoxStorages= new JList<>(listBoxModel); + scrollPane.setViewportView(listBoxStorages); + JButton buttonDeleteCollection = new JButton("Удалить набор"); + JButton buttonTrash = new JButton("Корзина"); buttonAddBus.addActionListener(e -> buttonAddBusClick()); buttonRemoveBus.addActionListener(e -> buttonRemoveBusClick()); buttonRefreshCollection.addActionListener(e -> buttonRefreshBusClick()); + buttonAddCollection.addActionListener(e -> buttonAddCollectionClick()); + buttonDeleteCollection.addActionListener(e -> buttonDeleteCollectionClick()); + buttonTrash.addActionListener(e -> buttonTrashClick()); + JPanel panelTools = new JPanel(new GridBagLayout()); + panelTools.setBorder(new StrokeBorder(new BasicStroke(3))); JPanel panelCollection = new JPanel(new GridBagLayout()); + panelCollection.setBorder(new StrokeBorder(new BasicStroke(3))); GridBagConstraints constraints = new GridBagConstraints(); - constraints.insets.left = constraints.insets.right = 2; - constraints.insets.top = constraints.insets.bottom = 30; + constraints.insets.left = constraints.insets.right = 5; + constraints.insets.top = constraints.insets.bottom = 5; constraints.fill = GridBagConstraints.BOTH; constraints.gridx = 0; constraints.gridy = 0; - panelCollection.add(buttonAddBus, constraints); + panelCollection.add(textFieldStorageName, constraints); constraints.gridx = 0; constraints.gridy = 1; - panelCollection.add(textFieldNumber, constraints); + panelCollection.add(buttonAddCollection, constraints); constraints.gridx = 0; constraints.gridy = 2; - panelCollection.add(buttonRemoveBus, constraints); + panelCollection.add(scrollPane, constraints); constraints.gridx = 0; constraints.gridy = 3; - panelCollection.add(buttonRefreshCollection, constraints); + panelCollection.add(buttonDeleteCollection, constraints); + constraints.gridx = 0; + constraints.gridy = 0; + panelTools.add(panelCollection, constraints); + constraints.gridx = 0; + constraints.gridy = 1; + panelTools.add(buttonAddBus, constraints); + constraints.gridx = 0; + constraints.gridy = 2; + panelTools.add(textFieldNumber, constraints); + constraints.gridx = 0; + constraints.gridy = 3; + panelTools.add(buttonRemoveBus, constraints); + constraints.gridx = 0; + constraints.gridy = 4; + panelTools.add(buttonRefreshCollection, constraints); + constraints.gridx = 0; + constraints.gridy = 5; + panelTools.add(buttonTrash, constraints); + setLayout(new BorderLayout()); - add(panelCollection, BorderLayout.EAST); + add(panelTools, BorderLayout.EAST); add(pictureBoxCollection,BorderLayout.CENTER); } private void buttonAddBusClick(){ + if (listBoxStorages.getSelectedIndex() == -1) + return; + var obj = storage.getCollection(listBoxStorages.getSelectedValue()); + if (obj == null) + return; FrameTrolleybus form; try{ form = new FrameTrolleybus(); @@ -65,7 +114,7 @@ public class FrameBusCollection extends JFrame { } form.selectBusButton.addActionListener(e -> { form.selectBus(); - if (buses.insert(form.getSelectedBus())) { + if (obj.insert(form.getSelectedBus())) { JOptionPane.showMessageDialog(this, "Объект добавлен"); pictureBoxCollection.repaint(); } else { @@ -75,10 +124,17 @@ public class FrameBusCollection extends JFrame { }); } private void buttonRemoveBusClick() { + if (listBoxStorages.getSelectedIndex() == -1) + return; + var obj = storage.getCollection(listBoxStorages.getSelectedValue()); + if (obj == null) + return; int pos = Integer.parseInt(textFieldNumber.getText()); - if (buses.remove(pos)) + queue.add(obj.Get(pos)); + if (obj.remove(pos)) { JOptionPane.showMessageDialog(this,"Объект удалён"); + pictureBoxCollection.repaint(); } else { @@ -88,4 +144,49 @@ public class FrameBusCollection extends JFrame { private void buttonRefreshBusClick(){ pictureBoxCollection.repaint(); } + private void reloadObjects(){ + int index = listBoxStorages.getSelectedIndex(); + listBoxModel.clear(); + List keys = storage.Keys(); + for (String key : keys) { + listBoxModel.addElement(key); + } + if(listBoxModel.size() > 0 && (index == -1 || index >= listBoxModel.size())) + listBoxStorages.setSelectedIndex(0); + else if(listBoxModel.size() > 0) + listBoxStorages.setSelectedIndex(index); + } + private void buttonAddCollectionClick() { + if(textFieldStorageName.getText() == null ) { + JOptionPane.showMessageDialog(this, "Не все данные заполнены"); + return; + } + String name = textFieldStorageName.getText(); + if (Objects.equals(name, "")) { + JOptionPane.showMessageDialog(this, "Не все данные заполнены"); + return; + } + storage.addSet(name); + reloadObjects(); + } + private void buttonDeleteCollectionClick() { + if (listBoxStorages.getSelectedIndex() == -1) + return; + storage.delSet(listBoxStorages.getSelectedValue()); + reloadObjects(); + } + private void buttonTrashClick(){ + if(queue.size() == 0) + return; + FrameTrolleybus form; + try{ + form = new FrameTrolleybus(); + form.ChangeTrolleybus(queue.peek()); + queue.remove(); + } + catch (IOException e){ + throw new RuntimeException(); + } + + } } diff --git a/src/FrameTrolleybus.java b/src/FrameTrolleybus.java index 1c39920..777b209 100644 --- a/src/FrameTrolleybus.java +++ b/src/FrameTrolleybus.java @@ -38,6 +38,7 @@ public class FrameTrolleybus extends JFrame { pictureBoxTrolleybus.setBounds( 0, 0, getContentPane().getWidth(), getContentPane().getHeight()); createBusButton.addActionListener(e -> buttonCreateBusClick()); createTrolleybusButton.addActionListener(e -> buttonCreateTrolleybusClick()); + selectBusButton.addActionListener(e -> dispose()); stepButton.addActionListener(e -> buttonStepClick()); rightButton.setActionCommand("right"); rightButton.addActionListener(this::buttonMoveClick); @@ -187,5 +188,12 @@ public class FrameTrolleybus extends JFrame { if (drawingBus == null) { return; } - selectedBus = drawingBus;} -} \ No newline at end of file + selectedBus = drawingBus; + } + public void ChangeTrolleybus(DrawingBus bus){ + bus.setPosition(0,0); + drawingBus = bus; + pictureBoxTrolleybus.setBounds(0,0,getContentPane().getWidth(),getContentPane().getHeight()); + pictureBoxTrolleybus.repaint(); + } +} diff --git a/src/Main.java b/src/Main.java index 8002bc5..a93cc29 100644 --- a/src/Main.java +++ b/src/Main.java @@ -1,4 +1,4 @@ import java.io.IOException; public class Main { - public static void main(String[] args) throws IOException { new FrameHard(); } + public static void main(String[] args) throws IOException { new FrameBusCollection(); } } diff --git a/src/SetGeneric.java b/src/SetGeneric.java index 127715a..c491faa 100644 --- a/src/SetGeneric.java +++ b/src/SetGeneric.java @@ -1,39 +1,43 @@ import java.lang.reflect.Array; - +import java.util.ArrayList; +import java.util.List; public class SetGeneric{ - private final T[] places; - public int getCount() {return places.length;} - public SetGeneric(int count, Class type){ - places = (T[]) Array.newInstance(type, count); + private final List places; + private final int maxCount; + public int getCount() {return places.size();} + public SetGeneric(int count){ + maxCount = count; + places = new ArrayList<>(); } public boolean insert(T bus){ + if(places.size() == maxCount) + return false; return insert(bus, 0); } public boolean insert(T bus, int position){ - if (!(position >= 0 && position < places.length)) + if (!(position >= 0 && position <= places.size() && places.size() < maxCount)) return false; - if (places[position] != null) - { - int ind = position; - while (ind < places.length && places[ind] != null) - ind++; - if (ind == places.length) - return false; - for (int i = ind - 1; i >= position; i--) - places[i + 1] = places[i]; - } - places[position] = bus; + places.add(position, bus); return true; } public boolean remove(int position){ if(!(position >= 0 && position < getCount())) return false; - places[position] = null; + places.remove(position); return true; } public T Get(int position){ if(!(position >= 0 && position < getCount())) return null; - return places[position]; + return (T)places.get(position); + } + public ArrayList GetBuses(int maxBuses){ + ArrayList toRet = new ArrayList<>(); + for(int i = 0; i < places.size(); i++){ + toRet.add(places.get(i)); + if(i == maxBuses) + return toRet; + } + return toRet; } }