import java.awt.*; import javax.swing.*; import javax.swing.event.ListSelectionEvent; import javax.swing.event.ListSelectionListener; import java.awt.event.*; import java.util.Stack; public class FormShipCollection { class Canvas extends JComponent{ public Canvas(){} public void paintComponent(Graphics g){ super.paintComponent(g); if (jListStorage.getSelectedIndex() == -1) { return; } var obj = _storage.get(jListStorage.getSelectedValue()); if (obj == null) { return; } if(obj.ShowShips() != null){ g.drawImage(obj.ShowShips(), 0, 0, this); } super.repaint(); } } Canvas canv; static int pictureBoxWidth = 820; static int pictureBoxHeight = 580; private Stack removedShips; private ShipGenericStorage _storage; private JList jListStorage; private DefaultListModel listModel; private void ReloadObjects() { int index = jListStorage.getSelectedIndex(); listModel.clear(); for (String key : _storage.Keys()) { listModel.addElement(key); } if (listModel.size() > 0 && (index == -1 || index >= listModel.size())) { jListStorage.setSelectedIndex(0); } else if (listModel.size() > 0 && index > -1 && index < listModel.size()) { jListStorage.setSelectedIndex(index); } } public void Draw(){ canv.repaint(); } FormShipCollection(){ canv = new Canvas(); JFrame w = new JFrame("FormShipCollection"); _storage = new ShipGenericStorage(pictureBoxWidth, pictureBoxHeight); listModel = new DefaultListModel(); jListStorage = new JList(listModel); JButton ButtonAddShip = new JButton("Добавить кораблик"); JButton ButtonDeleteShip = new JButton("Удалить кораблик"); JButton ButtonRefreshCollection = new JButton("Обновить коллекцию"); JButton forNewForm = new JButton("новая форма"); JButton buttonGetRemoved = new JButton("Получить удалённое"); JButton buttonAddSet = new JButton("Добавить коллекцию"); JButton buttonRemoveSet = new JButton("Удалить коллекцию"); JTextField textBoxSetName = new JTextField(); JTextField TextBoxNumber = new JTextField(); ButtonAddShip.addActionListener( new ActionListener() { public void actionPerformed(ActionEvent e){ if (jListStorage.getSelectedIndex() == -1) { return; } var obj = _storage.get(jListStorage.getSelectedValue()); if (obj == null) { return; } FormContainerShip form = new FormContainerShip(); form.buttonSelectedShip.addActionListener( new ActionListener(){ public void actionPerformed(ActionEvent e){ if(obj.Add(form._drawingShip) != -1){ JOptionPane.showMessageDialog(null, "Объект добавлен", "Информация", JOptionPane.INFORMATION_MESSAGE); Draw(); } else{ JOptionPane.showMessageDialog(null, "Объект не добавлен", "Информация", JOptionPane.INFORMATION_MESSAGE); } form.w.dispose(); } } ); } } ); forNewForm.addActionListener( new ActionListener() { public void actionPerformed(ActionEvent e){ NewFormRand newFormRand = new NewFormRand(); } } ); removedShips = new Stack(); ButtonDeleteShip.addActionListener( new ActionListener() { public void actionPerformed(ActionEvent e){ if (jListStorage.getSelectedIndex() == -1) { return; } var obj = _storage.get(jListStorage.getSelectedValue()); if (obj == null) { return; } if (JOptionPane.showConfirmDialog(null, "Удалить объект?", "Удаление", JOptionPane.YES_NO_OPTION) == JOptionPane.NO_OPTION) { return; } int pos = Integer.parseInt(TextBoxNumber.getText()); var rem = obj.remove(pos); if (rem != null) { removedShips.push(rem); JOptionPane.showMessageDialog(null, "Объект удален", "Информация", JOptionPane.INFORMATION_MESSAGE); Draw(); } else { JOptionPane.showMessageDialog(null, "Не удалось удалить объект", "Информация", JOptionPane.INFORMATION_MESSAGE); } } } ); buttonGetRemoved.addActionListener( new ActionListener() { public void actionPerformed(ActionEvent e){ if (removedShips.empty()){ JOptionPane.showMessageDialog(null, "Нет удалённых", "Информация", JOptionPane.INFORMATION_MESSAGE); return; } FormContainerShip form = new FormContainerShip(); form._drawingShip = removedShips.peek(); form._drawingShip.SetPosition(100, 100); removedShips.pop(); form.Draw(); } } ); ButtonRefreshCollection.addActionListener( new ActionListener() { public void actionPerformed(ActionEvent e){ Draw(); } } ); buttonAddSet.addActionListener( new ActionListener() { public void actionPerformed(ActionEvent e){ if (textBoxSetName.getText().length() == 0) { JOptionPane.showMessageDialog(null, "Не все данные заполнены", "Информация", JOptionPane.INFORMATION_MESSAGE); return; } _storage.AddSet(textBoxSetName.getText()); ReloadObjects(); } } ); jListStorage.addListSelectionListener( new ListSelectionListener() { public void valueChanged(ListSelectionEvent e){ Draw(); } } ); buttonRemoveSet.addActionListener( new ActionListener() { public void actionPerformed(ActionEvent e){ if (jListStorage.getSelectedIndex() == -1) { return; } if (JOptionPane.showConfirmDialog(null, "Удалить объект " + jListStorage.getSelectedValue() + "?", "Удаление", JOptionPane.YES_NO_OPTION) == JOptionPane.NO_OPTION) { return; } _storage.DelSet(jListStorage.getSelectedValue()); ReloadObjects(); } } ); w.setSize (1000, 600); w.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE); w.setLayout(null); canv.setBounds(0, 0, pictureBoxWidth, pictureBoxHeight); ButtonAddShip.setBounds(pictureBoxWidth, 0, 120, 20); TextBoxNumber.setBounds(pictureBoxWidth, 50, 120, 20); ButtonDeleteShip.setBounds(pictureBoxWidth, 80, 120, 20); ButtonRefreshCollection.setBounds(pictureBoxWidth, 120, 120, 20); forNewForm.setBounds(pictureBoxWidth, 150, 120, 20); buttonAddSet.setBounds(pictureBoxWidth, 180, 120, 20); textBoxSetName.setBounds(pictureBoxWidth, 210, 120, 20); jListStorage.setBounds(pictureBoxWidth, 240, 120, 60); buttonRemoveSet.setBounds(pictureBoxWidth, 310, 120, 20); buttonGetRemoved.setBounds(pictureBoxWidth, 340, 120, 20); w.add(canv); w.add(ButtonAddShip); w.add(ButtonDeleteShip); w.add(ButtonRefreshCollection); w.add(forNewForm); w.add(TextBoxNumber); w.add(buttonAddSet); w.add(textBoxSetName); w.add(jListStorage); w.add(buttonRemoveSet); w.add(buttonGetRemoved); w.setVisible(true); } }