import CollectionGenericObjects.AbstractCompany; import CollectionGenericObjects.MassiveGenericObjects; import CollectionGenericObjects.ShipPortService; import DrawingShip.CanvasFormShipCollection; import DrawingShip.DrawingShip; import DrawingShip.DrawingWarmlyShip; import javax.swing.*; import javax.swing.text.MaskFormatter; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.ComponentAdapter; import java.awt.event.ComponentEvent; import java.text.ParseException; import java.util.Random; import static java.lang.Integer.parseInt; public class FormShipCollection extends JFrame{ private String title; private Dimension dimension; public static CanvasFormShipCollection _canvasWarmlyShip = new CanvasFormShipCollection(); private static AbstractCompany _company = null; private JButton CreateButton = new JButton("Create warmlyship");; private JButton CreateShipButton = new JButton("Create ship"); private JButton RemoveButton = new JButton("Remove"); private JButton GoToCheckButton = new JButton("Check"); private JButton RandomButton = new JButton("RandomShip"); private JButton RefreshButton = new JButton("Refresh"); private JComboBox ComboBoxCollections = new JComboBox(new String[]{"", "Хранилище"}); private JFormattedTextField MaskedTextField; public FormShipCollection(String title, Dimension dimension) { this.title = title; this.dimension = dimension; } public static void canvasShow() { _company.SetPosition(); _canvasWarmlyShip.SetCollectionToCanvas(_company); _canvasWarmlyShip.repaint(); } private void CreateObject(String typeOfClass) { if (_company == null) return; int speed = (int)(Math.random() * 300 + 100); double weight = (double)(Math.random() * 3000 + 1000); Color bodyColor = getColor(); DrawingShip drawingShip; switch (typeOfClass) { case "DrawingShip": drawingShip = new DrawingShip(speed, weight, bodyColor); break; case "DrawingWarmlyShip": Color additionalColor = getColor(); boolean sheepPipes = new Random().nextBoolean(); boolean fuelTank = new Random().nextBoolean();; drawingShip = new DrawingWarmlyShip(speed, weight, bodyColor, additionalColor, sheepPipes, fuelTank); break; default: return; } if (_company._collection.Insert(drawingShip, 0) != -1) { JOptionPane.showMessageDialog(null, "Объект добавлен"); canvasShow(); } else { JOptionPane.showMessageDialog(null, "Объект не удалось добавить"); } } public Color getColor() { Color initializator = new Color((int)(Math.random() * 255 + 0),(int)(Math.random() * 255 + 0),(int)(Math.random() * 255 + 0)); Color color = JColorChooser.showDialog(this, "Select a color", initializator); return color; } public void Init() { setTitle(title); setMinimumSize(dimension); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); MaskFormatter mask = null; try { mask = new MaskFormatter("##"); mask.setPlaceholder("00"); } catch (ParseException e) { throw new RuntimeException(e); } MaskedTextField = new JFormattedTextField(mask); ComboBoxCollections.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { switch (ComboBoxCollections.getSelectedItem().toString()) { case "Хранилище": _company = new ShipPortService(getWidth()-200, getHeight()-70, new MassiveGenericObjects()); break; } } }); CreateShipButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { CreateObject("DrawingShip"); } }); CreateButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { CreateObject("DrawingWarmlyShip"); } }); RemoveButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { if (_company == null || MaskedTextField.getText() == null) { return; } int pos = parseInt(MaskedTextField.getText()); int resultConfirmDialog = JOptionPane.showConfirmDialog(null, "Удалить", "Удаление", JOptionPane.YES_NO_OPTION); if (resultConfirmDialog == JOptionPane.NO_OPTION) return; if (_company._collection.Remove(pos) != null) { JOptionPane.showMessageDialog(null, "Объект удален"); canvasShow(); } else { JOptionPane.showMessageDialog(null, "Объект не удалось удалить"); } } }); GoToCheckButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { if (_company == null) { return; } DrawingShip ship = null; int counter = 100; while (ship == null) { ship = _company.GetRandomObject(); counter--; if (counter <= 0) { break; } } if (ship == null) { return; } FormWarmlyShip form = new FormWarmlyShip("Теплоход", new Dimension(900,565)); form.Init(ship); } }); RandomButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { if (_company == null) { return; } FormAdditionalCollection form = new FormAdditionalCollection(); form.setCompany(_company); } }); RefreshButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { if (_company == null) { return; } canvasShow(); } }); _canvasWarmlyShip.setBounds(0, 0, getWidth()-200, getHeight()); ComboBoxCollections.setBounds(getWidth()-190, 10, 150, 20); CreateShipButton.setBounds(getWidth()-190, 60, 150, 30); CreateButton.setBounds(getWidth()-190, 100, 150, 30); MaskedTextField.setBounds(getWidth()-190,200,150,30); RemoveButton.setBounds(getWidth()-190, 240, 150, 30); GoToCheckButton.setBounds(getWidth()-190, 280, 150, 30); RandomButton.setBounds(getWidth()-190, 320, 150, 30); RefreshButton.setBounds(getWidth()-190, getHeight()-90, 150, 30); setSize(dimension.width,dimension.height); setLayout(null); add(_canvasWarmlyShip); add(ComboBoxCollections); add(CreateShipButton); add(CreateButton); add(MaskedTextField); add(RemoveButton); add(GoToCheckButton); add(RandomButton); add(RefreshButton); setVisible(true); addComponentListener(new ComponentAdapter() { public void componentResized(ComponentEvent e) { _canvasWarmlyShip.setBounds(0, 0, getWidth()-200, getHeight()-70); ComboBoxCollections.setBounds(getWidth()-190, 10, 150, 20); CreateShipButton.setBounds(getWidth()-190, 60, 150, 30); CreateButton.setBounds(getWidth()-190, 100, 150, 30); MaskedTextField.setBounds(getWidth()-190,200,150,30); RemoveButton.setBounds(getWidth()-190, 240, 150, 30); GoToCheckButton.setBounds(getWidth()-190, 280, 150, 30); RandomButton.setBounds(getWidth()-190, 320, 150, 30); RefreshButton.setBounds(getWidth()-190, getHeight()-90, 150, 30); } }); } }