From c1cd71bd47de0b441fa2675cc359a48a7bc53f74 Mon Sep 17 00:00:00 2001 From: "yu.shlyapin" Date: Mon, 17 Feb 2025 18:59:24 +0400 Subject: [PATCH] lab 3 prerelease --- .../AircraftCarrierController.java | 5 +- .../BlockDialogController.java | 38 +++++++++ .../Aircraft/DrawingAircraftCarrier.java | 17 +++- .../Logic/Block/DrawingBlock.java | 4 + .../Logic/Block/DrawingBlockCircle.java | 4 +- .../Logic/Block/DrawingBlockTriangle.java | 5 +- .../AbstractCompany.java | 4 +- .../DocksService.java | 8 +- .../ShipCollectionController.java | 80 +++++++++++-------- .../aircraftcarrier/BlockDialogView.fxml | 21 +++++ .../aircraftcarrier/ShipCollectionView.fxml | 2 +- 11 files changed, 140 insertions(+), 48 deletions(-) create mode 100644 src/main/java/com/example/aircraftcarrier/BlockDialogController.java create mode 100644 src/main/resources/com/example/aircraftcarrier/BlockDialogView.fxml diff --git a/src/main/java/com/example/aircraftcarrier/AircraftCarrierController.java b/src/main/java/com/example/aircraftcarrier/AircraftCarrierController.java index c88ff9d..5650c1e 100644 --- a/src/main/java/com/example/aircraftcarrier/AircraftCarrierController.java +++ b/src/main/java/com/example/aircraftcarrier/AircraftCarrierController.java @@ -40,7 +40,6 @@ public class AircraftCarrierController implements Initializable { public void setDrawing(DrawingSimpleAircraftCarrier drawingAircraftCarrier) { this.drawingAircraftCarrier = drawingAircraftCarrier; - draw(); } @FXML @@ -62,14 +61,14 @@ public class AircraftCarrierController implements Initializable { choiceBoxStrategy.setDisable(true); strategy.MakeStep(); - drawingAircraftCarrier.Draw(canvas.getGraphicsContext2D()); + draw(); if (strategy.GetStatus() == StrategyStatus.Finish) { choiceBoxStrategy.setDisable(false); strategy = null; } } - private void draw() { + public void draw() { canvas.getGraphicsContext2D().clearRect(0,0,canvas.getWidth(),canvas.getHeight()); drawingAircraftCarrier.Draw(canvas.getGraphicsContext2D()); } diff --git a/src/main/java/com/example/aircraftcarrier/BlockDialogController.java b/src/main/java/com/example/aircraftcarrier/BlockDialogController.java new file mode 100644 index 0000000..d47fdef --- /dev/null +++ b/src/main/java/com/example/aircraftcarrier/BlockDialogController.java @@ -0,0 +1,38 @@ +package com.example.aircraftcarrier; + +import javafx.beans.value.ChangeListener; +import javafx.beans.value.ObservableValue; +import javafx.fxml.FXML; +import javafx.fxml.Initializable; +import javafx.scene.control.ComboBox; +import javafx.scene.control.TextField; + +import java.net.URL; +import java.util.ResourceBundle; + +public class BlockDialogController implements Initializable { + @FXML + private ComboBox ComboBoxShape; + private final String[] shapes = { "квадрат", "треугольник", "круг" }; + @FXML + private TextField CountBlock; + @Override + public void initialize(URL url, ResourceBundle resourceBundle) { + ComboBoxShape.getItems().setAll(shapes); + CountBlock.textProperty().addListener(new ChangeListener() { + @Override + public void changed(ObservableValue observableValue, String s, String t1) { + if (t1.matches("\\d{0,2}")) CountBlock.setText(t1); + else CountBlock.setText(s); + } + }); + } + + public int getCount() { + return Integer.parseInt(CountBlock.getText()); + } + + public String getShape() { + return ComboBoxShape.getValue(); + } +} diff --git a/src/main/java/com/example/aircraftcarrier/Logic/Aircraft/DrawingAircraftCarrier.java b/src/main/java/com/example/aircraftcarrier/Logic/Aircraft/DrawingAircraftCarrier.java index bff2fe5..3677eb1 100644 --- a/src/main/java/com/example/aircraftcarrier/Logic/Aircraft/DrawingAircraftCarrier.java +++ b/src/main/java/com/example/aircraftcarrier/Logic/Aircraft/DrawingAircraftCarrier.java @@ -1,5 +1,8 @@ package com.example.aircraftcarrier.Logic.Aircraft; +import com.example.aircraftcarrier.Logic.Block.DrawingBlock; +import com.example.aircraftcarrier.Logic.Block.DrawingBlockCircle; +import com.example.aircraftcarrier.Logic.Block.DrawingBlockTriangle; import com.example.aircraftcarrier.Logic.Block.IDrawingBlock; import com.example.aircraftcarrier.Logic.Entity.EntityAircraftCarrier; import javafx.scene.canvas.GraphicsContext; @@ -16,7 +19,9 @@ public class DrawingAircraftCarrier extends DrawingSimpleAircraftCarrier { Color primaryColor, Color secondaryColor, boolean hasDeck, - boolean hasСabin + boolean hasСabin, + int countBlock, + String shape ) { super(); aircraftCarrier = new EntityAircraftCarrier(speed, @@ -25,6 +30,16 @@ public class DrawingAircraftCarrier extends DrawingSimpleAircraftCarrier { secondaryColor, hasDeck, hasСabin); + if (shape != null) { + drawingBlock = switch (shape) { + case "квадрат" -> new DrawingBlock(countBlock); + case "треугольник" -> new DrawingBlockTriangle(countBlock); + case "круг" -> new DrawingBlockCircle(countBlock); + default -> null; + }; + } else { + drawingBlock = null; + } } public void setDrawingBlock(IDrawingBlock iDrawingBlock) { diff --git a/src/main/java/com/example/aircraftcarrier/Logic/Block/DrawingBlock.java b/src/main/java/com/example/aircraftcarrier/Logic/Block/DrawingBlock.java index dd15873..8b35ada 100644 --- a/src/main/java/com/example/aircraftcarrier/Logic/Block/DrawingBlock.java +++ b/src/main/java/com/example/aircraftcarrier/Logic/Block/DrawingBlock.java @@ -7,6 +7,10 @@ import javafx.scene.paint.Color; public class DrawingBlock implements IDrawingBlock { private BlockCount blockCount; + public DrawingBlock(int blockCountValue) { + this.blockCount = BlockCount.ConvertToBlockCount(blockCountValue); + } + public void setBlockCount(int blockCountValue) { this.blockCount = BlockCount.ConvertToBlockCount(blockCountValue); } diff --git a/src/main/java/com/example/aircraftcarrier/Logic/Block/DrawingBlockCircle.java b/src/main/java/com/example/aircraftcarrier/Logic/Block/DrawingBlockCircle.java index a5d03b7..350527f 100644 --- a/src/main/java/com/example/aircraftcarrier/Logic/Block/DrawingBlockCircle.java +++ b/src/main/java/com/example/aircraftcarrier/Logic/Block/DrawingBlockCircle.java @@ -7,7 +7,9 @@ import javafx.scene.paint.Color; public class DrawingBlockCircle implements IDrawingBlock { private BlockCount blockCount; - public DrawingBlockCircle() {} + public DrawingBlockCircle(int blockCountValue) { + this.blockCount = BlockCount.ConvertToBlockCount(blockCountValue); + } public void setBlockCount(int blockCountValue) { this.blockCount = BlockCount.ConvertToBlockCount(blockCountValue); diff --git a/src/main/java/com/example/aircraftcarrier/Logic/Block/DrawingBlockTriangle.java b/src/main/java/com/example/aircraftcarrier/Logic/Block/DrawingBlockTriangle.java index d8fc841..2acda09 100644 --- a/src/main/java/com/example/aircraftcarrier/Logic/Block/DrawingBlockTriangle.java +++ b/src/main/java/com/example/aircraftcarrier/Logic/Block/DrawingBlockTriangle.java @@ -7,7 +7,10 @@ import javafx.scene.paint.Color; public class DrawingBlockTriangle implements IDrawingBlock { private BlockCount blockCount; - public DrawingBlockTriangle() {} + + public DrawingBlockTriangle(int blockCountValue) { + this.blockCount = BlockCount.ConvertToBlockCount(blockCountValue); + } public void setBlockCount(int blockCountValue) { this.blockCount = BlockCount.ConvertToBlockCount(blockCountValue); diff --git a/src/main/java/com/example/aircraftcarrier/Logic/CollectionGenericObjects/AbstractCompany.java b/src/main/java/com/example/aircraftcarrier/Logic/CollectionGenericObjects/AbstractCompany.java index 8e42359..0411088 100644 --- a/src/main/java/com/example/aircraftcarrier/Logic/CollectionGenericObjects/AbstractCompany.java +++ b/src/main/java/com/example/aircraftcarrier/Logic/CollectionGenericObjects/AbstractCompany.java @@ -29,7 +29,7 @@ public abstract class AbstractCompany { } public static boolean remove(AbstractCompany company, int pos){ - return company != null && company._collection != null && company._collection.Remove(pos); + return company != null & company._collection != null & company._collection.Remove(pos); } public DrawingSimpleAircraftCarrier GetRandom() { @@ -44,7 +44,7 @@ public abstract class AbstractCompany { for (int i = 0; i < _collection.count(); i++) { DrawingSimpleAircraftCarrier obj = _collection.Get(i); - if (obj == null) return; + if (obj == null) continue; obj.Draw(gc); } } diff --git a/src/main/java/com/example/aircraftcarrier/Logic/CollectionGenericObjects/DocksService.java b/src/main/java/com/example/aircraftcarrier/Logic/CollectionGenericObjects/DocksService.java index f12e442..246d2bf 100644 --- a/src/main/java/com/example/aircraftcarrier/Logic/CollectionGenericObjects/DocksService.java +++ b/src/main/java/com/example/aircraftcarrier/Logic/CollectionGenericObjects/DocksService.java @@ -44,10 +44,10 @@ public class DocksService extends AbstractCompany { for (int i = 0; i < _collection.count(); i++) { DrawingSimpleAircraftCarrier obj = _collection.Get(i); - if (obj == null) { continue; } - System.out.println(i); - obj.setCanvasParam(_pictureWidth,_pictureHeight); - obj.setPosition(xpos * _placeSizeWidth + 10, (ypos-1) * _placeSizeHeight + 10); + if (obj != null) { + obj.setCanvasParam(_pictureWidth,_pictureHeight); + obj.setPosition(xpos * _placeSizeWidth + 10, (ypos-1) * _placeSizeHeight + 10); + } xpos++; if (xpos >= maxXPositionCount) { diff --git a/src/main/java/com/example/aircraftcarrier/ShipCollectionController.java b/src/main/java/com/example/aircraftcarrier/ShipCollectionController.java index 853c1c7..da8b54a 100644 --- a/src/main/java/com/example/aircraftcarrier/ShipCollectionController.java +++ b/src/main/java/com/example/aircraftcarrier/ShipCollectionController.java @@ -3,6 +3,8 @@ package com.example.aircraftcarrier; import com.example.aircraftcarrier.Logic.Aircraft.DrawingAircraftCarrier; import com.example.aircraftcarrier.Logic.Aircraft.DrawingSimpleAircraftCarrier; import com.example.aircraftcarrier.Logic.Block.DrawingBlock; +import com.example.aircraftcarrier.Logic.Block.DrawingBlockCircle; +import com.example.aircraftcarrier.Logic.Block.DrawingBlockTriangle; import com.example.aircraftcarrier.Logic.Block.IDrawingBlock; import com.example.aircraftcarrier.Logic.CollectionGenericObjects.AbstractCompany; import com.example.aircraftcarrier.Logic.CollectionGenericObjects.DocksService; @@ -34,12 +36,8 @@ public class ShipCollectionController implements Initializable { @FXML private Canvas canvasCollection; @FXML - private AnchorPane wrapperCanvas; - @FXML private ComboBox comboBoxStorage; private final String[] storageText = new String[]{"Хранилище"}; - @FXML - private static ColorPicker asdd1; @FXML protected void ComboBox_Choice() { @@ -59,26 +57,18 @@ public class ShipCollectionController implements Initializable { private static Color GetColor(Random random) { Color c = Color.rgb(random.nextInt(256),random.nextInt(256),random.nextInt(256)); -// //TODO: доделать -// asdd1.setVisible(false); -// asdd1.sho -// ColorPicker colorPicker = new ColorPicker(c); -// Button confirmButton = new Button("Установить"); -// confirmButton.setAlignment(Pos.CENTER_RIGHT); -// -// HBox buttonBox = new HBox(confirmButton); -// buttonBox.setAlignment(Pos.TOP_RIGHT); -// buttonBox.setPadding(new Insets(10, 10, 10, 10)); -// VBox root = new VBox(colorPicker, buttonBox); -// -// -// -// Stage colorStage = new Stage(); -// colorStage.setScene(new Scene(root)); -// -// confirmButton.setOnAction(event -> colorStage.close()); -// -// colorStage.showAndWait(); + DialogPane dp = new DialogPane(); + + ColorPicker asd = new ColorPicker(); + asd.setValue(c); + + dp.setContent(asd); + + dp.getButtonTypes().setAll(ButtonType.YES, ButtonType.NO); + Dialog dialog = new Dialog<>(); + dialog.setDialogPane(dp); + dialog.showAndWait(); + if (dialog.getResult() == ButtonType.YES) { c = asd.getValue(); } return c; } @@ -101,24 +91,45 @@ public class ShipCollectionController implements Initializable { @FXML protected void ButtonCreate_Click() { if (_company == null) return; - DrawingAircraftCarrier drawingAircraftCarrier; - drawingAircraftCarrier = new DrawingAircraftCarrier( + + int inputCount; + String shape; + + try { + FXMLLoader dialogLoader = new FXMLLoader( + AircraftCarrierApplication.class.getResource( + "/com/example/aircraftcarrier/BlockDialogView.fxml" + ) + ); + DialogPane blockPane = dialogLoader.load(); + BlockDialogController blockDialogController = dialogLoader.getController(); + Dialog s = new Dialog<>(); + s.setDialogPane(blockPane); + s.showAndWait(); + + shape = blockDialogController.getShape(); + inputCount = blockDialogController.getCount(); + } catch (Exception ignore) { + inputCount = 0; + shape = ""; + } + + DrawingAircraftCarrier drawingAircraftCarrier = new DrawingAircraftCarrier( random.nextInt(100) + 100, random.nextInt(1000) + 1000, GetColor(random), GetColor(random), random.nextBoolean(), - random.nextBoolean() + random.nextBoolean(), + inputCount, + shape ); - IDrawingBlock imo = new DrawingBlock(); - imo.setBlockCount(2); - drawingAircraftCarrier.setDrawingBlock(imo); drawingAircraftCarrier.setCanvasWidth((int) canvasCollection.getWidth()); drawingAircraftCarrier.setCanvasHeight((int) canvasCollection.getHeight()); - System.out.println( AbstractCompany.add(_company,drawingAircraftCarrier)); + AbstractCompany.add(_company,drawingAircraftCarrier); _company.Show(canvasCollection.getGraphicsContext2D()); } @@ -142,11 +153,12 @@ public class ShipCollectionController implements Initializable { try { AnchorPane Pane = fxmlLoader.load(); AircraftCarrierController controller = fxmlLoader.getController(); - controller.setDrawing(aircraft); Stage stage = new Stage(); Scene scene = new Scene(Pane); stage.setScene(scene); - stage.showAndWait(); + controller.setDrawing(aircraft); + stage.show(); + controller.draw(); } catch (IOException e) { throw new RuntimeException(e); } @@ -186,8 +198,6 @@ public class ShipCollectionController implements Initializable { @Override public void initialize(URL url, ResourceBundle resourceBundle) { comboBoxStorage.getItems().addAll(storageText); -// canvasCollection.widthProperty().bind(wrapperCanvas.widthProperty()); -// canvasCollection.heightProperty().bind(wrapperCanvas.heightProperty()); IdField.textProperty().addListener(new ChangeListener() { @Override public void changed(ObservableValue observableValue, String oldValue, String newValue) { diff --git a/src/main/resources/com/example/aircraftcarrier/BlockDialogView.fxml b/src/main/resources/com/example/aircraftcarrier/BlockDialogView.fxml new file mode 100644 index 0000000..675c159 --- /dev/null +++ b/src/main/resources/com/example/aircraftcarrier/BlockDialogView.fxml @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/com/example/aircraftcarrier/ShipCollectionView.fxml b/src/main/resources/com/example/aircraftcarrier/ShipCollectionView.fxml index 0f4d375..16b7b34 100644 --- a/src/main/resources/com/example/aircraftcarrier/ShipCollectionView.fxml +++ b/src/main/resources/com/example/aircraftcarrier/ShipCollectionView.fxml @@ -23,7 +23,7 @@
- +