From f05a18487ebf4dca327abc68e0cd5f982ec42be2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=90=D0=BB=D0=B5=D0=BA=D1=81=D0=B5=D0=B9=20=D0=9A=D1=80?= =?UTF-8?q?=D1=8E=D0=BA=D0=BE=D0=B2?= Date: Sun, 24 Dec 2023 00:22:04 +0400 Subject: [PATCH] =?UTF-8?q?=D0=BB=D0=B0=D0=B1=D0=B0=205?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/DrawningExcavator.java | 8 + src/DrawningRollers.java | 43 +++ src/DrawningTracktor.java | 18 +- src/EntityExcavator.java | 6 + src/EntityTracktor.java | 3 + src/FrameTracktorConfig.java | 15 + src/PictureBoxCollection.java | 9 +- src/PictureBoxTracktorConfig.java | 474 ++++++++++++++++++++++++++++ src/TracktorsGenericCollection.java | 2 + 9 files changed, 570 insertions(+), 8 deletions(-) create mode 100644 src/FrameTracktorConfig.java create mode 100644 src/PictureBoxTracktorConfig.java diff --git a/src/DrawningExcavator.java b/src/DrawningExcavator.java index c079cea..7e1ff05 100644 --- a/src/DrawningExcavator.java +++ b/src/DrawningExcavator.java @@ -16,6 +16,14 @@ public class DrawningExcavator extends DrawningTracktor { setEntityTracktor(entityExcavator); } } + public DrawningExcavator(int speed, double weight, Color bodyColor, boolean bucket, boolean supports, Color bucketColor, Color supportsColor, int width, int height, int rollersCount, IDrawningRollers iDrawningRollers) + { + super(speed, weight, bodyColor, width, height, rollersCount, iDrawningRollers); + if (getEntityTracktor() != null) + { + setEntityTracktor(new EntityExcavator(speed, weight, bodyColor, bucketColor, supportsColor, bucket, supports)); + } + } @Override public void DrawTransport(Graphics2D g){ diff --git a/src/DrawningRollers.java b/src/DrawningRollers.java index 52d3ce8..4edbb8f 100644 --- a/src/DrawningRollers.java +++ b/src/DrawningRollers.java @@ -17,6 +17,7 @@ public class DrawningRollers implements IDrawningRollers { default -> rollersCount = RollersCount.Four; } } + public DrawningRollers(int count, Color colorRollers){ setRollersCount(count); this.colorRollers = colorRollers; @@ -65,4 +66,46 @@ public class DrawningRollers implements IDrawningRollers { g.fillOval((int)_startPosX + 13, (int)_startPosY + 68, 6, 6); g.fillOval((int)_startPosX + 91, (int)_startPosY + 68, 6, 6); } + private void drawFourRollers(Graphics2D g, Color color, int _startPosX, int _startPosY) { + Color penColor = Color.BLACK; + Color mainColor = colorRollers==null ? Color.LIGHT_GRAY : colorRollers; + + // Крупные катки - всегда + g.setColor(mainColor); + g.fillOval((int)_startPosX + 5, (int)_startPosY + 60, 22, 22); + g.setColor(penColor); + g.drawOval((int)_startPosX + 5, (int)_startPosY + 60, 22, 22); + g.setColor(mainColor); + g.fillOval((int)_startPosX + 83, (int)_startPosY + 60, 22, 22); + g.setColor(penColor); + g.drawOval((int)_startPosX + 83, (int)_startPosY + 60, 22, 22); + + // Малые катки - всегда + g.setColor(mainColor); + g.fillOval((int)_startPosX + 43, (int)_startPosY + 58, 6, 6); + g.setColor(penColor); + g.drawOval((int)_startPosX + 43, (int)_startPosY + 58, 6, 6); + g.setColor(mainColor); + g.fillOval((int)_startPosX + 61, (int)_startPosY + 58, 6, 6); + g.setColor(penColor); + g.drawOval((int)_startPosX + 61, (int)_startPosY + 58, 6, 6); + } + private void drawFiveRollers(Graphics2D g, Color color, int _startPosX, int _startPosY) { + Color penColor = Color.BLACK; + Color mainColor = colorRollers==null ? Color.LIGHT_GRAY : colorRollers; + drawFourRollers(g,color,_startPosX,_startPosY); + g.setColor(mainColor); + g.fillOval((int)_startPosX + 68, (int)_startPosY + 73, 10, 10); + g.setColor(penColor); + g.drawOval((int)_startPosX + 68, (int)_startPosY + 73, 10, 10); + } + private void drawSixRollers(Graphics2D g, Color color, int _startPosX, int _startPosY) { + Color penColor = Color.BLACK; + Color mainColor = colorRollers==null ? Color.LIGHT_GRAY : colorRollers; + drawFiveRollers(g,color,_startPosX,_startPosY); + g.setColor(mainColor); + g.fillOval((int)_startPosX + 33, (int)_startPosY + 73, 10, 10); + g.setColor(penColor); + g.drawOval((int)_startPosX + 33, (int)_startPosY + 73, 10, 10); + } } diff --git a/src/DrawningTracktor.java b/src/DrawningTracktor.java index 7860e0e..db92606 100644 --- a/src/DrawningTracktor.java +++ b/src/DrawningTracktor.java @@ -3,7 +3,7 @@ import java.util.Random; // Класс, отвечающий за прорисовку и перемещение объекта-сущности public class DrawningTracktor { - private EntityTracktor entityTracktor; // Класс-сущность + public EntityTracktor entityTracktor; // Класс-сущность public EntityTracktor getEntityTracktor(){ return entityTracktor; } @@ -15,8 +15,8 @@ public class DrawningTracktor { } protected int _startPosX; // Левая координата отрисовки трактора protected int _startPosY; // Верхняя кооридната отрисовки трактора - private Integer _pictureWidth; // Ширина окна отрисовки - private Integer _pictureHeight; // Высота окна отрисовки + public Integer _pictureWidth; // Ширина окна отрисовки + public Integer _pictureHeight; // Высота окна отрисовки protected int _tracktorWidth = 110; // Ширина отрисовки трактора protected int _tracktorHeight = 87; // Высота отрисовки трактора public int getPosX(){ @@ -31,7 +31,7 @@ public class DrawningTracktor { public int getHeight(){ return _tracktorHeight; } - private IDrawningRollers drawningRollers; + public IDrawningRollers drawningRollers; // Инициализация свойств public DrawningTracktor(int speed, double weight, Color bodyColor,int width,int height, int countRollers) @@ -80,6 +80,16 @@ public class DrawningTracktor { drawningRollers = iDrawningRollers; drawningRollers.setRollersCount(rollersCount); } + public DrawningTracktor(int speed, double weight, Color bodyColor, int width, int height, int rollersCount, IDrawningRollers iDrawningRollers){ + if (height < _pictureHeight || width < _tracktorWidth) { + return; + } + _pictureWidth = width; + _pictureHeight = height; + entityTracktor = new EntityTracktor(speed, weight, bodyColor); + drawningRollers = iDrawningRollers; + drawningRollers.setRollersCount(rollersCount); + } public boolean CanMove(Direction direction){ if(entityTracktor == null) return false; diff --git a/src/EntityExcavator.java b/src/EntityExcavator.java index df6eb6b..863e7e5 100644 --- a/src/EntityExcavator.java +++ b/src/EntityExcavator.java @@ -19,9 +19,15 @@ public class EntityExcavator extends EntityTracktor{ public Color getBucketColor(){ return BucketColor; } + public void setBucketColor(Color color){ + BucketColor = color; + } public Color getSupportsColor(){ return SupportsColor; } + public void setSupportsColor(Color color){ + SupportsColor = color; + } public boolean getBucket(){ return bucket; diff --git a/src/EntityTracktor.java b/src/EntityTracktor.java index 9bfbbb4..57bda91 100644 --- a/src/EntityTracktor.java +++ b/src/EntityTracktor.java @@ -14,6 +14,9 @@ public class EntityTracktor { public Color getBodyColor(){ return BodyColor; } + public void setBodyColor(Color color){ + BodyColor = color; + } public double getStep(){ return (double) Speed * 100 / Weight; } diff --git a/src/FrameTracktorConfig.java b/src/FrameTracktorConfig.java new file mode 100644 index 0000000..f4b6bb5 --- /dev/null +++ b/src/FrameTracktorConfig.java @@ -0,0 +1,15 @@ +import javax.swing.*; + +public class FrameTracktorConfig extends JFrame { + + public PictureBoxTracktorConfig pictureBoxTracktorConfig; + + public FrameTracktorConfig() { + setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); + pictureBoxTracktorConfig = new PictureBoxTracktorConfig(); + add(pictureBoxTracktorConfig); + pack(); + setLocationRelativeTo(null); + setVisible(true); + } +} \ No newline at end of file diff --git a/src/PictureBoxCollection.java b/src/PictureBoxCollection.java index 4c85f8f..371f4bd 100644 --- a/src/PictureBoxCollection.java +++ b/src/PictureBoxCollection.java @@ -94,17 +94,18 @@ public class PictureBoxCollection extends JPanel { var obj = _storage.get(listStorage.getSelectedValue()); if (obj == null) return; - FrameExcavator frameExcavator = new FrameExcavator(null); - frameExcavator.pictureBoxExcavator.buttonSelectTracktor.addActionListener(e1 -> { - if (obj.Add(frameExcavator.pictureBoxExcavator.drawingTracktor) != -1) { + FrameTracktorConfig frameTracktorConfig = new FrameTracktorConfig(); + frameTracktorConfig.pictureBoxTracktorConfig.buttonAdd.addActionListener(e1 -> { + if (obj != null && obj.Add(frameTracktorConfig.pictureBoxTracktorConfig._tracktor)!=-1) { JOptionPane.showMessageDialog(null, "Объект добавлен", "Информация", JOptionPane.INFORMATION_MESSAGE); } else { JOptionPane.showMessageDialog(null, "Не удалось добавить объект", "Информация", JOptionPane.INFORMATION_MESSAGE); } - frameExcavator.dispose(); + frameTracktorConfig.dispose(); repaint(); } ); + frameTracktorConfig.pictureBoxTracktorConfig.buttonCancel.addActionListener(e1 -> frameTracktorConfig.dispose()); }); add(buttonAddTracktor); diff --git a/src/PictureBoxTracktorConfig.java b/src/PictureBoxTracktorConfig.java new file mode 100644 index 0000000..24c5869 --- /dev/null +++ b/src/PictureBoxTracktorConfig.java @@ -0,0 +1,474 @@ +import javax.swing.*; +import javax.swing.border.Border; +import java.awt.*; +import java.awt.datatransfer.DataFlavor; +import java.awt.datatransfer.StringSelection; +import java.awt.datatransfer.Transferable; +import java.awt.datatransfer.UnsupportedFlavorException; +import java.io.IOException; +import java.util.Random; + +import java.awt.event.*; + +public class PictureBoxTracktorConfig extends JPanel { + 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 static class ColorTransferable implements Transferable { + private Color color; + private static final DataFlavor colorDataFlavor = new DataFlavor(Color.class, "Color"); + + public ColorTransferable(Color color) { + this.color = 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, IOException { + if (isDataFlavorSupported(flavor)) { + return color; + } else { + throw new UnsupportedFlavorException(flavor); + } + } + } + private class PanelTransferHandler extends TransferHandler { + @Override + public int getSourceActions(JComponent c) { + return TransferHandler.COPY; + } + + @Override + protected Transferable createTransferable(JComponent c) { + return new ColorTransferable(((JPanel) c).getBackground()); + } + } + private class LabelMouseAdapter extends MouseAdapter{ + @Override + public void mousePressed(MouseEvent e) { + ((JLabel)e.getComponent()).getTransferHandler().exportAsDrag(((JLabel)e.getComponent()), e, TransferHandler.COPY); + } + } + private class PanelMouseAdapter extends MouseAdapter{ + @Override + public void mousePressed(MouseEvent e) { + ((JPanel)e.getComponent()).getTransferHandler().exportAsDrag(((JPanel)e.getComponent()), e, TransferHandler.COPY); + } + } + + private class RollersTransferable implements Transferable { + private IDrawningRollers rollersDrawning; + private static final DataFlavor rollersDrawningDataFlavor = new DataFlavor(IDrawningRollers.class, "Roller Drawing"); + + public RollersTransferable(IDrawningRollers rollersDrawning) { + this.rollersDrawning = rollersDrawning; + } + + @Override + public DataFlavor[] getTransferDataFlavors() { + return new DataFlavor[]{rollersDrawningDataFlavor}; + } + + @Override + public boolean isDataFlavorSupported(DataFlavor flavor) { + return flavor.equals(rollersDrawningDataFlavor); + } + + @Override + public Object getTransferData(DataFlavor flavor) throws UnsupportedFlavorException, IOException { + if (isDataFlavorSupported(flavor)) { + return rollersDrawning; + } else { + throw new UnsupportedFlavorException(flavor); + } + } + } + private class RollerPanel extends JPanel{ + public IDrawningRollers rollersDrawning; + + public RollerPanel(IDrawningRollers _rollersDrawning){ + rollersDrawning = _rollersDrawning; + rollersDrawning.setRollersCount(4); + this.addMouseListener( + new MouseAdapter(){ + @Override + public void mousePressed(MouseEvent e) { + ((RollerPanel)e.getComponent()).getTransferHandler().exportAsDrag(((RollerPanel)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 RollersTransferable(((RollerPanel)c).rollersDrawning); + } + } + ); + } + + public void paintComponent (Graphics g){ + super.paintComponents (g) ; + Graphics2D g2d = (Graphics2D)g; + rollersDrawning.DrawRollers(g2d,0, -50); + } + } + + private class TracktorPreview extends JPanel{ + + @Override + public void paintComponent (Graphics g) { + if (_tracktor == null) { + return; + } + _tracktor.SetPosition(20, 20); + super.paintComponent(g); + Graphics2D g2d = (Graphics2D) g; + _tracktor.DrawTransport(g2d); + } + } + DrawningTracktor _tracktor = null; + JButton buttonAdd, buttonCancel; + JLabel labelParameters, labelColors, labelSpeed, labelWeight, labelRollerAmount, labelSimpleObject, labelModifiedObject, labelBodyColor, labelBucketColor, labelSupportsColor, labelRollers, labelRollerPreview; + JCheckBox checkBoxBucket, checkBoxSupports; + SpinnerModel spinnerModelSpeed, spinnerModelWeight, spinnerModelRollerAmount; + JSpinner numericUpDownSpeed, numericUpDownWeight, numericUpDownRollerAmount; + JPanel panelRed, panelGreen, panelBlue, panelYellow, panelWhite, panelGray, panelBlack, panelMagenta; + TracktorPreview TracktorPreview; + public PictureBoxTracktorConfig() { + Random random = new Random(); + setLayout(null); + setBounds(0, 0, 800, 300); + buttonAdd = new JButton("Добавить"); + buttonAdd.setFocusable(false); + buttonAdd.setBounds(550, 260, 100, 30); + add(buttonAdd); + + buttonCancel = new JButton("Отмена"); + buttonCancel.setFocusable(false); + buttonCancel.setBounds(670, 260, 100, 30); + add(buttonCancel); + + labelParameters = new JLabel("Параметры"); + labelParameters.setBounds(10, 10, 100, 20); + add(labelParameters); + + labelSpeed = new JLabel("Скорость:"); + labelSpeed.setBounds(10, 50, 100, 20); + add(labelSpeed); + + labelWeight = new JLabel("Вес:"); + labelWeight.setBounds(10, 80, 100, 20); + add(labelWeight); + + labelRollerAmount = new JLabel("Кол-во колес:"); + labelRollerAmount.setBounds(10, 110, 100, 20); + add(labelRollerAmount); + + checkBoxBucket = new JCheckBox("Признак наличия ковша"); + checkBoxBucket.setBounds(10, 200, 200, 20); + checkBoxBucket.setFocusable(false); + add(checkBoxBucket); + + checkBoxSupports = new JCheckBox("Признак наличия опор"); + checkBoxSupports.setBounds(10, 230, 200, 20); + checkBoxSupports.setFocusable(false); + add(checkBoxSupports); + + spinnerModelSpeed = new SpinnerNumberModel(100, 100, 1000, 1); + numericUpDownSpeed = new JSpinner(spinnerModelSpeed); + numericUpDownSpeed.setBounds(100, 50, 50, 20); + numericUpDownSpeed.setFocusable(false); + add(numericUpDownSpeed); + + spinnerModelWeight = new SpinnerNumberModel(100, 100, 1000, 1); + numericUpDownWeight = new JSpinner(spinnerModelWeight); + numericUpDownWeight.setBounds(100, 80, 50, 20); + numericUpDownWeight.setFocusable(false); + add(numericUpDownWeight); + + spinnerModelRollerAmount = new SpinnerNumberModel(4, 4, 6, 1); + numericUpDownRollerAmount = new JSpinner(spinnerModelRollerAmount); + numericUpDownRollerAmount.setBounds(100, 110, 50, 20); + numericUpDownRollerAmount.setFocusable(false); + add(numericUpDownRollerAmount); + + labelColors = new JLabel("Цвета"); + labelColors.setBounds(250, 20, 100, 20); + add(labelColors); + + Border border = BorderFactory.createLineBorder(Color.BLACK); + + labelSimpleObject = new JLabel("Простой"); + labelSimpleObject.setBounds(250, 240, 100, 50); + labelSimpleObject.setHorizontalAlignment(SwingConstants.CENTER); + labelSimpleObject.setBorder(border); + labelSimpleObject.setTransferHandler(new LabelTransferHandler()); + labelSimpleObject.addMouseListener(new LabelMouseAdapter()); + add(labelSimpleObject); + + labelModifiedObject = new JLabel("Продвинутый"); + labelModifiedObject.setBounds(370, 240, 100, 50); + labelModifiedObject.setHorizontalAlignment(SwingConstants.CENTER); + labelModifiedObject.setBorder(border); + labelModifiedObject.setTransferHandler(new LabelTransferHandler()); + labelModifiedObject.addMouseListener(new LabelMouseAdapter()); + add(labelModifiedObject); + + labelBodyColor = new JLabel("Цвет"); + labelBodyColor.setBounds(530, 20, 80, 40); + labelBodyColor.setHorizontalAlignment(SwingConstants.CENTER); + labelBodyColor.setBorder(border); + labelBodyColor.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 (_tracktor == null) + return false; + _tracktor.entityTracktor.setBodyColor(color); + TracktorPreview.repaint(); + return true; + } catch (UnsupportedFlavorException | IOException e) { + e.printStackTrace(); + } + } + return false; + } + } + ); + add(labelBodyColor); + + labelBucketColor = new JLabel("Цвет кузова"); + labelBucketColor.setBounds(620, 20, 80, 40); + labelBucketColor.setHorizontalAlignment(SwingConstants.CENTER); + labelBucketColor.setBorder(border); + labelBucketColor.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 (_tracktor == null) + return false; + if (!(_tracktor instanceof DrawningExcavator)) + return false; + ((EntityExcavator)_tracktor.entityTracktor).setBucketColor(color); + TracktorPreview.repaint(); + return true; + } catch (UnsupportedFlavorException | IOException e) { + e.printStackTrace(); + } + } + return false; + } + } + ); + add(labelBucketColor); + + labelSupportsColor = new JLabel("Цвет опор"); + labelSupportsColor.setBounds(710, 20, 80, 40); + labelSupportsColor.setHorizontalAlignment(SwingConstants.CENTER); + labelSupportsColor.setBorder(border); + labelSupportsColor.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 (_tracktor == null) + return false; + if (!(_tracktor instanceof DrawningExcavator)) + return false; + ((EntityExcavator)_tracktor.entityTracktor).setSupportsColor(color); + TracktorPreview.repaint(); + return true; + } catch (UnsupportedFlavorException | IOException e) { + e.printStackTrace(); + } + } + return false; + } + } + ); + add(labelSupportsColor); + + labelRollerPreview = new JLabel("Колесо"); + labelRollerPreview.setBounds(530, 70, 80, 30); + labelRollerPreview.setHorizontalAlignment(SwingConstants.CENTER); + labelRollerPreview.setBorder(border); + add(labelRollerPreview); + labelRollerPreview.setTransferHandler( + new TransferHandler(){ + @Override + public boolean canImport(TransferHandler.TransferSupport support) { + return support.isDataFlavorSupported(RollersTransferable.rollersDrawningDataFlavor); + } + + @Override + public boolean importData(TransferHandler.TransferSupport support) { + if (canImport(support)) { + try { + IDrawningRollers IDrawningRollers = (IDrawningRollers) support.getTransferable().getTransferData(RollersTransferable.rollersDrawningDataFlavor); + if (_tracktor == null) + return false; + _tracktor.drawningRollers = IDrawningRollers; + _tracktor.drawningRollers.setRollersCount((int)numericUpDownRollerAmount.getValue()); + TracktorPreview.repaint(); + } catch (UnsupportedFlavorException | IOException e) { + e.printStackTrace(); + } + } + return false; + } + } + ); + + panelRed = new JPanel(); + panelRed.setBounds(250, 50, 40, 40); + panelRed.setBackground(Color.RED); + panelRed.setTransferHandler(new PanelTransferHandler()); + panelRed.addMouseListener(new PanelMouseAdapter()); + add(panelRed); + + panelGreen = new JPanel(); + panelGreen.setBounds(300, 50, 40, 40); + panelGreen.setBackground(Color.GREEN); + panelGreen.setTransferHandler(new PanelTransferHandler()); + panelGreen.addMouseListener(new PanelMouseAdapter()); + add(panelGreen); + + panelBlue = new JPanel(); + panelBlue.setBounds(350, 50, 40, 40); + panelBlue.setBackground(Color.BLUE); + panelBlue.setTransferHandler(new PanelTransferHandler()); + panelBlue.addMouseListener(new PanelMouseAdapter()); + add(panelBlue); + + panelYellow = new JPanel(); + panelYellow.setBounds(400, 50, 40, 40); + panelYellow.setBackground(Color.YELLOW); + panelYellow.setTransferHandler(new PanelTransferHandler()); + panelYellow.addMouseListener(new PanelMouseAdapter()); + add(panelYellow); + + panelWhite = new JPanel(); + panelWhite.setBounds(250, 100, 40, 40); + panelWhite.setBackground(Color.WHITE); + panelWhite.setTransferHandler(new PanelTransferHandler()); + panelWhite.addMouseListener(new PanelMouseAdapter()); + add(panelWhite); + + panelGray = new JPanel(); + panelGray.setBounds(300, 100, 40, 40); + panelGray.setBackground(Color.GRAY); + panelGray.setTransferHandler(new PanelTransferHandler()); + panelGray.addMouseListener(new PanelMouseAdapter()); + add(panelGray); + + panelBlack = new JPanel(); + panelBlack.setBounds(350, 100, 40, 40); + panelBlack.setBackground(Color.black); + panelBlack.setTransferHandler(new PanelTransferHandler()); + panelBlack.addMouseListener(new PanelMouseAdapter()); + add(panelBlack); + + panelMagenta = new JPanel(); + panelMagenta.setBounds(400, 100, 40, 40); + panelMagenta.setBackground(Color.MAGENTA); + panelMagenta.setTransferHandler(new PanelTransferHandler()); + panelMagenta.addMouseListener(new PanelMouseAdapter()); + add(panelMagenta); + + labelRollers = new JLabel("Колеса"); + labelRollers.setBounds(250, 150, 100, 20); + add(labelRollers); + RollerPanel RollerPanelDefault = new RollerPanel(new DrawningRollers((int)numericUpDownRollerAmount.getValue(),Color.RED)); + RollerPanelDefault.setBounds(250, 180, 40, 40); + add(RollerPanelDefault); + RollerPanel RollerPanelCircles = new RollerPanel(new DrawningCrossRollers((int)numericUpDownRollerAmount.getValue(),Color.RED)); + RollerPanelCircles.setBounds(300, 180, 40, 40); + add(RollerPanelCircles); + RollerPanel RollerPanelStar = new RollerPanel(new DrawningSquaredRollers((int)numericUpDownRollerAmount.getValue(),Color.RED)); + RollerPanelStar.setBounds(350, 180, 40, 40); + add(RollerPanelStar); + + TracktorPreview = new TracktorPreview(); + TracktorPreview.setBounds(530, 110, 260, 140); + TracktorPreview.setBorder(border); + add(TracktorPreview); + TracktorPreview.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 { + String data = (String) support.getTransferable().getTransferData(DataFlavor.stringFlavor); + switch (data) { + case "Простой": + _tracktor = new DrawningTracktor((int)numericUpDownSpeed.getValue(), (int)numericUpDownWeight.getValue(), Color.WHITE, TracktorPreview.getWidth(), TracktorPreview.getHeight(), (int)numericUpDownRollerAmount.getValue(), new DrawningRollers((int)numericUpDownRollerAmount.getValue(),Color.RED)); + break; + case "Продвинутый": + _tracktor = new DrawningExcavator((int)numericUpDownSpeed.getValue(), (int)numericUpDownWeight.getValue(), Color.WHITE, checkBoxSupports.isSelected(), checkBoxBucket.isSelected(), Color.BLACK, Color.GRAY, TracktorPreview.getWidth(), TracktorPreview.getHeight(), (int)numericUpDownRollerAmount.getValue(), new DrawningRollers((int)numericUpDownRollerAmount.getValue(),Color.RED)); + break; + } + TracktorPreview.repaint(); + return true; + } catch (UnsupportedFlavorException | IOException e) { + e.printStackTrace(); + } + } + return false; + } + } + ); + + setPreferredSize(new Dimension(800, 300)); + } +} \ No newline at end of file diff --git a/src/TracktorsGenericCollection.java b/src/TracktorsGenericCollection.java index 6b58031..8c0ef81 100644 --- a/src/TracktorsGenericCollection.java +++ b/src/TracktorsGenericCollection.java @@ -49,6 +49,8 @@ public class TracktorsGenericCollection