From dfab5596fc8d22d7a73377b02e09bcc3b0c198b3 Mon Sep 17 00:00:00 2001 From: prodigygirl Date: Sat, 19 Nov 2022 15:34:40 +0400 Subject: [PATCH] =?UTF-8?q?1.=20=D0=A1=D0=BE=D0=B7=D0=B4=D0=B0=D0=BD=D0=B8?= =?UTF-8?q?=D0=B5=20=D1=84=D0=BE=D1=80=D0=BC=D1=8B=20FormArmoredCarConfig?= =?UTF-8?q?=20=D0=B8=20=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5=D0=BD?= =?UTF-8?q?=D0=B8=D0=B5=20=D0=B4=D0=BE=D0=BF=20=D0=BB=D0=BE=D0=B3=D0=B8?= =?UTF-8?q?=D0=BA=D0=B8=20=D0=B2=20=D0=BA=D0=BB=D0=B0=D1=81=D1=81=D1=8B=20?= =?UTF-8?q?=D0=BE=D0=B1=D1=8A=D0=B5=D0=BA=D1=82=D0=BE=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/DrawingArmoredCar.java | 8 + src/main/java/DrawingCaterpillar.java | 5 + src/main/java/DrawingCrossCaterpillar.java | 5 + src/main/java/DrawingDoubleCaterpillar.java | 5 + src/main/java/DrawingTank.java | 13 + src/main/java/FormArmoredCarConfig.form | 233 ++++++++++++++++++ src/main/java/FormArmoredCarConfig.java | 254 ++++++++++++++++++++ src/main/java/IDrawingCaterpillar.java | 3 + 8 files changed, 526 insertions(+) create mode 100644 src/main/java/FormArmoredCarConfig.form create mode 100644 src/main/java/FormArmoredCarConfig.java diff --git a/src/main/java/DrawingArmoredCar.java b/src/main/java/DrawingArmoredCar.java index e8a3c97..fc005a9 100644 --- a/src/main/java/DrawingArmoredCar.java +++ b/src/main/java/DrawingArmoredCar.java @@ -40,11 +40,19 @@ public class DrawingArmoredCar { this.carWidth = carWidth; this.carHeight = carHeight; } + public IDrawingCaterpillar GetCaterpillars() { + return drawingCaterpillar; + } public void SetCaterpillar(IDrawingCaterpillar caterpillar) { this.drawingCaterpillar = caterpillar; } + public void SetColor(Color color) { + armoredCar = new EntityArmoredCar(armoredCar.getSpeed(), armoredCar.getWeight(), color); + drawingCaterpillar.setColor(color); + } + public void SetPosition(int x, int y, int width, int height) { if (x >= 0 && y >= 0 && x + carWidth < width && y + carHeight < height) { startPosX = x; diff --git a/src/main/java/DrawingCaterpillar.java b/src/main/java/DrawingCaterpillar.java index 6cf873a..eb1d1b4 100644 --- a/src/main/java/DrawingCaterpillar.java +++ b/src/main/java/DrawingCaterpillar.java @@ -33,4 +33,9 @@ public class DrawingCaterpillar implements IDrawingCaterpillar { g2d.fillOval(startPosX + dist * i, startPosY + 30, size, size); } } + + @Override + public void setColor(Color color) { + this.color = color; + } } diff --git a/src/main/java/DrawingCrossCaterpillar.java b/src/main/java/DrawingCrossCaterpillar.java index 98d7238..7b4fdee 100644 --- a/src/main/java/DrawingCrossCaterpillar.java +++ b/src/main/java/DrawingCrossCaterpillar.java @@ -39,4 +39,9 @@ public class DrawingCrossCaterpillar implements IDrawingCaterpillar{ g2d.drawLine(startPosX + dist * i + size, startPosY + 30, startPosX + dist * i, startPosY + 30 + size); } } + + @Override + public void setColor(Color color) { + this.color = color; + } } diff --git a/src/main/java/DrawingDoubleCaterpillar.java b/src/main/java/DrawingDoubleCaterpillar.java index ed7da51..5913b9b 100644 --- a/src/main/java/DrawingDoubleCaterpillar.java +++ b/src/main/java/DrawingDoubleCaterpillar.java @@ -36,4 +36,9 @@ public class DrawingDoubleCaterpillar implements IDrawingCaterpillar{ g2d.fillOval(startPosX + dist * i + size/4, startPosY + 30 + size/4, size/2, size/2); } } + + @Override + public void setColor(Color color) { + this.color = color; + } } diff --git a/src/main/java/DrawingTank.java b/src/main/java/DrawingTank.java index 225a19e..4c99b93 100644 --- a/src/main/java/DrawingTank.java +++ b/src/main/java/DrawingTank.java @@ -27,4 +27,17 @@ public class DrawingTank extends DrawingArmoredCar{ super.DrawTransport(g); startPosY -= 5; } + @Override + public void SetColor(Color color) { + if (armoredCar instanceof EntityTank tank) + armoredCar = new EntityTank(tank.getSpeed(), tank.getWeight(), color, + tank.getDopColor(), tank.isTowerWeapon(), tank.isAMachineGun()); + drawingCaterpillar.setColor(color); + } + + public void SetDopColor(Color color) { + if (armoredCar instanceof EntityTank tank) + armoredCar = new EntityTank(tank.getSpeed(), tank.getWeight(), tank.getBodyColor(), + color, tank.isTowerWeapon(), tank.isAMachineGun()); + } } diff --git a/src/main/java/FormArmoredCarConfig.form b/src/main/java/FormArmoredCarConfig.form new file mode 100644 index 0000000..12660e9 --- /dev/null +++ b/src/main/java/FormArmoredCarConfig.form @@ -0,0 +1,233 @@ + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
diff --git a/src/main/java/FormArmoredCarConfig.java b/src/main/java/FormArmoredCarConfig.java new file mode 100644 index 0000000..3da5305 --- /dev/null +++ b/src/main/java/FormArmoredCarConfig.java @@ -0,0 +1,254 @@ +import javax.swing.*; +import javax.swing.border.LineBorder; +import java.awt.*; +import java.awt.datatransfer.UnsupportedFlavorException; +import java.awt.dnd.*; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.awt.event.MouseAdapter; +import java.awt.event.MouseEvent; +import java.io.IOException; + +public class FormArmoredCarConfig extends JDialog{ + private JPanel mainPanel; + private JButton buttonOk; + private JButton buttonCancel; + private JSpinner numericUpDownSpeed; + private JSpinner numericUpDownWeight; + private JCheckBox checkBoxAMachineGun; + private JCheckBox checkBoxTowerWeapon; + private JLabel labelSpeed; + private JLabel labelWeight; + private JLabel labelParameters; + private JLabel labelSimpleObject; + private JLabel labelModifiedObject; + private JLabel labelBaseColor; + private JLabel labelDopColor; + private JPanel drawPanel; + private JPanel colorsPanel; + private JLabel labelSimpleCaterpillar; + private JLabel labelDoubleCaterpillar; + private JLabel labelCrossCaterpillar; + private JSpinner numericUpDownCount; + private JLabel labelCatCounts; + + private DrawingArmoredCar armoredCar = null; + + public FormArmoredCarConfig() { + setTitle("Создание объекта"); + setBounds(100, 100, 800, 300); + setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); + + setContentPane(mainPanel); + setVisible(true); + labelSimpleObject.setBorder(new LineBorder(Color.BLACK)); + labelModifiedObject.setBorder(new LineBorder(Color.BLACK)); + labelBaseColor.setBorder(new LineBorder(Color.BLACK)); + labelDopColor.setBorder(new LineBorder(Color.BLACK)); + labelSimpleCaterpillar.setBorder(new LineBorder(Color.BLACK)); + labelDoubleCaterpillar.setBorder(new LineBorder(Color.BLACK)); + labelCrossCaterpillar.setBorder(new LineBorder(Color.BLACK)); + + var mouseAdapter = new DragMouseAdapter(); + + labelSimpleObject.addMouseListener(mouseAdapter); + labelSimpleObject.setTransferHandler(new TransferHandler("text")); + + labelModifiedObject.addMouseListener(mouseAdapter); + labelModifiedObject.setTransferHandler(new TransferHandler("text")); + + labelSimpleCaterpillar.addMouseListener(mouseAdapter); + labelDoubleCaterpillar.addMouseListener(mouseAdapter); + labelCrossCaterpillar.addMouseListener(mouseAdapter); + + labelSimpleCaterpillar.setTransferHandler(new TransferHandler("text")); + labelDoubleCaterpillar.setTransferHandler(new TransferHandler("text")); + labelCrossCaterpillar.setTransferHandler(new TransferHandler("text")); + + drawPanel.setBackground(null); + colorsPanel.setBorder(BorderFactory.createTitledBorder("Цвета")); + colorsPanel.setLayout(new GridLayout(2, 4)); + colorsPanel.setBackground(null); + setColors(); + + buttonCancel.addActionListener((e) -> dispose()); + new DrawPanelDropTargetListener(drawPanel); + new LabelColorDropTargetListener(labelBaseColor); + new LabelColorDropTargetListener(labelDopColor); + + + buttonOk.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + // TODO работа с делегатом (вызов метода по созданию объекта из другой формы) + dispose(); + } + }); + } + + private class DragMouseAdapter extends MouseAdapter { + public void mousePressed(MouseEvent e) { + var c = (JComponent) e.getSource(); + var handler = c.getTransferHandler(); + handler.exportAsDrag(c, e, TransferHandler.COPY); + } + } + + private class LabelColorDropTargetListener extends DropTargetAdapter{ + private final DropTarget dropTarget; + private final JLabel label; + + public LabelColorDropTargetListener(JLabel label) { + this.label = label; + dropTarget = new DropTarget(label, DnDConstants.ACTION_COPY, + this, true, null); + } + @Override + public void drop(DropTargetDropEvent event) { + try { + var tr = event.getTransferable(); + var dataFlavors = tr.getTransferDataFlavors(); + String s = (String) tr.getTransferData(dataFlavors[0]); + Color color = Color.decode(s); + switch (label.getText()) { + case "Цвет": { + if (armoredCar != null) { + armoredCar.SetColor(color); + } + break; + } + case "Доп. Цвет": { + if (armoredCar != null) { + if (armoredCar instanceof DrawingTank tank) { + tank.SetDopColor(color); + } + } + break; + } + } + drawPanel.repaint(); + } catch (Exception e) { + event.rejectDrop(); + } + } + } + + private class DrawPanelDropTargetListener extends DropTargetAdapter { + + private final DropTarget dropTarget; + private final JPanel panel; + + public DrawPanelDropTargetListener(JPanel panel) { + this.panel = panel; + + dropTarget = new DropTarget(panel, DnDConstants.ACTION_COPY, + this, true, null); + } + + + public void drop(DropTargetDropEvent event) { + try { + var tr = event.getTransferable(); + var dataFlavors = tr.getTransferDataFlavors(); + String drawing_type = (String) tr.getTransferData(dataFlavors[0]); + event.acceptDrop(DnDConstants.ACTION_COPY); + switch (drawing_type) { + case "Простой": { + armoredCar = new DrawingArmoredCar((int) numericUpDownSpeed.getValue(), (int) numericUpDownWeight.getValue(), Color.WHITE); + IDrawingCaterpillar drawingCaterpillar = armoredCar.GetCaterpillars(); + drawingCaterpillar.setNumRinks((int)numericUpDownCount.getValue()); + break; + } + case "Продвинутый": { + armoredCar = new DrawingTank((int) numericUpDownSpeed.getValue(), (int) numericUpDownWeight.getValue(), Color.WHITE, Color.BLACK, + checkBoxTowerWeapon.isSelected(), checkBoxAMachineGun.isSelected()); + IDrawingCaterpillar drawingCaterpillar = armoredCar.GetCaterpillars(); + drawingCaterpillar.setNumRinks((int)numericUpDownCount.getValue()); + break; + } + case "Обычные": { + if (armoredCar != null) { + IDrawingCaterpillar drawingCaterpillar = new DrawingCaterpillar(armoredCar.armoredCar.getBodyColor()); + drawingCaterpillar.setNumRinks((int)numericUpDownCount.getValue()); + armoredCar.SetCaterpillar(drawingCaterpillar); + } + break; + } + case "Двойные": { + if (armoredCar != null) { + IDrawingCaterpillar drawingCaterpillar = new DrawingDoubleCaterpillar(armoredCar.armoredCar.getBodyColor()); + drawingCaterpillar.setNumRinks((int)numericUpDownCount.getValue()); + armoredCar.SetCaterpillar(drawingCaterpillar); + } + break; + } + case "Крестики": { + if (armoredCar != null) { + IDrawingCaterpillar drawingCaterpillar = new DrawingCrossCaterpillar(armoredCar.armoredCar.getBodyColor()); + drawingCaterpillar.setNumRinks((int)numericUpDownCount.getValue()); + armoredCar.SetCaterpillar(drawingCaterpillar); + } + break; + } + } + event.dropComplete(true); + drawPanel.repaint(); + } catch (Exception e) { + e.printStackTrace(); + event.rejectDrop(); + } + } + } + + public static void main(String[] args) { + new FormArmoredCarConfig(); + } + + private void createUIComponents() { + drawPanel = new JPanel() { + @Override + public void paintComponent(Graphics g) { + super.paintComponent(g); + if (armoredCar != null) { + Graphics2D g2d = (Graphics2D) g; + armoredCar.SetPosition(drawPanel.getWidth() / 4, drawPanel.getHeight() / 4, drawPanel.getWidth(), drawPanel.getHeight()); + armoredCar.DrawTransport(g2d); + } + super.repaint(); + } + }; + numericUpDownCount = new JSpinner(new SpinnerNumberModel(4, 4, 6, 1)); + numericUpDownSpeed = new JSpinner(new SpinnerNumberModel(100, 100, 1000, 1)); + numericUpDownWeight = new JSpinner(new SpinnerNumberModel(100, 100, 1000, 1)); + } + + private void setColors() { + Color[] colors = new Color[8]; + colors[0] = Color.RED; + colors[1] = Color.GREEN; + colors[2] = Color.BLUE; + colors[3] = Color.YELLOW; + colors[4] = Color.WHITE; + colors[5] = Color.DARK_GRAY; + colors[6] = Color.BLACK; + colors[7] = Color.MAGENTA; + + int i = 0; + int width = 40; + for (Color color : colors) { + JButton btn = new JButton(); + btn.setBackground(color); + btn.setEnabled(false); + int x = i % 4; + int y = i / 4; + + btn.setBounds(x * width + 10, y * width + 10, width, width); + btn.setText(Integer.toString(color.getRGB())); + btn.setFont(new Font("Arial", Font.PLAIN, 0)); + btn.setTransferHandler(new TransferHandler("text")); + btn.addMouseListener(new DragMouseAdapter()); + colorsPanel.add(btn); + i++; + } + } +} diff --git a/src/main/java/IDrawingCaterpillar.java b/src/main/java/IDrawingCaterpillar.java index 50bda28..b52ed5e 100644 --- a/src/main/java/IDrawingCaterpillar.java +++ b/src/main/java/IDrawingCaterpillar.java @@ -4,4 +4,7 @@ public interface IDrawingCaterpillar { void setNumRinks(int n); void DrawCaterpillar(Graphics2D g2d, int startPosX, int startPosY); + + void setColor(Color color); + }