готово 4
This commit is contained in:
parent
30e3d67aeb
commit
097cb7f944
@ -9,6 +9,8 @@ public class DrawningObjectShip implements IDrawningObject {
|
|||||||
_warmlyShip = warmlyShip;
|
_warmlyShip = warmlyShip;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public DrawingShip getDrawingShip() {return _warmlyShip;}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public float getStep() {
|
public float getStep() {
|
||||||
if (_warmlyShip == null || _warmlyShip.warmlyShip == null) return 0;
|
if (_warmlyShip == null || _warmlyShip.warmlyShip == null) return 0;
|
||||||
|
196
FormMapWithSetShipsGeneric.form
Normal file
196
FormMapWithSetShipsGeneric.form
Normal file
@ -0,0 +1,196 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<form xmlns="http://www.intellij.com/uidesigner/form/" version="1" bind-to-class="FormMapWithSetShipsGeneric">
|
||||||
|
<grid id="27dc6" binding="Mainpanel" layout-manager="GridLayoutManager" row-count="4" column-count="2" same-size-horizontally="false" same-size-vertically="false" hgap="-1" vgap="-1">
|
||||||
|
<margin top="0" left="0" bottom="0" right="0"/>
|
||||||
|
<constraints>
|
||||||
|
<xy x="20" y="20" width="798" height="526"/>
|
||||||
|
</constraints>
|
||||||
|
<properties/>
|
||||||
|
<border type="none"/>
|
||||||
|
<children>
|
||||||
|
<grid id="9bb5a" binding="pictureBoxShip" layout-manager="BorderLayout" hgap="0" vgap="0">
|
||||||
|
<constraints>
|
||||||
|
<grid row="0" column="0" row-span="2" col-span="1" vsize-policy="3" hsize-policy="3" anchor="0" fill="3" indent="0" use-parent-layout="false"/>
|
||||||
|
</constraints>
|
||||||
|
<properties/>
|
||||||
|
<border type="none"/>
|
||||||
|
<children/>
|
||||||
|
</grid>
|
||||||
|
<hspacer id="b305e">
|
||||||
|
<constraints>
|
||||||
|
<grid row="3" column="0" row-span="1" col-span="1" vsize-policy="1" hsize-policy="6" anchor="0" fill="1" indent="0" use-parent-layout="false"/>
|
||||||
|
</constraints>
|
||||||
|
</hspacer>
|
||||||
|
<grid id="4fa91" binding="GroupBoxTools" layout-manager="GridLayoutManager" row-count="8" column-count="3" same-size-horizontally="false" same-size-vertically="false" hgap="-1" vgap="-1">
|
||||||
|
<margin top="0" left="0" bottom="0" right="0"/>
|
||||||
|
<constraints>
|
||||||
|
<grid row="1" column="1" row-span="3" col-span="1" vsize-policy="3" hsize-policy="3" anchor="0" fill="3" indent="0" use-parent-layout="false"/>
|
||||||
|
</constraints>
|
||||||
|
<properties/>
|
||||||
|
<border type="none"/>
|
||||||
|
<children>
|
||||||
|
<component id="cdb80" class="javax.swing.JButton" binding="ButtonAddShip">
|
||||||
|
<constraints>
|
||||||
|
<grid row="0" column="0" row-span="1" col-span="3" vsize-policy="0" hsize-policy="3" anchor="0" fill="1" indent="0" use-parent-layout="false"/>
|
||||||
|
</constraints>
|
||||||
|
<properties>
|
||||||
|
<text value="Добавить корабль"/>
|
||||||
|
</properties>
|
||||||
|
</component>
|
||||||
|
<component id="e5494" class="javax.swing.JTextField" binding="maskedTextBoxPosition">
|
||||||
|
<constraints>
|
||||||
|
<grid row="1" column="0" row-span="1" col-span="3" vsize-policy="0" hsize-policy="6" anchor="8" fill="1" indent="0" use-parent-layout="false">
|
||||||
|
<preferred-size width="150" height="-1"/>
|
||||||
|
</grid>
|
||||||
|
</constraints>
|
||||||
|
<properties/>
|
||||||
|
</component>
|
||||||
|
<component id="8bb89" class="javax.swing.JButton" binding="ButtonDeleteShip">
|
||||||
|
<constraints>
|
||||||
|
<grid row="2" column="0" row-span="1" col-span="3" vsize-policy="0" hsize-policy="3" anchor="0" fill="1" indent="0" use-parent-layout="false"/>
|
||||||
|
</constraints>
|
||||||
|
<properties>
|
||||||
|
<text value="Удалить корабль"/>
|
||||||
|
</properties>
|
||||||
|
</component>
|
||||||
|
<component id="aa482" class="javax.swing.JButton" binding="ButtonShowStorage">
|
||||||
|
<constraints>
|
||||||
|
<grid row="3" column="0" row-span="1" col-span="3" vsize-policy="0" hsize-policy="3" anchor="0" fill="1" indent="0" use-parent-layout="false"/>
|
||||||
|
</constraints>
|
||||||
|
<properties>
|
||||||
|
<text value="Показать хранилище"/>
|
||||||
|
</properties>
|
||||||
|
</component>
|
||||||
|
<component id="9ebdc" class="javax.swing.JButton" binding="ButtonShowMap">
|
||||||
|
<constraints>
|
||||||
|
<grid row="4" column="0" row-span="1" col-span="3" vsize-policy="0" hsize-policy="3" anchor="0" fill="1" indent="0" use-parent-layout="false"/>
|
||||||
|
</constraints>
|
||||||
|
<properties>
|
||||||
|
<text value="Показать карту"/>
|
||||||
|
</properties>
|
||||||
|
</component>
|
||||||
|
<component id="acbc" class="javax.swing.JButton" binding="buttonUp">
|
||||||
|
<constraints>
|
||||||
|
<grid row="6" column="1" row-span="1" col-span="1" vsize-policy="0" hsize-policy="0" anchor="0" fill="3" indent="0" use-parent-layout="false">
|
||||||
|
<minimum-size width="30" height="30"/>
|
||||||
|
<preferred-size width="30" height="30"/>
|
||||||
|
<maximum-size width="30" height="30"/>
|
||||||
|
</grid>
|
||||||
|
</constraints>
|
||||||
|
<properties>
|
||||||
|
<text value=""/>
|
||||||
|
</properties>
|
||||||
|
</component>
|
||||||
|
<component id="a584e" class="javax.swing.JButton" binding="buttonDown">
|
||||||
|
<constraints>
|
||||||
|
<grid row="7" column="1" row-span="1" col-span="1" vsize-policy="0" hsize-policy="0" anchor="0" fill="3" indent="0" use-parent-layout="false">
|
||||||
|
<minimum-size width="30" height="30"/>
|
||||||
|
<preferred-size width="30" height="30"/>
|
||||||
|
<maximum-size width="30" height="30"/>
|
||||||
|
</grid>
|
||||||
|
</constraints>
|
||||||
|
<properties>
|
||||||
|
<text value=""/>
|
||||||
|
</properties>
|
||||||
|
</component>
|
||||||
|
<component id="e9fe6" class="javax.swing.JButton" binding="buttonLeft">
|
||||||
|
<constraints>
|
||||||
|
<grid row="7" column="0" row-span="1" col-span="1" vsize-policy="0" hsize-policy="0" anchor="0" fill="3" indent="0" use-parent-layout="false">
|
||||||
|
<minimum-size width="30" height="30"/>
|
||||||
|
<preferred-size width="30" height="30"/>
|
||||||
|
<maximum-size width="30" height="30"/>
|
||||||
|
</grid>
|
||||||
|
</constraints>
|
||||||
|
<properties>
|
||||||
|
<text value=""/>
|
||||||
|
</properties>
|
||||||
|
</component>
|
||||||
|
<component id="25a22" class="javax.swing.JButton" binding="buttonRight">
|
||||||
|
<constraints>
|
||||||
|
<grid row="7" column="2" row-span="1" col-span="1" vsize-policy="0" hsize-policy="0" anchor="0" fill="3" indent="0" use-parent-layout="false">
|
||||||
|
<minimum-size width="30" height="30"/>
|
||||||
|
<preferred-size width="30" height="30"/>
|
||||||
|
<maximum-size width="30" height="30"/>
|
||||||
|
</grid>
|
||||||
|
</constraints>
|
||||||
|
<properties>
|
||||||
|
<text value=""/>
|
||||||
|
</properties>
|
||||||
|
</component>
|
||||||
|
<component id="6734a" class="javax.swing.JButton" binding="ButtonCheckDel">
|
||||||
|
<constraints>
|
||||||
|
<grid row="5" column="0" row-span="1" col-span="3" vsize-policy="0" hsize-policy="3" anchor="0" fill="1" indent="0" use-parent-layout="false"/>
|
||||||
|
</constraints>
|
||||||
|
<properties>
|
||||||
|
<text value="Удаленные"/>
|
||||||
|
</properties>
|
||||||
|
</component>
|
||||||
|
</children>
|
||||||
|
</grid>
|
||||||
|
<grid id="d087c" binding="GroupBoxMaps" layout-manager="GridLayoutManager" row-count="7" column-count="1" same-size-horizontally="false" same-size-vertically="false" hgap="-1" vgap="-1">
|
||||||
|
<margin top="0" left="0" bottom="0" right="0"/>
|
||||||
|
<constraints>
|
||||||
|
<grid row="0" column="1" row-span="1" col-span="1" vsize-policy="3" hsize-policy="3" anchor="0" fill="3" indent="0" use-parent-layout="false"/>
|
||||||
|
</constraints>
|
||||||
|
<properties/>
|
||||||
|
<border type="none"/>
|
||||||
|
<children>
|
||||||
|
<component id="124b6" class="javax.swing.JTextField" binding="textBoxNewMapName">
|
||||||
|
<constraints>
|
||||||
|
<grid row="1" column="0" row-span="1" col-span="1" vsize-policy="0" hsize-policy="6" anchor="8" fill="1" indent="0" use-parent-layout="false">
|
||||||
|
<preferred-size width="150" height="-1"/>
|
||||||
|
</grid>
|
||||||
|
</constraints>
|
||||||
|
<properties/>
|
||||||
|
</component>
|
||||||
|
<vspacer id="3ed0f">
|
||||||
|
<constraints>
|
||||||
|
<grid row="6" column="0" row-span="1" col-span="1" vsize-policy="6" hsize-policy="1" anchor="0" fill="2" indent="0" use-parent-layout="false"/>
|
||||||
|
</constraints>
|
||||||
|
</vspacer>
|
||||||
|
<component id="95ba3" class="javax.swing.JComboBox" binding="ComboBoxSelectorMap">
|
||||||
|
<constraints>
|
||||||
|
<grid row="2" column="0" row-span="1" col-span="1" vsize-policy="0" hsize-policy="2" anchor="8" fill="1" indent="0" use-parent-layout="false"/>
|
||||||
|
</constraints>
|
||||||
|
<properties>
|
||||||
|
<model>
|
||||||
|
<item value="Простая карта"/>
|
||||||
|
<item value="Карта острова"/>
|
||||||
|
<item value="Карта скалы"/>
|
||||||
|
</model>
|
||||||
|
</properties>
|
||||||
|
</component>
|
||||||
|
<component id="fb777" class="javax.swing.JButton" binding="ButtonAddMap">
|
||||||
|
<constraints>
|
||||||
|
<grid row="3" column="0" row-span="1" col-span="1" vsize-policy="0" hsize-policy="3" anchor="0" fill="1" indent="0" use-parent-layout="false"/>
|
||||||
|
</constraints>
|
||||||
|
<properties>
|
||||||
|
<text value="Добавить карту"/>
|
||||||
|
</properties>
|
||||||
|
</component>
|
||||||
|
<component id="a358a" class="javax.swing.JButton" binding="ButtonDeleteMap">
|
||||||
|
<constraints>
|
||||||
|
<grid row="5" column="0" row-span="1" col-span="1" vsize-policy="0" hsize-policy="3" anchor="0" fill="1" indent="0" use-parent-layout="false"/>
|
||||||
|
</constraints>
|
||||||
|
<properties>
|
||||||
|
<text value="Удалить карту"/>
|
||||||
|
</properties>
|
||||||
|
</component>
|
||||||
|
<vspacer id="64e67">
|
||||||
|
<constraints>
|
||||||
|
<grid row="0" column="0" row-span="1" col-span="1" vsize-policy="6" hsize-policy="1" anchor="0" fill="2" indent="0" use-parent-layout="false"/>
|
||||||
|
</constraints>
|
||||||
|
</vspacer>
|
||||||
|
<component id="e221" class="javax.swing.JList" binding="ListBoxMaps" custom-create="true">
|
||||||
|
<constraints>
|
||||||
|
<grid row="4" column="0" row-span="1" col-span="1" vsize-policy="6" hsize-policy="2" anchor="0" fill="3" indent="0" use-parent-layout="false">
|
||||||
|
<preferred-size width="150" height="50"/>
|
||||||
|
</grid>
|
||||||
|
</constraints>
|
||||||
|
<properties/>
|
||||||
|
</component>
|
||||||
|
</children>
|
||||||
|
</grid>
|
||||||
|
</children>
|
||||||
|
</grid>
|
||||||
|
</form>
|
309
FormMapWithSetShipsGeneric.java
Normal file
309
FormMapWithSetShipsGeneric.java
Normal file
@ -0,0 +1,309 @@
|
|||||||
|
import javax.imageio.ImageIO;
|
||||||
|
import javax.swing.*;
|
||||||
|
import java.awt.*;
|
||||||
|
import java.awt.event.ActionEvent;
|
||||||
|
import java.awt.event.ActionListener;
|
||||||
|
import java.awt.event.KeyAdapter;
|
||||||
|
import java.awt.event.KeyEvent;
|
||||||
|
import java.awt.image.BufferedImage;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import javax.swing.event.ListSelectionEvent;
|
||||||
|
import javax.swing.event.ListSelectionListener;
|
||||||
|
public class FormMapWithSetShipsGeneric extends JFrame{
|
||||||
|
public JPanel Mainpanel;
|
||||||
|
private JPanel pictureBoxShip;
|
||||||
|
private JPanel GroupBoxTools;
|
||||||
|
private JComboBox ComboBoxSelectorMap;
|
||||||
|
private JButton ButtonAddShip;
|
||||||
|
private JButton ButtonDeleteShip;
|
||||||
|
private JButton ButtonShowStorage;
|
||||||
|
private JButton ButtonShowMap;
|
||||||
|
private JButton buttonLeft;
|
||||||
|
private JButton buttonDown;
|
||||||
|
private JButton buttonUp;
|
||||||
|
private JButton buttonRight;
|
||||||
|
private JTextField maskedTextBoxPosition;
|
||||||
|
private JTextField textBoxNewMapName;
|
||||||
|
private int picWidth=600;
|
||||||
|
private int picHeight=400;
|
||||||
|
private JButton ButtonAddMap;
|
||||||
|
private JList ListBoxMaps;
|
||||||
|
private JButton ButtonDeleteMap;
|
||||||
|
private JPanel GroupBoxMaps;
|
||||||
|
private JButton ButtonCheckDel;
|
||||||
|
private MapWithSetShipGeneric<DrawningObjectShip,AbstractMap> _mapShipsCollectionGeneric;
|
||||||
|
private final HashMap<String,AbstractMap> _mapsDict = new HashMap<>(){{
|
||||||
|
put("Простая карта",new SimpleMap());
|
||||||
|
put("Вторая карта",new SecondMap());
|
||||||
|
put("Последняя карта",new LastMap());
|
||||||
|
}};
|
||||||
|
private final MapsCollection _mapsCollection;
|
||||||
|
public void UpdateWindow(BufferedImage bmp)
|
||||||
|
{
|
||||||
|
pictureBoxShip.removeAll();
|
||||||
|
JLabel imageWithMapAndObject = new JLabel();
|
||||||
|
imageWithMapAndObject.setPreferredSize(pictureBoxShip.getSize());
|
||||||
|
imageWithMapAndObject.setMinimumSize(new Dimension(1, 1));
|
||||||
|
imageWithMapAndObject.setIcon(new ImageIcon(bmp));
|
||||||
|
pictureBoxShip.add(imageWithMapAndObject, BorderLayout.CENTER);
|
||||||
|
pictureBoxShip.revalidate();
|
||||||
|
}
|
||||||
|
private void ReloadMaps(){
|
||||||
|
int index = ListBoxMaps.getSelectedIndex();
|
||||||
|
DefaultListModel<String> model1 = (DefaultListModel<String>) ListBoxMaps.getModel();
|
||||||
|
model1.removeAllElements();
|
||||||
|
for(int i=0;i<_mapsCollection.Keys().size();i++)
|
||||||
|
{
|
||||||
|
model1.addElement(_mapsCollection.Keys().get(i));
|
||||||
|
}
|
||||||
|
if (ListBoxMaps.getModel().getSize() > 0 && (index == -1 || index >= ListBoxMaps.getModel().getSize()))
|
||||||
|
{
|
||||||
|
ListBoxMaps.setSelectedIndex(0);
|
||||||
|
}
|
||||||
|
else if (ListBoxMaps.getModel().getSize() > 0 && index > -1 && index < ListBoxMaps.getModel().getSize())
|
||||||
|
{
|
||||||
|
ListBoxMaps.setSelectedIndex(index);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
public FormMapWithSetShipsGeneric()
|
||||||
|
{
|
||||||
|
//picWidth = pictureBoxShip.getWidth();
|
||||||
|
//picHeight = pictureBoxShip.getHeight();
|
||||||
|
_mapsCollection = new MapsCollection(picWidth, picHeight);
|
||||||
|
ComboBoxSelectorMap.removeAllItems();
|
||||||
|
for (String elem : _mapsDict.keySet()) {
|
||||||
|
ComboBoxSelectorMap.addItem(elem);
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
Image img = ImageIO.read(FormShip.class.getResource("/Images/totop.png"));
|
||||||
|
buttonUp.setIcon(new ImageIcon(img));
|
||||||
|
img = ImageIO.read(FormShip.class.getResource("/Images/toleft.png"));
|
||||||
|
buttonLeft.setIcon(new ImageIcon(img));
|
||||||
|
img = ImageIO.read(FormShip.class.getResource("/Images/todown.png"));
|
||||||
|
buttonDown.setIcon(new ImageIcon(img));
|
||||||
|
img = ImageIO.read(FormShip.class.getResource("/Images/toright.png"));
|
||||||
|
buttonRight.setIcon(new ImageIcon(img));
|
||||||
|
} catch (Exception ex) {
|
||||||
|
System.out.println(ex);
|
||||||
|
}
|
||||||
|
|
||||||
|
ButtonAddShip.addActionListener(new ActionListener() {
|
||||||
|
@Override
|
||||||
|
public void actionPerformed(ActionEvent e) {
|
||||||
|
if (ListBoxMaps.getSelectedIndex() == -1)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
FormShip dialog = new FormShip();
|
||||||
|
dialog.setSize(800, 600);
|
||||||
|
dialog.setLocation(500, 200);
|
||||||
|
dialog.setModalityType(Dialog.ModalityType.APPLICATION_MODAL);
|
||||||
|
dialog.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
|
||||||
|
dialog.setVisible(true);
|
||||||
|
|
||||||
|
if (dialog.GetSelectedShip() == null) return;
|
||||||
|
|
||||||
|
DrawningObjectShip ship = new DrawningObjectShip(dialog.GetSelectedShip());
|
||||||
|
|
||||||
|
if(_mapsCollection.Get(ListBoxMaps.getSelectedValue().toString()).Add(ship) != -1)
|
||||||
|
{
|
||||||
|
JOptionPane.showMessageDialog(null,"Объект добавлен");
|
||||||
|
UpdateWindow(_mapsCollection.Get(ListBoxMaps.getSelectedValue().toString()).ShowSet());
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
JOptionPane.showMessageDialog(null, "Не удалось добавить объект");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
ListBoxMaps.addListSelectionListener(new ListSelectionListener() {
|
||||||
|
@Override
|
||||||
|
public void valueChanged(ListSelectionEvent e) {
|
||||||
|
if (ListBoxMaps.getSelectedIndex() == -1)
|
||||||
|
return;
|
||||||
|
UpdateWindow(_mapsCollection.Get(ListBoxMaps.getSelectedValue().toString()).ShowSet());
|
||||||
|
}
|
||||||
|
});
|
||||||
|
ButtonDeleteShip.addActionListener(new ActionListener() {
|
||||||
|
@Override
|
||||||
|
public void actionPerformed(ActionEvent e) {
|
||||||
|
if (maskedTextBoxPosition.getText().isEmpty())
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
int result = JOptionPane.showConfirmDialog(null,"Удалить объект?","Удаление",JOptionPane.YES_NO_OPTION,JOptionPane.WARNING_MESSAGE);
|
||||||
|
if(result==JOptionPane.NO_OPTION)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
int pos=Integer.parseInt(maskedTextBoxPosition.getText());
|
||||||
|
if(_mapsCollection.Get(ListBoxMaps.getSelectedValue().toString()).Delete(pos)!=null)
|
||||||
|
{
|
||||||
|
JOptionPane.showMessageDialog(null, "Объект удален");
|
||||||
|
UpdateWindow(_mapsCollection.Get(ListBoxMaps.getSelectedValue().toString()).ShowSet());
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
JOptionPane.showMessageDialog(null, "Не удалось удалить объект");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
ButtonShowStorage.addActionListener(new ActionListener() {
|
||||||
|
@Override
|
||||||
|
public void actionPerformed(ActionEvent e) {
|
||||||
|
if (ListBoxMaps.getSelectedIndex() == -1)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
UpdateWindow(_mapsCollection.Get(ListBoxMaps.getSelectedValue().toString()).ShowSet());
|
||||||
|
}
|
||||||
|
});
|
||||||
|
ButtonShowMap.addActionListener(new ActionListener() {
|
||||||
|
@Override
|
||||||
|
public void actionPerformed(ActionEvent e) {
|
||||||
|
if (ListBoxMaps.getSelectedIndex() == -1)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
UpdateWindow(_mapsCollection.Get(ListBoxMaps.getSelectedValue().toString()).ShowOnMap());
|
||||||
|
}
|
||||||
|
});
|
||||||
|
buttonUp.addActionListener(new ActionListener() {
|
||||||
|
@Override
|
||||||
|
public void actionPerformed(ActionEvent e) {
|
||||||
|
if (ListBoxMaps.getSelectedIndex() == -1)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
pictureBoxShip.removeAll();
|
||||||
|
JLabel imageWithMapAndObject = new JLabel();
|
||||||
|
imageWithMapAndObject.setPreferredSize(pictureBoxShip.getSize());
|
||||||
|
imageWithMapAndObject.setMinimumSize(new Dimension(1, 1));
|
||||||
|
imageWithMapAndObject.setIcon(new ImageIcon(_mapsCollection.Get(ListBoxMaps.getSelectedValue().toString()).MoveObject(Direction.Up)));
|
||||||
|
pictureBoxShip.add(imageWithMapAndObject, BorderLayout.CENTER);
|
||||||
|
pictureBoxShip.revalidate();
|
||||||
|
pictureBoxShip.repaint();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
buttonDown.addActionListener(new ActionListener() {
|
||||||
|
@Override
|
||||||
|
public void actionPerformed(ActionEvent e) {
|
||||||
|
if (ListBoxMaps.getSelectedIndex() == -1)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
pictureBoxShip.removeAll();
|
||||||
|
JLabel imageWithMapAndObject = new JLabel();
|
||||||
|
imageWithMapAndObject.setPreferredSize(pictureBoxShip.getSize());
|
||||||
|
imageWithMapAndObject.setMinimumSize(new Dimension(1, 1));
|
||||||
|
imageWithMapAndObject.setIcon(new ImageIcon(_mapsCollection.Get(ListBoxMaps.getSelectedValue().toString()).MoveObject(Direction.Down)));
|
||||||
|
pictureBoxShip.add(imageWithMapAndObject, BorderLayout.CENTER);
|
||||||
|
pictureBoxShip.revalidate();
|
||||||
|
pictureBoxShip.repaint();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
buttonRight.addActionListener(new ActionListener() {
|
||||||
|
@Override
|
||||||
|
public void actionPerformed(ActionEvent e) {
|
||||||
|
if (ListBoxMaps.getSelectedIndex() == -1)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
pictureBoxShip.removeAll();
|
||||||
|
JLabel imageWithMapAndObject = new JLabel();
|
||||||
|
imageWithMapAndObject.setPreferredSize(pictureBoxShip.getSize());
|
||||||
|
imageWithMapAndObject.setMinimumSize(new Dimension(1, 1));
|
||||||
|
imageWithMapAndObject.setIcon(new ImageIcon(_mapsCollection.Get(ListBoxMaps.getSelectedValue().toString()).MoveObject(Direction.Right)));
|
||||||
|
pictureBoxShip.add(imageWithMapAndObject, BorderLayout.CENTER);
|
||||||
|
pictureBoxShip.revalidate();
|
||||||
|
pictureBoxShip.repaint();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
buttonLeft.addActionListener(new ActionListener() {
|
||||||
|
@Override
|
||||||
|
public void actionPerformed(ActionEvent e) {
|
||||||
|
if (ListBoxMaps.getSelectedIndex() == -1)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
pictureBoxShip.removeAll();
|
||||||
|
JLabel imageWithMapAndObject = new JLabel();
|
||||||
|
imageWithMapAndObject.setPreferredSize(pictureBoxShip.getSize());
|
||||||
|
imageWithMapAndObject.setMinimumSize(new Dimension(1, 1));
|
||||||
|
imageWithMapAndObject.setIcon(new ImageIcon(_mapsCollection.Get(ListBoxMaps.getSelectedValue().toString()).MoveObject(Direction.Left)));
|
||||||
|
pictureBoxShip.add(imageWithMapAndObject, BorderLayout.CENTER);
|
||||||
|
pictureBoxShip.revalidate();
|
||||||
|
pictureBoxShip.repaint();
|
||||||
|
|
||||||
|
}
|
||||||
|
});
|
||||||
|
maskedTextBoxPosition.addKeyListener(new KeyAdapter() {
|
||||||
|
@Override
|
||||||
|
public void keyTyped(KeyEvent e) {
|
||||||
|
char c = e.getKeyChar();
|
||||||
|
if ( ((c < '0') || (c > '9')) || maskedTextBoxPosition.getText().length() >= 2) {
|
||||||
|
e.consume();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
ButtonAddMap.addActionListener(new ActionListener() {
|
||||||
|
@Override
|
||||||
|
public void actionPerformed(ActionEvent e) {
|
||||||
|
if (ComboBoxSelectorMap.getSelectedIndex() == -1 || textBoxNewMapName.getText().isEmpty())
|
||||||
|
{
|
||||||
|
JOptionPane.showMessageDialog(null,"Не все данные заполнены","Ошибка",JOptionPane.ERROR_MESSAGE);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if(!_mapsDict.containsKey(ComboBoxSelectorMap.getSelectedItem()))
|
||||||
|
{
|
||||||
|
JOptionPane.showMessageDialog(null,"Нет такой карты","Ошибка",JOptionPane.ERROR_MESSAGE);
|
||||||
|
}
|
||||||
|
_mapsCollection.AddMap(textBoxNewMapName.getText(),_mapsDict.get(ComboBoxSelectorMap.getSelectedItem().toString()));
|
||||||
|
ReloadMaps();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
ButtonDeleteMap.addActionListener(new ActionListener() {
|
||||||
|
@Override
|
||||||
|
public void actionPerformed(ActionEvent e) {
|
||||||
|
if (ListBoxMaps.getSelectedIndex() == -1)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if(JOptionPane.showConfirmDialog(null,"Удалить карту"+ListBoxMaps.getSelectedValue().toString()+"?","Удаление",JOptionPane.YES_NO_OPTION)==0)
|
||||||
|
{
|
||||||
|
_mapsCollection.DelMap(ListBoxMaps.getSelectedValue().toString());
|
||||||
|
ReloadMaps();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
ButtonCheckDel.addActionListener(new ActionListener() {
|
||||||
|
@Override
|
||||||
|
public void actionPerformed(ActionEvent e) {
|
||||||
|
if (ListBoxMaps.getSelectedIndex() == -1)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
DrawningObjectShip ship = _mapsCollection.Get(ListBoxMaps.getSelectedValue().toString()).GetShipsDeleted();
|
||||||
|
if(ship == null)
|
||||||
|
{
|
||||||
|
JOptionPane.showMessageDialog(null,"Коллекция пуста","Ошибка",JOptionPane.ERROR_MESSAGE);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
FormShip dialog = new FormShip();
|
||||||
|
dialog.setShipIn(ship);
|
||||||
|
dialog.setSize(800, 600);
|
||||||
|
dialog.setLocation(500, 200);
|
||||||
|
dialog.setModalityType(Dialog.ModalityType.APPLICATION_MODAL);
|
||||||
|
dialog.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
|
||||||
|
dialog.setVisible(true);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
private void createUIComponents() {
|
||||||
|
DefaultListModel<String> dlm = new DefaultListModel<String>();
|
||||||
|
ListBoxMaps = new JList(dlm);
|
||||||
|
}
|
||||||
|
}
|
@ -71,6 +71,11 @@ public class FormShip extends JDialog{
|
|||||||
Draw();
|
Draw();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void setShipIn(DrawningObjectShip ship)
|
||||||
|
{
|
||||||
|
this.ship = ship.getDrawingShip();
|
||||||
|
}
|
||||||
|
|
||||||
public FormShip() {
|
public FormShip() {
|
||||||
Box LabelBox = Box.createHorizontalBox();
|
Box LabelBox = Box.createHorizontalBox();
|
||||||
LabelBox.setMinimumSize(new Dimension(1, 20));
|
LabelBox.setMinimumSize(new Dimension(1, 20));
|
||||||
|
@ -2,8 +2,8 @@ import javax.swing.*;
|
|||||||
|
|
||||||
public class Main {
|
public class Main {
|
||||||
public static void main(String[] args) {
|
public static void main(String[] args) {
|
||||||
JFrame frame = new JFrame("Hard №3");
|
JFrame frame = new JFrame("Hard №4");
|
||||||
frame.setContentPane(new FormShipMixer().Mainpanel);
|
frame.setContentPane(new FormMapWithSetShipsGeneric().Mainpanel);
|
||||||
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
|
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
|
||||||
frame.setLocation(500, 200);
|
frame.setLocation(500, 200);
|
||||||
frame.pack();
|
frame.pack();
|
||||||
|
@ -1,5 +1,7 @@
|
|||||||
import java.awt.*;
|
import java.awt.*;
|
||||||
import java.awt.image.BufferedImage;
|
import java.awt.image.BufferedImage;
|
||||||
|
import java.util.LinkedList;
|
||||||
|
import java.util.Queue;
|
||||||
|
|
||||||
public class MapWithSetShipGeneric<T extends IDrawningObject, U extends AbstractMap> {
|
public class MapWithSetShipGeneric<T extends IDrawningObject, U extends AbstractMap> {
|
||||||
private int _pictureWidth;
|
private int _pictureWidth;
|
||||||
@ -8,9 +10,11 @@ public class MapWithSetShipGeneric<T extends IDrawningObject, U extends Abstract
|
|||||||
private int _placeSizeHeight = 100;
|
private int _placeSizeHeight = 100;
|
||||||
private SetShipGeneric<T> _setShips;
|
private SetShipGeneric<T> _setShips;
|
||||||
private U _map;
|
private U _map;
|
||||||
|
private Queue<T> _deletedShips;
|
||||||
|
|
||||||
public MapWithSetShipGeneric(int picWidth, int picHeight, U map)
|
public MapWithSetShipGeneric(int picWidth, int picHeight, U map)
|
||||||
{
|
{
|
||||||
|
_deletedShips = new LinkedList<>();
|
||||||
int width = picWidth / _placeSizeWidth;
|
int width = picWidth / _placeSizeWidth;
|
||||||
int height = picHeight / _placeSizeHeight;
|
int height = picHeight / _placeSizeHeight;
|
||||||
_setShips = new SetShipGeneric<T>(width * height);
|
_setShips = new SetShipGeneric<T>(width * height);
|
||||||
@ -25,7 +29,9 @@ public class MapWithSetShipGeneric<T extends IDrawningObject, U extends Abstract
|
|||||||
}
|
}
|
||||||
public T Delete(int position)
|
public T Delete(int position)
|
||||||
{
|
{
|
||||||
return _setShips.Remove(position);
|
T temp = _setShips.Remove(position);
|
||||||
|
_deletedShips.add(temp);
|
||||||
|
return temp;
|
||||||
}
|
}
|
||||||
|
|
||||||
public BufferedImage ShowSet()
|
public BufferedImage ShowSet()
|
||||||
@ -39,18 +45,27 @@ public class MapWithSetShipGeneric<T extends IDrawningObject, U extends Abstract
|
|||||||
|
|
||||||
public BufferedImage ShowOnMap()
|
public BufferedImage ShowOnMap()
|
||||||
{
|
{
|
||||||
BufferedImage bmp = new BufferedImage(_pictureWidth, _pictureHeight, BufferedImage.TYPE_INT_RGB);
|
//BufferedImage bmp = new BufferedImage(_pictureWidth, _pictureHeight, BufferedImage.TYPE_INT_RGB);
|
||||||
|
|
||||||
Shaking();
|
Shaking();
|
||||||
for (int i = 0; i < _setShips.getCount(); i++)
|
for (var ship : _setShips)
|
||||||
{
|
{
|
||||||
var ship = _setShips.Get(i);
|
return _map.CreateMap(_pictureWidth,_pictureHeight,ship);
|
||||||
if (ship != null)
|
}
|
||||||
|
return new BufferedImage(_pictureWidth, _pictureHeight, BufferedImage.TYPE_INT_RGB);
|
||||||
|
}
|
||||||
|
|
||||||
|
public T GetSelectedShip(int ind){
|
||||||
|
return _setShips.Get(ind);
|
||||||
|
}
|
||||||
|
|
||||||
|
public T GetShipsDeleted()
|
||||||
{
|
{
|
||||||
return _map.CreateMap(_pictureWidth, _pictureHeight, ship);
|
if(_deletedShips.isEmpty())
|
||||||
|
{
|
||||||
|
return null;
|
||||||
}
|
}
|
||||||
}
|
return _deletedShips.remove();
|
||||||
return bmp;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public BufferedImage MoveObject(Direction direction)
|
public BufferedImage MoveObject(Direction direction)
|
||||||
@ -108,15 +123,14 @@ public class MapWithSetShipGeneric<T extends IDrawningObject, U extends Abstract
|
|||||||
|
|
||||||
private void DrawShips(Graphics g)
|
private void DrawShips(Graphics g)
|
||||||
{
|
{
|
||||||
for (int i = 0; i < _setShips.getCount(); ++i)
|
int i = 0;
|
||||||
{
|
for (var ship: _setShips)
|
||||||
if (_setShips.Get(i) != null )
|
|
||||||
{
|
{
|
||||||
int temp = 0;
|
int temp = 0;
|
||||||
if (_setShips.Get(i).GetCurrentPosition()[3] - _setShips.Get(i).GetCurrentPosition()[2] < 75) temp = (int)(_setShips.Get(i).GetCurrentPosition()[3] - _setShips.Get(i).GetCurrentPosition()[2]);
|
if (ship.GetCurrentPosition()[3] - ship.GetCurrentPosition()[2] < 75) temp = (int)(ship.GetCurrentPosition()[3] - ship.GetCurrentPosition()[2]);
|
||||||
_setShips.Get(i).SetObject((_pictureWidth / _placeSizeWidth - (i % (_pictureWidth / _placeSizeWidth)) - 1) * _placeSizeWidth, (i / (_pictureWidth / _placeSizeWidth)) * _placeSizeHeight + temp, _pictureWidth, _pictureHeight);
|
ship.SetObject((_pictureWidth / _placeSizeWidth - (i % (_pictureWidth / _placeSizeWidth)) - 1) * _placeSizeWidth, (i / (_pictureWidth / _placeSizeWidth)) * _placeSizeHeight + temp, _pictureWidth, _pictureHeight);
|
||||||
_setShips.Get(i).DrawningObject(g);
|
ship.DrawningObject(g);
|
||||||
}
|
++i;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
48
MapsCollection.java
Normal file
48
MapsCollection.java
Normal file
@ -0,0 +1,48 @@
|
|||||||
|
import java.util.AbstractCollection;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.HashMap;
|
||||||
|
|
||||||
|
public class MapsCollection {
|
||||||
|
private final HashMap<String,MapWithSetShipGeneric<DrawningObjectShip, AbstractMap>> _mapStorages;
|
||||||
|
public ArrayList<String> Keys()
|
||||||
|
{
|
||||||
|
return new ArrayList<>(_mapStorages.keySet());
|
||||||
|
}
|
||||||
|
private final int _pictureWidth;
|
||||||
|
private final int _pictureHeight;
|
||||||
|
|
||||||
|
public MapsCollection(int pictureWidth,int pictureHeight)
|
||||||
|
{
|
||||||
|
_mapStorages = new HashMap<>();
|
||||||
|
this._pictureWidth = pictureWidth;
|
||||||
|
this._pictureHeight = pictureHeight;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void AddMap(String Name, AbstractMap Map)
|
||||||
|
{
|
||||||
|
if(!_mapStorages.containsKey(Name))
|
||||||
|
{
|
||||||
|
_mapStorages.put(Name,new MapWithSetShipGeneric<>(_pictureWidth,_pictureHeight,Map));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void DelMap(String name)
|
||||||
|
{
|
||||||
|
_mapStorages.remove(name);
|
||||||
|
}
|
||||||
|
|
||||||
|
public MapWithSetShipGeneric<DrawningObjectShip,AbstractMap> Get(String ind)
|
||||||
|
{
|
||||||
|
if(_mapStorages.containsKey(ind))
|
||||||
|
{
|
||||||
|
return _mapStorages.get(ind);
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public DrawningObjectShip Get(String name, int ind)
|
||||||
|
{
|
||||||
|
if (_mapStorages.containsKey(name)) return _mapStorages.get(name).GetSelectedShip(ind);
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
@ -1,19 +1,16 @@
|
|||||||
public class SetShipGeneric<T> {
|
import java.util.*;
|
||||||
private T[] _places;
|
|
||||||
|
public class SetShipGeneric<T> implements Iterable<T> {
|
||||||
|
private ArrayList<T> _places;
|
||||||
|
private final int _maxCount;
|
||||||
public int getCount() {
|
public int getCount() {
|
||||||
return _places.length;
|
return _places.size();
|
||||||
}
|
}
|
||||||
|
|
||||||
public SetShipGeneric(int count)
|
public SetShipGeneric(int count)
|
||||||
{
|
{
|
||||||
_places = (T[])(new Object[count]);
|
_maxCount = count;
|
||||||
}
|
_places = new ArrayList<>();
|
||||||
|
|
||||||
private boolean CanInsert(int position)
|
|
||||||
{
|
|
||||||
for (int i = position; i < _places.length; ++i)
|
|
||||||
if (_places[i] == null) return true;
|
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public int Insert(T ship)
|
public int Insert(T ship)
|
||||||
@ -23,32 +20,35 @@ public class SetShipGeneric<T> {
|
|||||||
|
|
||||||
public int Insert(T ship, int position)
|
public int Insert(T ship, int position)
|
||||||
{
|
{
|
||||||
if (position < 0 || position > _places.length) return -1;
|
if (position < 0 || position > getCount() || _maxCount == getCount()) return -1;
|
||||||
if (_places[position] != null && CanInsert(position))
|
_places.add(position,ship);
|
||||||
{
|
|
||||||
for (int i = _places.length - 1; i > position; --i)
|
|
||||||
{
|
|
||||||
if (_places[i] == null)
|
|
||||||
{
|
|
||||||
_places[i] = _places[i - 1];
|
|
||||||
_places[i - 1] = null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
_places[position] = ship;
|
|
||||||
return position;
|
return position;
|
||||||
}
|
}
|
||||||
|
|
||||||
public T Remove(int position)
|
public T Remove(int position)
|
||||||
{
|
{
|
||||||
T DelElement = _places[position];
|
if (position < 0 || position >= getCount()) return null;
|
||||||
_places[position] = null;
|
T DelElement = (T) _places.get(position);
|
||||||
|
_places.remove(position);
|
||||||
return DelElement;
|
return DelElement;
|
||||||
}
|
}
|
||||||
|
|
||||||
public T Get(int position)
|
public T Get(int position)
|
||||||
{
|
{
|
||||||
if (position < 0 || position > _places.length) return null;
|
if (position < 0 || position >= getCount()) return null;
|
||||||
return _places[position];
|
return _places.get(position);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Set(int position,T value)
|
||||||
|
{
|
||||||
|
if (position < _maxCount || position >= 0)
|
||||||
|
{
|
||||||
|
Insert(value, position);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Iterator<T> iterator() {
|
||||||
|
return _places.iterator();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user