From 49c7245c3ba8300914d2cbbdf79cb692e5fd427c Mon Sep 17 00:00:00 2001 From: Zakharov_Rostislav Date: Thu, 7 Dec 2023 19:56:16 +0400 Subject: [PATCH 1/9] lab5 --- src/drawing_objects/DrawingBattleship.java | 3 + src/drawing_objects/DrawingShip.java | 33 +- src/entities/EntityBattleship.java | 2 +- src/entities/EntityShip.java | 2 +- src/frames/FrameShipConfig.java | 390 +++++++++++++++++++ src/frames/FrameShipsCollection.java | 38 +- src/frames/HardFrame.java | 2 +- src/movement_strategy/DrawingObjectShip.java | 2 +- 8 files changed, 440 insertions(+), 32 deletions(-) create mode 100644 src/frames/FrameShipConfig.java diff --git a/src/drawing_objects/DrawingBattleship.java b/src/drawing_objects/DrawingBattleship.java index 9cefa56..19dd640 100644 --- a/src/drawing_objects/DrawingBattleship.java +++ b/src/drawing_objects/DrawingBattleship.java @@ -44,4 +44,7 @@ public class DrawingBattleship extends DrawingShip { graphics2D.drawRect(startPosX + 26, startPosY + 26, 10, 10); } } + public void setAdditionalColor(Color color){ + ((EntityBattleship)entityShip).additionalColor = color; + } } \ No newline at end of file diff --git a/src/drawing_objects/DrawingShip.java b/src/drawing_objects/DrawingShip.java index 40f2b59..b2f0b1a 100644 --- a/src/drawing_objects/DrawingShip.java +++ b/src/drawing_objects/DrawingShip.java @@ -7,18 +7,31 @@ import java.awt.*; public class DrawingShip { protected EntityShip entityShip; - public EntityShip getEntityShip(){return entityShip;} + public EntityShip getEntityShip(){ + return entityShip; + } private IDrawBlocks drawingBlocks; - private int pictureWidth; - private int pictureHeight; + public void setDrawingBlocks(IDrawBlocks blocks){ + drawingBlocks = blocks; + } + public int pictureWidth; + public int pictureHeight; protected int startPosX; - public int getPosX() {return startPosX;} + public int getPosX() { + return startPosX; + } protected int startPosY; - public int getPosY() {return startPosY;} + public int getPosY() { + return startPosY; + } private int shipWidth = 150; - public int getWidth() {return shipWidth;} + public int getShipWidth() { + return shipWidth; + } private int shipHeight = 50; - public int getHeight() {return shipHeight;} + public int getShipHeight() { + return shipHeight; + } public IMoveableObject getMoveableObject() {return new DrawingObjectShip(this);} public DrawingShip(int speed, double weight, Color bodyColor, int width, int height, int blocksType, int blocksNumber) { if (width < shipWidth || height < shipHeight) @@ -115,4 +128,10 @@ public class DrawingShip { case DOWN -> startPosY += entityShip.step.get().intValue(); } } + public void setBlocksNumber(int number){ + drawingBlocks.setNumber(number); + } + public void setBodyColor(Color color){ + entityShip.bodyColor = color; + } } \ No newline at end of file diff --git a/src/entities/EntityBattleship.java b/src/entities/EntityBattleship.java index d5703b1..a0ede05 100644 --- a/src/entities/EntityBattleship.java +++ b/src/entities/EntityBattleship.java @@ -3,7 +3,7 @@ package entities; import java.awt.*; public class EntityBattleship extends EntityShip { - private Color additionalColor; + public Color additionalColor; public Color getAdditionalColor(){ return additionalColor; } diff --git a/src/entities/EntityShip.java b/src/entities/EntityShip.java index aa181c8..ec44e3f 100644 --- a/src/entities/EntityShip.java +++ b/src/entities/EntityShip.java @@ -12,7 +12,7 @@ public class EntityShip{ public double getWeight(){ return weight; } - private Color bodyColor; + public Color bodyColor; public Color getBodyColor(){ return bodyColor; } diff --git a/src/frames/FrameShipConfig.java b/src/frames/FrameShipConfig.java new file mode 100644 index 0000000..1103ba4 --- /dev/null +++ b/src/frames/FrameShipConfig.java @@ -0,0 +1,390 @@ +package frames; + +import java.awt.*; +import java.awt.datatransfer.DataFlavor; +import java.awt.datatransfer.StringSelection; +import java.awt.datatransfer.Transferable; +import java.awt.datatransfer.UnsupportedFlavorException; +import javax.swing.*; +import java.awt.event.*; +import java.io.IOException; + +import drawing_objects.*; + +public class FrameShipConfig extends JFrame { + private static class LabelTransferHandler extends TransferHandler { + @Override + public int getSourceActions(JComponent c) { + return TransferHandler.COPY; + } + @Override + protected Transferable createTransferable(JComponent c) { + return new StringSelection(((JLabel)c).getText()); + } + } + private record ColorTransferable(Color color) implements Transferable { + private static final DataFlavor colorDataFlavor = new DataFlavor(Color.class, "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 record IDrawBlocksTransferable(IDrawBlocks IDrawBlocksObject) implements Transferable { + private static final DataFlavor IDrawBlocksDataFlavor = new DataFlavor(IDrawBlocks.class, "IDrawBlocks"); + @Override + public DataFlavor[] getTransferDataFlavors() { + return new DataFlavor[]{IDrawBlocksDataFlavor}; + } + @Override + public boolean isDataFlavorSupported(DataFlavor flavor) { + return IDrawBlocksDataFlavor.equals(flavor); + } + @Override + public Object getTransferData(DataFlavor flavor) throws UnsupportedFlavorException { + if (isDataFlavorSupported(flavor)) { + return IDrawBlocksObject; + } else { + throw new UnsupportedFlavorException(flavor); + } + } + } + private static class PanelTransferHandler extends TransferHandler { + @Override + public int getSourceActions(JComponent c) { + return TransferHandler.COPY; + } + @Override + protected Transferable createTransferable(JComponent c) { + return new ColorTransferable(c.getBackground()); + } + } + private static class LabelMouseAdapter extends MouseAdapter{ + @Override + public void mousePressed(MouseEvent e) { + ((JLabel)e.getComponent()).getTransferHandler().exportAsDrag(((JLabel)e.getComponent()), e, TransferHandler.COPY); + } + } + private static class PanelMouseAdapter extends MouseAdapter{ + @Override + public void mousePressed(MouseEvent e) { + ((JPanel)e.getComponent()).getTransferHandler().exportAsDrag(((JPanel)e.getComponent()), e, TransferHandler.COPY); + } + } + private static class IDrawBlocksComponent extends JComponent{ + public IDrawBlocks obj; + public IDrawBlocksComponent(IDrawBlocks obj){ + this.obj = obj; + this.addMouseListener( + new MouseAdapter(){ + @Override + public void mousePressed(MouseEvent e) { + ((IDrawBlocksComponent)e.getComponent()).getTransferHandler().exportAsDrag(((IDrawBlocksComponent)e.getComponent()), e, TransferHandler.COPY); + } + } + ); + this.setTransferHandler( + new TransferHandler(){ + @Override + public int getSourceActions(JComponent c) { + return TransferHandler.COPY; + } + + @Override + protected Transferable createTransferable(JComponent c) { + return new IDrawBlocksTransferable(((IDrawBlocksComponent) c).obj); + } + } + ); + } + } + private final JComponent pictureBox = new JComponent(){ + public void paintComponent(Graphics graphics){ + super.paintComponent(graphics); + Graphics2D graphics2D = (Graphics2D) graphics; + if (drawingShip != null) drawingShip.drawTransport(graphics2D); + super.repaint(); + } + }; + public final JButton addButton = new JButton("Добавить"); + public final JButton cancelButton = new JButton("Отмена"); + public DrawingShip drawingShip; + private final int pictureBoxWidth = 218; + private final int pictureBoxHeight = 178; + public FrameShipConfig(){ + super("Создание объекта"); + setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + createGui(); + setVisible(true); + } + private void createGui(){ + pictureBox.setBorder(BorderFactory.createLineBorder(Color.BLACK, 2)); + IDrawBlocksComponent blocks = new IDrawBlocksComponent(new DrawingBlocks()); + IDrawBlocksComponent roundBlocks = new IDrawBlocksComponent(new DrawingRoundBlocks()); + IDrawBlocksComponent crossBlocks = new IDrawBlocksComponent(new DrawingCrossBlocks()); + JLabel squareLabel = new JLabel("Квадратные"); + squareLabel.setHorizontalAlignment(SwingConstants.CENTER); + squareLabel.setVerticalAlignment(SwingConstants.CENTER); + JLabel roundLabel = new JLabel("Круглые"); + roundLabel.setHorizontalAlignment(SwingConstants.CENTER); + roundLabel.setVerticalAlignment(SwingConstants.CENTER); + JLabel crossLabel = new JLabel("Крестовидные"); + crossLabel.setHorizontalAlignment(SwingConstants.CENTER); + crossLabel.setVerticalAlignment(SwingConstants.CENTER); + blocks.setLayout(new GridLayout(1,1)); + roundBlocks.setLayout(new GridLayout(1,1)); + crossBlocks.setLayout(new GridLayout(1,1)); + blocks.add(squareLabel); + roundBlocks.add(roundLabel); + crossBlocks.add(crossLabel); + blocks.setBorder(BorderFactory.createLineBorder(Color.BLACK, 2)); + roundBlocks.setBorder(BorderFactory.createLineBorder(Color.BLACK, 2)); + crossBlocks.setBorder(BorderFactory.createLineBorder(Color.BLACK, 2)); + JLabel colorLabel = new JLabel("Цвет"); + colorLabel.setHorizontalAlignment(SwingConstants.CENTER); + colorLabel.setVerticalAlignment(SwingConstants.CENTER); + colorLabel.setBorder(BorderFactory.createLineBorder(Color.BLACK, 2)); + JLabel additionalColorLabel = new JLabel("Доп цвет"); + additionalColorLabel.setHorizontalAlignment(SwingConstants.CENTER); + additionalColorLabel.setVerticalAlignment(SwingConstants.CENTER); + additionalColorLabel.setBorder(BorderFactory.createLineBorder(Color.BLACK, 2)); + JLabel IDrawBlocksLabel = new JLabel("Блоки"); + IDrawBlocksLabel.setHorizontalAlignment(SwingConstants.CENTER); + IDrawBlocksLabel.setVerticalAlignment(SwingConstants.CENTER); + IDrawBlocksLabel.setBorder(BorderFactory.createLineBorder(Color.BLACK, 2)); + JCheckBox checkBoxTurret = new JCheckBox("Наличие башни"); + JCheckBox checkBoxRocketLauncher = new JCheckBox("Наличие ракет"); + JLabel simpleLabel = new JLabel("Простой"); + simpleLabel.setTransferHandler(new LabelTransferHandler()); + simpleLabel.addMouseListener(new LabelMouseAdapter()); + simpleLabel.setHorizontalAlignment(SwingConstants.CENTER); + simpleLabel.setVerticalAlignment(SwingConstants.CENTER); + simpleLabel.setBorder(BorderFactory.createLineBorder(Color.BLACK, 2)); + JLabel advancedLabel = new JLabel("Продвинутый"); + advancedLabel.setTransferHandler(new LabelTransferHandler()); + advancedLabel.addMouseListener(new LabelMouseAdapter()); + advancedLabel.setHorizontalAlignment(SwingConstants.CENTER); + advancedLabel.setVerticalAlignment(SwingConstants.CENTER); + advancedLabel.setBorder(BorderFactory.createLineBorder(Color.BLACK, 2)); + JLabel speedLabel = new JLabel ("Скорость"); + JLabel weightLabel = new JLabel ("Вес"); + SpinnerNumberModel speedSpinnerModel = new SpinnerNumberModel(100.0, 100.0, 1000.0, 1.0); + SpinnerNumberModel weightSpinnerModel = new SpinnerNumberModel(100.0, 100.0, 1000.0, 1.0); + SpinnerNumberModel blocksNumberSpinnerModel = new SpinnerNumberModel(2, 2, 6, 2.0); + JSpinner speedSpinner = new JSpinner(speedSpinnerModel); + JSpinner weightSpinner = new JSpinner(weightSpinnerModel); + JSpinner blocksNumberSpinner = new JSpinner(blocksNumberSpinnerModel); + JPanel colorPanel = new JPanel(); + JPanel redPanel = new JPanel(); + JPanel greenPanel = new JPanel(); + JPanel bluePanel = new JPanel(); + JPanel yellowPanel = new JPanel(); + JPanel whitePanel = new JPanel(); + JPanel grayPanel = new JPanel(); + JPanel blackPanel = new JPanel(); + JPanel purplePanel = new JPanel(); + redPanel.setTransferHandler(new PanelTransferHandler()); + greenPanel.setTransferHandler(new PanelTransferHandler()); + bluePanel.setTransferHandler(new PanelTransferHandler()); + yellowPanel.setTransferHandler(new PanelTransferHandler()); + whitePanel.setTransferHandler(new PanelTransferHandler()); + grayPanel.setTransferHandler(new PanelTransferHandler()); + blackPanel.setTransferHandler(new PanelTransferHandler()); + purplePanel.setTransferHandler(new PanelTransferHandler()); + redPanel.addMouseListener(new PanelMouseAdapter()); + greenPanel.addMouseListener(new PanelMouseAdapter()); + bluePanel.addMouseListener(new PanelMouseAdapter()); + yellowPanel.addMouseListener(new PanelMouseAdapter()); + whitePanel.addMouseListener(new PanelMouseAdapter()); + grayPanel.addMouseListener(new PanelMouseAdapter()); + blackPanel.addMouseListener(new PanelMouseAdapter()); + purplePanel.addMouseListener(new PanelMouseAdapter()); + redPanel.setName("Красный"); + greenPanel.setName("Зелёный"); + bluePanel.setName("Синий"); + yellowPanel.setName("Жёлтый"); + whitePanel.setName("Белый"); + grayPanel.setName("Серый"); + blackPanel.setName("Чёрный"); + purplePanel.setName("Фиолетовый"); + pictureBox.setTransferHandler( + new TransferHandler(){ + @Override + public boolean canImport(TransferHandler.TransferSupport support) { + return support.isDataFlavorSupported(DataFlavor.stringFlavor); + } + @Override + public boolean importData(TransferHandler.TransferSupport support) { + if (canImport(support)) { + try { + int speed = ((Number)speedSpinner.getValue()).intValue(); + int weight = ((Number)weightSpinner.getValue()).intValue(); + int blocksNumber = ((Number)blocksNumberSpinner.getValue()).intValue(); + switch ((String)support.getTransferable().getTransferData(DataFlavor.stringFlavor)) { + case "Простой" -> { + drawingShip = new DrawingShip(speed, weight, Color.WHITE, + pictureBoxWidth, pictureBoxHeight, 0, blocksNumber); + drawingShip.setBlocksNumber(blocksNumber); + } + case "Продвинутый" -> { + drawingShip = new DrawingBattleship(speed, weight, Color.WHITE, Color.BLACK, + checkBoxTurret.isSelected(), checkBoxRocketLauncher.isSelected(), + pictureBoxWidth, pictureBoxHeight, 0, blocksNumber); + drawingShip.setBlocksNumber(blocksNumber); + } + } + drawingShip.setPosition(pictureBoxWidth / 2 - drawingShip.getShipWidth() / 2, + pictureBoxHeight / 2 - drawingShip.getShipHeight() / 2); + pictureBox.repaint(); + return true; + } catch (UnsupportedFlavorException | IOException e) { + e.printStackTrace(); + } + } + return false; + } + } + ); + IDrawBlocksLabel.setTransferHandler( + new TransferHandler(){ + @Override + public boolean canImport(TransferHandler.TransferSupport support) { + return support.isDataFlavorSupported(IDrawBlocksTransferable.IDrawBlocksDataFlavor); + } + @Override + public boolean importData(TransferHandler.TransferSupport support) { + if (canImport(support)) { + try { + IDrawBlocks obj = (IDrawBlocks) support.getTransferable().getTransferData(IDrawBlocksTransferable.IDrawBlocksDataFlavor); + obj.setNumber(((Number)blocksNumberSpinner.getValue()).intValue()); + if (drawingShip == null) + return false; + drawingShip.setDrawingBlocks(obj); + pictureBox.repaint(); + return true; + } catch (UnsupportedFlavorException | IOException e) { + e.printStackTrace(); + } + } + return false; + } + } + ); + colorLabel.setTransferHandler( + new TransferHandler(){ + @Override + public boolean canImport(TransferHandler.TransferSupport support) { + return support.isDataFlavorSupported(ColorTransferable.colorDataFlavor); + } + @Override + public boolean importData(TransferHandler.TransferSupport support) { + if (canImport(support)) { + try { + Color color = (Color) support.getTransferable().getTransferData(ColorTransferable.colorDataFlavor); + if (drawingShip == null) + return false; + drawingShip.setBodyColor(color); + pictureBox.repaint(); + return true; + } catch (UnsupportedFlavorException | IOException e) { + e.printStackTrace(); + } + } + return false; + } + } + ); + additionalColorLabel.setTransferHandler( + new TransferHandler(){ + @Override + public boolean canImport(TransferHandler.TransferSupport support) { + return support.isDataFlavorSupported(ColorTransferable.colorDataFlavor); + } + @Override + public boolean importData(TransferHandler.TransferSupport support) { + if (canImport(support)) { + try { + Color color = (Color) support.getTransferable().getTransferData(ColorTransferable.colorDataFlavor); + if (drawingShip == null || !(drawingShip instanceof DrawingBattleship)) + return false; + ((DrawingBattleship) drawingShip).setAdditionalColor(color); + pictureBox.repaint(); + return true; + } catch (UnsupportedFlavorException | IOException e) { + e.printStackTrace(); + } + } + return false; + } + } + ); + addButton.setBounds(555,250,94,29); + cancelButton.setBounds(679,250,94,29); + pictureBox.setBounds(555, 65, pictureBoxWidth, pictureBoxHeight); + colorLabel.setBounds(555, 20, 70, 33); + additionalColorLabel.setBounds(629, 20, 70, 33); + IDrawBlocksLabel.setBounds(703, 20, 70, 33); + checkBoxTurret.setBounds(6, 132, 159, 24); + checkBoxRocketLauncher.setBounds(6, 162, 145, 24); + simpleLabel.setBounds(171,169, 120, 50); + advancedLabel.setBounds(297,169, 120, 50); + blocks.setBounds(171,229, 120, 50); + roundBlocks.setBounds(297,229, 120, 50); + crossBlocks.setBounds(423,229, 120, 50); + colorPanel.setBounds(171, 23, 372,143); + speedSpinner.setBounds(6, 46, 150, 27); + speedLabel.setBounds(6, 23, 73, 20); + weightSpinner.setBounds(6, 99, 150, 27); + weightLabel.setBounds(6, 76, 33, 20); + blocksNumberSpinner.setBounds(6, 200, 150, 27); + redPanel.setBackground(Color.RED); + greenPanel.setBackground(Color.GREEN); + bluePanel.setBackground(Color.BLUE); + yellowPanel.setBackground(Color.YELLOW); + whitePanel.setBackground(Color.WHITE); + grayPanel.setBackground(Color.GRAY); + blackPanel.setBackground(Color.BLACK); + purplePanel.setBackground(Color.MAGENTA); + colorPanel.setLayout(new GridLayout(2, 4, 26, 10)); + colorPanel.add(redPanel); + colorPanel.add(greenPanel); + colorPanel.add(bluePanel); + colorPanel.add(yellowPanel); + colorPanel.add(whitePanel); + colorPanel.add(grayPanel); + colorPanel.add(blackPanel); + colorPanel.add(purplePanel); + add(colorLabel); + add(additionalColorLabel); + add(IDrawBlocksLabel); + setLayout(null); + setSize(818, 350); + add(speedLabel); + add(speedSpinner); + add(weightLabel); + add(weightSpinner); + add(simpleLabel); + add(advancedLabel); + add(checkBoxTurret); + add(checkBoxRocketLauncher); + add(pictureBox); + add(addButton); + add(cancelButton); + add(blocksNumberSpinner); + add(colorPanel); + add(blocks); + add(roundBlocks); + add(crossBlocks); + } +} diff --git a/src/frames/FrameShipsCollection.java b/src/frames/FrameShipsCollection.java index 9e78344..9cf1574 100644 --- a/src/frames/FrameShipsCollection.java +++ b/src/frames/FrameShipsCollection.java @@ -8,8 +8,9 @@ import java.util.ArrayList; import java.util.LinkedList; import java.util.Objects; -import drawing_objects.DrawingShip; -import generics.ShipsGenericStorage; +import drawing_objects.*; +import generics.*; +import movement_strategy.*; public class FrameShipsCollection extends JFrame { private final ShipsGenericStorage storage; @@ -143,29 +144,24 @@ public class FrameShipsCollection extends JFrame { reloadObjects(); } private void buttonAddShipClick() { - if (listStorages.getSelectedIndex() == -1) + if(listStorages.getSelectedIndex() == -1) { return; - var obj = storage.getSet(listStorages.getSelectedValue()); - if (obj == null) - return; - FrameBattleship form; - try { - form = new FrameBattleship(); - } catch (IOException e) { - throw new RuntimeException(e); } - form.selectShipButton.addActionListener(e->{ - form.select(); - DrawingShip ship = form.getSelectedShip(); - form.dispose(); - if (ship != null && obj.insert(ship)) { - JOptionPane.showMessageDialog(this, "Объект добавлен"); + ShipsGenericCollection drawingShips = storage.getSet(listStorages.getSelectedValue()); + FrameShipConfig frameShipConfig = new FrameShipConfig(); + frameShipConfig.addButton.addActionListener(e -> { + if (drawingShips.insert(frameShipConfig.drawingShip)) { + frameShipConfig.dispose(); + frameShipConfig.drawingShip.pictureWidth = pictureBoxCollection.getWidth(); + frameShipConfig.drawingShip.pictureHeight = pictureBoxCollection.getHeight(); + JOptionPane.showMessageDialog(null, "Объект добавлен", "Информация", JOptionPane.INFORMATION_MESSAGE); pictureBoxCollection.repaint(); } else { - JOptionPane.showMessageDialog(this, "Не удалось добавить объект"); + JOptionPane.showMessageDialog(null, "Не удалось добавить объект", "Информация", JOptionPane.INFORMATION_MESSAGE); } }); + frameShipConfig.cancelButton.addActionListener(e -> frameShipConfig.dispose()); } private void buttonRemoveShipClick(){ if (listStorages.getSelectedIndex() == -1 || Objects.equals(textFieldNumber.getText(), "") || textFieldNumber.getText() == null) @@ -190,12 +186,12 @@ public class FrameShipsCollection extends JFrame { private void buttonTrashClick(){ if (trashCollection.size() == 0) return; - FrameBattleship form; + FrameBattleship Frame; try { - form = new FrameBattleship(); + Frame = new FrameBattleship(); } catch (IOException e) { throw new RuntimeException(e); } - form.setShip(trashCollection.pop()); + Frame.setShip(trashCollection.pop()); } } diff --git a/src/frames/HardFrame.java b/src/frames/HardFrame.java index 41fd58f..6154d8e 100644 --- a/src/frames/HardFrame.java +++ b/src/frames/HardFrame.java @@ -37,7 +37,7 @@ public class HardFrame extends JFrame { }while(check); buttonMakeObject.addActionListener(e -> { DrawingShip drawingShip = generic.makeObject(); - drawingShip.setPosition(pictureBoxWidth / 2 - drawingShip.getWidth()/2, pictureBoxHeight / 2 - drawingShip.getHeight()/2); + drawingShip.setPosition(pictureBoxWidth / 2 - drawingShip.getShipWidth()/2, pictureBoxHeight / 2 - drawingShip.getShipHeight()/2); drawing = drawingShip; draw(); }); diff --git a/src/movement_strategy/DrawingObjectShip.java b/src/movement_strategy/DrawingObjectShip.java index 2cbc33a..fc222a9 100644 --- a/src/movement_strategy/DrawingObjectShip.java +++ b/src/movement_strategy/DrawingObjectShip.java @@ -13,7 +13,7 @@ public class DrawingObjectShip implements IMoveableObject{ if(drawingShip == null || drawingShip.getEntityShip() == null) return null; return new ObjectParameters(drawingShip.getPosX(), drawingShip.getPosY(), - drawingShip.getWidth(), drawingShip.getHeight()); + drawingShip.getShipWidth(), drawingShip.getShipHeight()); } @Override public int getStep(){ -- 2.25.1 From 3e82235fc8cd0cd81ec0f361776c8dc9a29da53d Mon Sep 17 00:00:00 2001 From: Zakharov_Rostislav Date: Sat, 9 Dec 2023 09:52:47 +0400 Subject: [PATCH 2/9] lab5 preparations for pull request --- src/frames/FrameShipsCollection.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/frames/FrameShipsCollection.java b/src/frames/FrameShipsCollection.java index 9cf1574..a3e4ac6 100644 --- a/src/frames/FrameShipsCollection.java +++ b/src/frames/FrameShipsCollection.java @@ -186,12 +186,12 @@ public class FrameShipsCollection extends JFrame { private void buttonTrashClick(){ if (trashCollection.size() == 0) return; - FrameBattleship Frame; + FrameBattleship frame; try { - Frame = new FrameBattleship(); + frame = new FrameBattleship(); } catch (IOException e) { throw new RuntimeException(e); } - Frame.setShip(trashCollection.pop()); + frame.setShip(trashCollection.pop()); } } -- 2.25.1 From 7fb34d7482960bfffc77bc11cd6d2d736b7f8ec2 Mon Sep 17 00:00:00 2001 From: Zakharov_Rostislav Date: Sat, 9 Dec 2023 09:55:52 +0400 Subject: [PATCH 3/9] lab5 preparations for pull request p.2 --- src/drawing_objects/DrawingShip.java | 4 ++-- src/frames/FrameShipConfig.java | 4 ++-- src/frames/HardFrame.java | 2 +- src/movement_strategy/DrawingObjectShip.java | 2 +- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/drawing_objects/DrawingShip.java b/src/drawing_objects/DrawingShip.java index b2f0b1a..64c2448 100644 --- a/src/drawing_objects/DrawingShip.java +++ b/src/drawing_objects/DrawingShip.java @@ -25,11 +25,11 @@ public class DrawingShip { return startPosY; } private int shipWidth = 150; - public int getShipWidth() { + public int getWidth() { return shipWidth; } private int shipHeight = 50; - public int getShipHeight() { + public int getHeight() { return shipHeight; } public IMoveableObject getMoveableObject() {return new DrawingObjectShip(this);} diff --git a/src/frames/FrameShipConfig.java b/src/frames/FrameShipConfig.java index 1103ba4..052a0ae 100644 --- a/src/frames/FrameShipConfig.java +++ b/src/frames/FrameShipConfig.java @@ -244,8 +244,8 @@ public class FrameShipConfig extends JFrame { drawingShip.setBlocksNumber(blocksNumber); } } - drawingShip.setPosition(pictureBoxWidth / 2 - drawingShip.getShipWidth() / 2, - pictureBoxHeight / 2 - drawingShip.getShipHeight() / 2); + drawingShip.setPosition(pictureBoxWidth / 2 - drawingShip.getWidth() / 2, + pictureBoxHeight / 2 - drawingShip.getHeight() / 2); pictureBox.repaint(); return true; } catch (UnsupportedFlavorException | IOException e) { diff --git a/src/frames/HardFrame.java b/src/frames/HardFrame.java index 6154d8e..41fd58f 100644 --- a/src/frames/HardFrame.java +++ b/src/frames/HardFrame.java @@ -37,7 +37,7 @@ public class HardFrame extends JFrame { }while(check); buttonMakeObject.addActionListener(e -> { DrawingShip drawingShip = generic.makeObject(); - drawingShip.setPosition(pictureBoxWidth / 2 - drawingShip.getShipWidth()/2, pictureBoxHeight / 2 - drawingShip.getShipHeight()/2); + drawingShip.setPosition(pictureBoxWidth / 2 - drawingShip.getWidth()/2, pictureBoxHeight / 2 - drawingShip.getHeight()/2); drawing = drawingShip; draw(); }); diff --git a/src/movement_strategy/DrawingObjectShip.java b/src/movement_strategy/DrawingObjectShip.java index fc222a9..2cbc33a 100644 --- a/src/movement_strategy/DrawingObjectShip.java +++ b/src/movement_strategy/DrawingObjectShip.java @@ -13,7 +13,7 @@ public class DrawingObjectShip implements IMoveableObject{ if(drawingShip == null || drawingShip.getEntityShip() == null) return null; return new ObjectParameters(drawingShip.getPosX(), drawingShip.getPosY(), - drawingShip.getShipWidth(), drawingShip.getShipHeight()); + drawingShip.getWidth(), drawingShip.getHeight()); } @Override public int getStep(){ -- 2.25.1 From a7d0e609dbdd1bdaf3b6795c337e2cf452df9f67 Mon Sep 17 00:00:00 2001 From: Zakharov_Rostislav Date: Wed, 20 Dec 2023 19:26:45 +0400 Subject: [PATCH 4/9] lab6 --- src/drawing_objects/DrawingShip.java | 2 +- src/drawing_objects/ExtensionDrawingShip.java | 80 +++++++++++ src/frames/FrameShipsCollection.java | 92 ++++++++++++- src/generics/SetGeneric.java | 7 +- src/generics/ShipsGenericCollection.java | 51 +++++-- src/generics/ShipsGenericStorage.java | 125 +++++++++++++++++- 6 files changed, 339 insertions(+), 18 deletions(-) create mode 100644 src/drawing_objects/ExtensionDrawingShip.java diff --git a/src/drawing_objects/DrawingShip.java b/src/drawing_objects/DrawingShip.java index 64c2448..c5931cb 100644 --- a/src/drawing_objects/DrawingShip.java +++ b/src/drawing_objects/DrawingShip.java @@ -10,7 +10,7 @@ public class DrawingShip { public EntityShip getEntityShip(){ return entityShip; } - private IDrawBlocks drawingBlocks; + public IDrawBlocks drawingBlocks; public void setDrawingBlocks(IDrawBlocks blocks){ drawingBlocks = blocks; } diff --git a/src/drawing_objects/ExtensionDrawingShip.java b/src/drawing_objects/ExtensionDrawingShip.java new file mode 100644 index 0000000..d5f20bc --- /dev/null +++ b/src/drawing_objects/ExtensionDrawingShip.java @@ -0,0 +1,80 @@ +package drawing_objects; + +import entities.EntityBattleship; + +import java.awt.*; + +public class ExtensionDrawingShip { + private static String getColorName(Color col){ + if(col.equals(Color.RED)) + return "RED"; + if(col.equals(Color.GREEN)) + return "GREEN"; + if(col.equals(Color.BLUE)) + return "BLUE"; + if(col.equals(Color.YELLOW)) + return "YELLOW"; + if(col.equals(Color.WHITE)) + return "WHITE"; + if(col.equals(Color.GRAY)) + return "GRAY"; + if(col.equals(Color.BLACK)) + return "BLACK"; + if(col.equals(Color.PINK)) + return "PINK"; + return null; + } + + private static Color getColor(String col){ + if(col.equals("RED")) + return Color.RED; + if(col.equals("GREEN")) + return Color.GREEN; + if(col.equals("BLUE")) + return Color.BLUE; + if(col.equals("YELLOW")) + return Color.YELLOW; + if(col.equals("WHITE")) + return Color.WHITE; + if(col.equals("GRAY")) + return Color.GRAY; + if(col.equals("BLACK")) + return Color.BLACK; + if(col.equals("MAGENTA")) + return Color.MAGENTA; + return null; + } + public static DrawingShip createDrawingShip(String info, char separatorForObject, int width, int height){ + String[] strs = info.split(Character.toString(separatorForObject)); + if(strs.length == 5){ + return new DrawingShip(Integer.parseInt(strs[0]), + Integer.parseInt(strs[1]), getColor(strs[2]), width, height, + Integer.parseInt(strs[3]), Integer.parseInt(strs[4])); + } + if(strs.length == 8){ + return new DrawingBattleship(Integer.parseInt(strs[0]), + Integer.parseInt(strs[1]), getColor(strs[2]), getColor(strs[5]), + Boolean.parseBoolean(strs[6]), Boolean.parseBoolean(strs[7]), + width, height, Integer.parseInt(strs[3]), Integer.parseInt(strs[4])); + } + return null; + } + public static String getDataForSave(DrawingShip DrawingShip, char separatorForObject){ + var ship = DrawingShip.getEntityShip(); + if(ship == null) + return null; + var str = String.format("%d%c%d%c%s%c%d%c%d", + ship.getSpeed(), separatorForObject, + (int)ship.getWeight(), separatorForObject, + getColorName(ship.getBodyColor()), separatorForObject, + DrawingShip.drawingBlocks.getType(), separatorForObject, + DrawingShip.drawingBlocks.getNumber()); + if(!(ship instanceof EntityBattleship)){ + return str; + } + return String.format("%s%c%s%c%b%c%b%", str, separatorForObject, + getColorName(((EntityBattleship) ship).getAdditionalColor()), separatorForObject, + ((EntityBattleship) ship).getTurret(), separatorForObject, + ((EntityBattleship) ship).getRocketLauncher()); + } +} diff --git a/src/frames/FrameShipsCollection.java b/src/frames/FrameShipsCollection.java index a3e4ac6..c30e7a5 100644 --- a/src/frames/FrameShipsCollection.java +++ b/src/frames/FrameShipsCollection.java @@ -2,7 +2,9 @@ package frames; import javax.swing.*; import javax.swing.border.StrokeBorder; +import javax.swing.filechooser.FileFilter; import java.awt.*; +import java.io.File; import java.io.IOException; import java.util.ArrayList; import java.util.LinkedList; @@ -12,6 +14,20 @@ import drawing_objects.*; import generics.*; import movement_strategy.*; +class TxtSaveFilter extends FileFilter { + @Override + public boolean accept(File f) { + if (f.isDirectory()) { + return false; + } + String s = f.getName().toLowerCase(); + return s.endsWith(".txt"); + } + @Override + public String getDescription() { + return "*.txt"; + } +} public class FrameShipsCollection extends JFrame { private final ShipsGenericStorage storage; LinkedList trashCollection = new LinkedList<>(); @@ -43,6 +59,18 @@ public class FrameShipsCollection extends JFrame { super.repaint(); } }; + JMenuBar menuFile = new JMenuBar(); + JMenu file = new JMenu("Файл"); + menuFile.add(file); + JMenuItem saveFile = new JMenuItem("Сохранить"); + JMenuItem loadFile = new JMenuItem("Загрузить"); + JMenuItem saveSet = new JMenuItem("Сохранить коллекцию"); + JMenuItem loadSet = new JMenuItem("Загрузить коллекцию"); + file.add(saveSet); + file.add(loadSet); + file.add(saveFile); + file.add(loadFile); + setJMenuBar(menuFile); pictureBoxCollection.setPreferredSize(new Dimension(700, 450)); JButton buttonAddShip = new JButton("Добавить корабль"); textFieldNumber = new TextField(); @@ -64,6 +92,10 @@ public class FrameShipsCollection extends JFrame { buttonRemoveShip.addActionListener(e -> buttonRemoveShipClick()); buttonRefreshCollection.addActionListener(e -> buttonRefreshCollectionClick()); buttonTrash.addActionListener(e -> buttonTrashClick()); + saveFile.addActionListener(e -> saveFile()); + saveSet.addActionListener(e -> saveSet()); + loadFile.addActionListener(e -> loadFile()); + loadSet.addActionListener(e -> loadSet()); //panels and constraints initialisation JPanel panelTools = new JPanel(new GridBagLayout()); panelTools.setBorder(new StrokeBorder(new BasicStroke(3))); @@ -140,7 +172,7 @@ public class FrameShipsCollection extends JFrame { private void buttonDeleteSet_Click() { if (listStorages.getSelectedIndex() == -1) return; - storage.delSet(listStorages.getSelectedValue()); + storage.delSet(listStorages.getSelectedValue(), trashCollection); reloadObjects(); } private void buttonAddShipClick() { @@ -194,4 +226,62 @@ public class FrameShipsCollection extends JFrame { } frame.setShip(trashCollection.pop()); } + private void saveFile(){ + JFileChooser fc = new JFileChooser("C:\\Users\\user\\Documents"); + fc.addChoosableFileFilter(new TxtSaveFilter()); + int retrieval = fc.showSaveDialog(null); + if (retrieval == JFileChooser.APPROVE_OPTION) { + File file = new File(fc.getSelectedFile() + "." + "txt"); + try { + storage.saveData(file); + } catch (IOException ex) { + throw new RuntimeException(ex); + } + } + } + private void saveSet(){ + JFileChooser fc = new JFileChooser("C:\\Users\\user\\Documents"); + fc.addChoosableFileFilter(new TxtSaveFilter()); + int retrieval = fc.showSaveDialog(null); + if (retrieval == JFileChooser.APPROVE_OPTION) { + File file = new File(fc.getSelectedFile() + "." + "txt"); + try { + if(listStorages.getSelectedIndex() == -1) { + return; + } + storage.shipsStorages.get(listStorages.getSelectedValue()).saveData(file, listStorages.getSelectedValue()); + reloadObjects(); + } catch (IOException ex) { + throw new RuntimeException(ex); + } + } + } + private void loadFile(){ + JFileChooser fc = new JFileChooser("C:\\Users\\user\\Documents"); + int ret = fc.showDialog(null, "Открыть файл"); + if(ret == JFileChooser.APPROVE_OPTION){ + File file = fc.getSelectedFile(); + try { + storage.loadData(file); + reloadObjects(); + pictureBoxCollection.repaint(); + } catch (IOException ex) { + throw new RuntimeException(ex); + } + } + } + private void loadSet(){ + JFileChooser fc = new JFileChooser("C:\\Users\\user\\Documents"); + int ret = fc.showDialog(null, "Открыть файл"); + if(ret == JFileChooser.APPROVE_OPTION){ + File file = fc.getSelectedFile(); + try { + storage.loadCollection(file); + reloadObjects(); + pictureBoxCollection.repaint(); + } catch (IOException ex) { + throw new RuntimeException(ex); + } + } + } } diff --git a/src/generics/SetGeneric.java b/src/generics/SetGeneric.java index 0e90f12..ace58ef 100644 --- a/src/generics/SetGeneric.java +++ b/src/generics/SetGeneric.java @@ -4,7 +4,6 @@ import java.util.ArrayList; public class SetGeneric{ private final ArrayList places; - public int getCount() {return places.size();} private final int maxCount; public SetGeneric(int count){ maxCount = count; @@ -27,9 +26,15 @@ public class SetGeneric{ places.remove(position); return true; } + public int getCount() { + return places.size(); + } public T get(int position){ if(!(position >= 0 && position < places.size())) return null; return places.get(position); } + public ArrayList getShips(){ + return new ArrayList<>(places); + } } \ No newline at end of file diff --git a/src/generics/ShipsGenericCollection.java b/src/generics/ShipsGenericCollection.java index 4806eab..c0ac8a8 100644 --- a/src/generics/ShipsGenericCollection.java +++ b/src/generics/ShipsGenericCollection.java @@ -4,16 +4,19 @@ import drawing_objects.*; import movement_strategy.*; import java.awt.*; +import java.io.File; +import java.io.FileWriter; +import java.io.IOException; +import java.util.ArrayList; public class ShipsGenericCollection{ private final int pictureWidth; private final int pictureHeight; private final int placeSizeWidth = 220; private final int placeSizeHeight = 60; - private final SetGeneric collection; - public int getCount(){ - return collection.getCount(); - } + public static char separatorRecords = ';'; + public static char separatorForObject = ':'; + private SetGeneric collection; public ShipsGenericCollection(int picWidth, int picHeight){ int width = picWidth / placeSizeWidth; int height = picHeight / placeSizeHeight; @@ -39,11 +42,14 @@ public class ShipsGenericCollection getShips(){ + return collection.getShips(); + } + public void clear(){ + collection = new SetGeneric<>(pictureWidth * pictureHeight); + } } diff --git a/src/generics/ShipsGenericStorage.java b/src/generics/ShipsGenericStorage.java index dceae6c..022aec7 100644 --- a/src/generics/ShipsGenericStorage.java +++ b/src/generics/ShipsGenericStorage.java @@ -1,15 +1,24 @@ package generics; import drawing_objects.DrawingShip; +import drawing_objects.ExtensionDrawingShip; import movement_strategy.DrawingObjectShip; +import java.io.*; +import java.util.*; +import java.io.File; +import java.io.IOException; import java.util.ArrayList; import java.util.HashMap; +import java.util.Map; public class ShipsGenericStorage { private final int pictureWidth; private final int pictureHeight; - final HashMap> shipsStorages; + public final HashMap> shipsStorages; + private static final char separatorForKeyValue = '|'; + private final char separatorRecords = ';'; + private static final char separatorForObject = ':'; public ShipsGenericStorage(int pictureWidth, int pictureHeight){ shipsStorages = new HashMap<>(); this.pictureWidth = pictureWidth; @@ -23,11 +32,6 @@ public class ShipsGenericStorage { return; shipsStorages.put(name, new ShipsGenericCollection<>(pictureWidth, pictureHeight)); } - public void delSet(String name){ - if(!shipsStorages.containsKey(name)) - return; - shipsStorages.remove(name); - } public ShipsGenericCollection getSet(String name){ if(!shipsStorages.containsKey(name)) return null; @@ -36,4 +40,113 @@ public class ShipsGenericStorage { public DrawingShip getShip(String collectionName, int position){ return shipsStorages.get(collectionName).get(position); } + public boolean saveData(File f) throws IOException { + if(f.exists()) { + f.delete(); + } + f.createNewFile(); + StringBuilder data = new StringBuilder(); + data.append("ShipStorage\n"); + for(Map.Entry> record : shipsStorages.entrySet()){ + StringBuilder records = new StringBuilder(); + for(DrawingShip elem : record.getValue().getShips()) { + records.append(String.format("%s%c", ExtensionDrawingShip.getDataForSave(elem, separatorForObject), separatorRecords)); + } + data.append(String.format("%s%c%s\n", record.getKey(), separatorForKeyValue, records)); + } + if(data.length() == 0) + return false; + FileWriter writer = new FileWriter(f); + writer.write(data.toString()); + writer.flush(); + writer.close(); + return true; + } + public boolean loadData(File f) throws FileNotFoundException { + if(!f.exists()) + return false; + StringBuilder bufferTextFromFile =new StringBuilder(); + Scanner s = new Scanner(f); + while(s.hasNext()) + bufferTextFromFile.append(s.next()).append("\n"); + s.close(); + var strs = bufferTextFromFile.toString().split("\n"); + if(strs.length == 0) + return false; + if (!strs[0].startsWith("ShipStorage")) + return false; + shipsStorages.clear(); + for(String data : strs){ + String st = "\\" + separatorForKeyValue; + String[]record = data.split(st); + if (record.length != 2) + continue; + ShipsGenericCollection collection = new ShipsGenericCollection<>(pictureWidth, pictureHeight); + String[] set = record[1].split(Character.toString(separatorRecords)); + for(int i = set.length -1; i >=0; i--){ + String elem = set[i]; + DrawingShip ship = ExtensionDrawingShip.createDrawingShip(elem, separatorForObject, pictureWidth, pictureHeight); + if (ship != null) + { + if (!(collection.insert(ship))) + { + return false; + } + } + } + shipsStorages.put(record[0], collection); + } + return true; + } + public boolean loadCollection(File f) throws FileNotFoundException { + if(!f.exists()) + return false; + StringBuilder bufferTextFromFile =new StringBuilder(); + Scanner s = new Scanner(f); + while(s.hasNext()) + bufferTextFromFile.append(s.next()).append("\n"); + s.close(); + var strs = bufferTextFromFile.toString().split("\n"); + if(strs.length == 0) + return false; + if (!strs[0].startsWith("ShipCollection")) + return false; + String collectionName = strs[1]; + ShipsGenericCollection collection = getCollection(collectionName); + if(collection == null) + collection = new ShipsGenericCollection<>(pictureWidth, pictureHeight); + else + collection.clear(); + String[] shipsInfo = strs[2].split(Character.toString(ShipsGenericCollection.separatorRecords)); + for(int i = shipsInfo.length-1; i >= 0; i--){ + String data = shipsInfo[i]; + DrawingShip ship = ExtensionDrawingShip.createDrawingShip(data, ShipsGenericCollection.separatorForObject, pictureWidth, pictureHeight); + if (ship != null) + { + if (!(collection.insert(ship))) + { + return false; + } + } + } + addSetFromFile(collectionName, collection); + return true; + } + public void addSetFromFile(String name, ShipsGenericCollection toAdd){ + if(shipsStorages.containsKey(name)){ + shipsStorages.remove(name); + } + shipsStorages.put(name, toAdd); + } + public void delSet(String name, LinkedList trashBox){ + if(!shipsStorages.containsKey(name)) + return; + ShipsGenericCollection cur = shipsStorages.get(name); + for(int i = 0; i < cur.getCount(); i++) + trashBox.push(cur.get(i)); + shipsStorages.remove(name); + } + public ShipsGenericCollection getCollection(String collectionName){ + return shipsStorages.get(collectionName); + } } -- 2.25.1 From 74284dde177df33a541b994e4d8e2bea94404d06 Mon Sep 17 00:00:00 2001 From: Zakharov_Rostislav Date: Wed, 20 Dec 2023 19:27:59 +0400 Subject: [PATCH 5/9] lab6 some minor fixes --- src/drawing_objects/ExtensionDrawingShip.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/drawing_objects/ExtensionDrawingShip.java b/src/drawing_objects/ExtensionDrawingShip.java index d5f20bc..5b837ac 100644 --- a/src/drawing_objects/ExtensionDrawingShip.java +++ b/src/drawing_objects/ExtensionDrawingShip.java @@ -72,7 +72,7 @@ public class ExtensionDrawingShip { if(!(ship instanceof EntityBattleship)){ return str; } - return String.format("%s%c%s%c%b%c%b%", str, separatorForObject, + return String.format("%s%c%s%c%b%c%b", str, separatorForObject, getColorName(((EntityBattleship) ship).getAdditionalColor()), separatorForObject, ((EntityBattleship) ship).getTurret(), separatorForObject, ((EntityBattleship) ship).getRocketLauncher()); -- 2.25.1 From afaed7e31634d3821bb1a449fb8d0e4a215c6241 Mon Sep 17 00:00:00 2001 From: Zakharov_Rostislav Date: Wed, 20 Dec 2023 20:03:43 +0400 Subject: [PATCH 6/9] lab6 some minor fixes --- src/drawing_objects/ExtensionDrawingShip.java | 4 ++-- src/frames/FrameShipsCollection.java | 6 +++--- src/generics/ShipsGenericStorage.java | 2 +- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/drawing_objects/ExtensionDrawingShip.java b/src/drawing_objects/ExtensionDrawingShip.java index 5b837ac..2ac8923 100644 --- a/src/drawing_objects/ExtensionDrawingShip.java +++ b/src/drawing_objects/ExtensionDrawingShip.java @@ -20,8 +20,8 @@ public class ExtensionDrawingShip { return "GRAY"; if(col.equals(Color.BLACK)) return "BLACK"; - if(col.equals(Color.PINK)) - return "PINK"; + if(col.equals(Color.MAGENTA)) + return "MAGENTA"; return null; } diff --git a/src/frames/FrameShipsCollection.java b/src/frames/FrameShipsCollection.java index c30e7a5..42ca9b1 100644 --- a/src/frames/FrameShipsCollection.java +++ b/src/frames/FrameShipsCollection.java @@ -14,7 +14,7 @@ import drawing_objects.*; import generics.*; import movement_strategy.*; -class TxtSaveFilter extends FileFilter { +class TxtFilter extends FileFilter { @Override public boolean accept(File f) { if (f.isDirectory()) { @@ -228,7 +228,7 @@ public class FrameShipsCollection extends JFrame { } private void saveFile(){ JFileChooser fc = new JFileChooser("C:\\Users\\user\\Documents"); - fc.addChoosableFileFilter(new TxtSaveFilter()); + fc.addChoosableFileFilter(new TxtFilter()); int retrieval = fc.showSaveDialog(null); if (retrieval == JFileChooser.APPROVE_OPTION) { File file = new File(fc.getSelectedFile() + "." + "txt"); @@ -241,7 +241,7 @@ public class FrameShipsCollection extends JFrame { } private void saveSet(){ JFileChooser fc = new JFileChooser("C:\\Users\\user\\Documents"); - fc.addChoosableFileFilter(new TxtSaveFilter()); + fc.addChoosableFileFilter(new TxtFilter()); int retrieval = fc.showSaveDialog(null); if (retrieval == JFileChooser.APPROVE_OPTION) { File file = new File(fc.getSelectedFile() + "." + "txt"); diff --git a/src/generics/ShipsGenericStorage.java b/src/generics/ShipsGenericStorage.java index 022aec7..504505d 100644 --- a/src/generics/ShipsGenericStorage.java +++ b/src/generics/ShipsGenericStorage.java @@ -109,7 +109,7 @@ public class ShipsGenericStorage { var strs = bufferTextFromFile.toString().split("\n"); if(strs.length == 0) return false; - if (!strs[0].startsWith("ShipCollection")) + if (!strs[0].startsWith("ShipsCollection")) return false; String collectionName = strs[1]; ShipsGenericCollection collection = getCollection(collectionName); -- 2.25.1 From 304727248987d80c5303156802af98acaf5a9a02 Mon Sep 17 00:00:00 2001 From: Zakharov_Rostislav Date: Wed, 20 Dec 2023 20:05:30 +0400 Subject: [PATCH 7/9] lab6 some minor fixes --- src/drawing_objects/ExtensionDrawingShip.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/drawing_objects/ExtensionDrawingShip.java b/src/drawing_objects/ExtensionDrawingShip.java index 2ac8923..e98fe96 100644 --- a/src/drawing_objects/ExtensionDrawingShip.java +++ b/src/drawing_objects/ExtensionDrawingShip.java @@ -24,7 +24,6 @@ public class ExtensionDrawingShip { return "MAGENTA"; return null; } - private static Color getColor(String col){ if(col.equals("RED")) return Color.RED; -- 2.25.1 From a8d164c66325dcd74bb341c9fb4d1ff5cbde1a29 Mon Sep 17 00:00:00 2001 From: Zakharov_Rostislav Date: Wed, 20 Dec 2023 20:16:23 +0400 Subject: [PATCH 8/9] lab6 some minor fixes --- src/frames/FrameShipsCollection.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/frames/FrameShipsCollection.java b/src/frames/FrameShipsCollection.java index 42ca9b1..8db0fc3 100644 --- a/src/frames/FrameShipsCollection.java +++ b/src/frames/FrameShipsCollection.java @@ -258,6 +258,7 @@ public class FrameShipsCollection extends JFrame { } private void loadFile(){ JFileChooser fc = new JFileChooser("C:\\Users\\user\\Documents"); + fc.addChoosableFileFilter(new TxtFilter()); int ret = fc.showDialog(null, "Открыть файл"); if(ret == JFileChooser.APPROVE_OPTION){ File file = fc.getSelectedFile(); @@ -273,6 +274,7 @@ public class FrameShipsCollection extends JFrame { private void loadSet(){ JFileChooser fc = new JFileChooser("C:\\Users\\user\\Documents"); int ret = fc.showDialog(null, "Открыть файл"); + fc.addChoosableFileFilter(new TxtFilter()); if(ret == JFileChooser.APPROVE_OPTION){ File file = fc.getSelectedFile(); try { -- 2.25.1 From 99da8dad3d9b815abd052f62b8713458b325b407 Mon Sep 17 00:00:00 2001 From: Zakharov_Rostislav Date: Fri, 22 Dec 2023 20:28:13 +0400 Subject: [PATCH 9/9] lab6 some minor fixes --- src/generics/SetGeneric.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/generics/SetGeneric.java b/src/generics/SetGeneric.java index ace58ef..fd11902 100644 --- a/src/generics/SetGeneric.java +++ b/src/generics/SetGeneric.java @@ -4,6 +4,9 @@ import java.util.ArrayList; public class SetGeneric{ private final ArrayList places; + public int getCount() { + return places.size(); + } private final int maxCount; public SetGeneric(int count){ maxCount = count; @@ -26,9 +29,6 @@ public class SetGeneric{ places.remove(position); return true; } - public int getCount() { - return places.size(); - } public T get(int position){ if(!(position >= 0 && position < places.size())) return null; -- 2.25.1