From 8ca127a7789a7a696236adab69e2cc05a59e878d Mon Sep 17 00:00:00 2001 From: Sergey Kozyrev Date: Tue, 28 Nov 2023 18:05:14 +0400 Subject: [PATCH] SomethingStrange --- CollectionFrame.java | 172 +++++++++++++++++++++++++++++++++++++++---- DrawWheelCircle.java | 2 + DrawWheelSquare.java | 2 + 3 files changed, 163 insertions(+), 13 deletions(-) diff --git a/CollectionFrame.java b/CollectionFrame.java index 4fc3b09..0832ba2 100644 --- a/CollectionFrame.java +++ b/CollectionFrame.java @@ -1,34 +1,98 @@ import javax.swing.*; +import javax.swing.event.ListSelectionEvent; +import javax.swing.event.ListSelectionListener; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; +import java.awt.image.CropImageFilter; +import java.util.LinkedList; +import java.util.PriorityQueue; +import java.util.Queue; class CollectionFrame extends JComponent { - private final CarsGenericCollection _tanks; - + private final CarsGenericStorage _tanksStorage; + private final GarageFrame frame; + private Queue removedTankers; protected final int Width; protected final int Height; - public CollectionFrame(int width, int height) + public CollectionFrame(int width, int height, GarageFrame fr) { Width = width; Height = height; - _tanks = new CarsGenericCollection<>(Width, Height); + _tanksStorage = new CarsGenericStorage(Width, Height); + frame = fr; + removedTankers = new LinkedList<>(); } @Override public void paintComponent(Graphics g) { super.paintComponent(g); - g.drawImage(_tanks.ShowCars(), 0, 0, this); + if (frame.listStorage.getSelectedIndex() == -1) + return; + var obj = _tanksStorage.get(frame.listStorage.getSelectedValue()); + if (obj == null) + return; + if (obj.ShowCars() == null) + return; + g.drawImage(obj.ShowCars(), 0, 0, this); super.repaint(); } + + protected void ReloadObjects() + { + int index = frame.listStorage.getSelectedIndex(); + frame.listModel.clear(); + for (String key : _tanksStorage.Keys()) + { + frame.listModel.addElement(key); + } + if (!frame.listModel.isEmpty() && (index == -1 || index >= frame.listModel.size())) + { + frame.listStorage.setSelectedIndex(0); + } + else if (!frame.listModel.isEmpty() && index > -1 && index < frame.listModel.size()) + { + frame.listStorage.setSelectedIndex(index); + } + + } + protected void ButtonAddObject_Click() + { + String name = frame.nameStorageField.getText(); + if (name.length() == 0) + return; + _tanksStorage.AddSet(name); + ReloadObjects(); + } + + protected void ButtonRemoveObject_Click() + { + if (frame.listStorage.getSelectedIndex() == -1) + { + return; + } + if (JOptionPane.showConfirmDialog(null, "Delete object " + frame.listStorage.getSelectedValue() + "?", "Delete", JOptionPane.YES_NO_OPTION) == JOptionPane.NO_OPTION) + { + return; + } + _tanksStorage.DelSet(frame.listStorage.getSelectedValue()); + ReloadObjects(); + } + protected void ButtonAddTank_Click() { + if (frame.listStorage.getSelectedIndex() == -1) + return; + var obj = _tanksStorage.get(frame.listStorage.getSelectedValue()); + if (obj == null) + return; ConfigFrame form = new ConfigFrame(); form.setVisible(true); form.buttonAdd.addActionListener( new ActionListener() { public void actionPerformed(ActionEvent e){ - if (_tanks.plus(form.Gasoline._tanker) != -1) + DrawTanker dT = form.Gasoline._tanker; + if (dT != null && obj.plus(dT) != -1) { form.dispose(); JOptionPane.showMessageDialog(null, "Объект добавлен", "Информация", JOptionPane.INFORMATION_MESSAGE); @@ -48,11 +112,23 @@ class CollectionFrame extends JComponent { protected void ButtonRemoveTank_Click(String text) { + if (frame.listStorage.getSelectedIndex() == -1) + return; + var obj = _tanksStorage.get(frame.listStorage.getSelectedValue()); + if (obj == null) + return; if (JOptionPane.showConfirmDialog(null, "Delete Tanker?", "Delete", JOptionPane.YES_NO_OPTION) == JOptionPane.OK_OPTION) { - if (_tanks.minus(Integer.parseInt(text)) != null) + int index = -1; + DrawTanker deleted = null; + try { + deleted = obj.minus(Integer.parseInt(text)); + } catch(NumberFormatException e) { + } + if (deleted != null) { JOptionPane.showMessageDialog(null, "Объект удален", "Информация", JOptionPane.INFORMATION_MESSAGE); + removedTankers.add(deleted); super.repaint(); } else @@ -65,6 +141,14 @@ class CollectionFrame extends JComponent { protected void ButtonUpdate_Click() {super.repaint();} + protected void ButtonCreateDeleted_Click() + { + if (removedTankers.isEmpty()) + return; + var tank = removedTankers.poll(); + BaseFrame f = new BaseFrame(tank); + f.setVisible(true); + } } class GarageFrame extends JFrame { @@ -76,6 +160,18 @@ class GarageFrame extends JFrame { protected static final int Width = 1000; protected static final int Height = 600; CollectionFrame Collection; + + JButton addTankerButton; + JTextField indexTankerField; + JButton deleteTankerButton; + JButton updateCollectionButton; + JList listStorage; + DefaultListModel listModel; + JButton addCollectionButton; + JTextField nameStorageField; + JButton deleteCollectionbutton; + JButton createDeletedButton; + private void initUI() { setSize(Width, Height); @@ -86,7 +182,7 @@ class GarageFrame extends JFrame { setResizable(false); - JButton addTankerButton = new JButton("Add tanker"); + addTankerButton = new JButton("Add tanker"); addTankerButton.setLayout(null); addTankerButton.setBounds(Width-200, Height-550, 200, 30); add(addTankerButton); @@ -97,12 +193,12 @@ class GarageFrame extends JFrame { } }); - JTextField indexTankerField = new JTextField(); + indexTankerField = new JTextField(); indexTankerField.setBounds(Width- 200, Height-500, 200, 30); indexTankerField.setLayout(null); add(indexTankerField); - JButton deleteTankerButton = new JButton("Delete tanker"); + deleteTankerButton = new JButton("Delete tanker"); deleteTankerButton.setLayout(null); deleteTankerButton.setBounds(Width-200, Height-450, 200, 30); add(deleteTankerButton); @@ -113,7 +209,7 @@ class GarageFrame extends JFrame { } }); - JButton updateCollectionButton = new JButton("Update collection"); + updateCollectionButton = new JButton("Update collection"); updateCollectionButton.setLayout(null); updateCollectionButton.setBounds(Width-200, Height-400, 200, 30); add(updateCollectionButton); @@ -124,13 +220,63 @@ class GarageFrame extends JFrame { } }); + listModel = new DefaultListModel<>(); + listStorage = new JList(listModel); + listStorage.setLayout(null); + listStorage.setBounds(Width - 190, Height - 250, 180, 130); + add(listStorage); + listStorage.addListSelectionListener(new ListSelectionListener() { + @Override + public void valueChanged(ListSelectionEvent e) { + Collection.repaint(); + } + }); - Collection = new CollectionFrame(Width-200, Height); + addCollectionButton = new JButton("Add Collection"); + addCollectionButton.setLayout(null); + addCollectionButton.setBounds(Width-190, Height - 350, 180, 30); + add(addCollectionButton); + addCollectionButton.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + Collection.ButtonAddObject_Click(); + } + }); + + nameStorageField = new JTextField(); + nameStorageField.setBounds(Width- 190, Height- 300, 180, 30); + nameStorageField.setLayout(null); + add(nameStorageField); + + + deleteCollectionbutton = new JButton("Remove Collection"); + deleteCollectionbutton.setBounds(Width-190, Height - 100, 180, 30); + deleteCollectionbutton.setLayout(null); + add(deleteCollectionbutton); + deleteCollectionbutton.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + Collection.ButtonRemoveObject_Click(); + } + }); + + createDeletedButton = new JButton("Create deleted"); + createDeletedButton.setLayout(null); + createDeletedButton.setBounds(Width - 200, 10, 200, 30); + add(createDeletedButton); + createDeletedButton.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + Collection.ButtonCreateDeleted_Click(); + } + }); + + Collection = new CollectionFrame(Width-200, Height, this); Collection.setLayout(null); Collection.setBounds(0, 0, Width-200, Height); add(Collection); } -} +} \ No newline at end of file diff --git a/DrawWheelCircle.java b/DrawWheelCircle.java index cb0c2ae..ece7ada 100644 --- a/DrawWheelCircle.java +++ b/DrawWheelCircle.java @@ -39,11 +39,13 @@ public class DrawWheelCircle implements IWheelDraw { g2d.drawString("S",85 + _startPosX, 75 + _startPosY); if (wheelCounter == null) return; + g2d.setColor(bodyColor); switch (wheelCounter) { case THREE -> {g2d.fillOval(45 + _startPosX, 60 + _startPosY ,20, 20);} case FOUR -> {g2d.fillOval(30 + _startPosX, 60 + _startPosY ,20, 20); g2d.fillOval(60 + _startPosX, 60 + _startPosY ,20, 20);} } + g2d.setColor(stringColor); switch (wheelCounter) { case THREE -> {g2d.drawString("S",50 + _startPosX, 75 + _startPosY);} diff --git a/DrawWheelSquare.java b/DrawWheelSquare.java index a6f1f1e..215ec7a 100644 --- a/DrawWheelSquare.java +++ b/DrawWheelSquare.java @@ -39,6 +39,7 @@ public class DrawWheelSquare implements IWheelDraw{ g2d.fillRect(85 + _startPosX, 65 + _startPosY, 10, 10); if (wheelCounter == null) return; + g2d.setColor(bodyColor); switch (wheelCounter) { case THREE -> { g2d.fillOval(45 + _startPosX, 60 + _startPosY, 20, 20); @@ -48,6 +49,7 @@ public class DrawWheelSquare implements IWheelDraw{ g2d.fillOval(60 + _startPosX, 60 + _startPosY, 20, 20); } } + g2d.setColor(stringColor); switch (wheelCounter) { case THREE -> {g2d.fillRect(50 + _startPosX, 65 + _startPosY, 10, 10);}