Лабораторная работа 4. Усложненная часть

This commit is contained in:
Danil Kargin 2022-12-13 10:04:35 +04:00
parent 48e2dfaf6c
commit 41281740e9
4 changed files with 51 additions and 11 deletions

View File

@ -24,6 +24,10 @@ public class FormAirFighter extends JFrame implements ComponentListener{
public DrawningAirFighter GetSelectedAirFighter(){ public DrawningAirFighter GetSelectedAirFighter(){
return SelectedAirFighter; return SelectedAirFighter;
} }
public void SetAirFighter(DrawningObjectAirFighter AirFighter){
_airFighter = AirFighter._airFighter;
SetData();
}
// Слушатель кнопки направления // Слушатель кнопки направления
private ActionListener actionListenerDirection = new ActionListener() { private ActionListener actionListenerDirection = new ActionListener() {

View File

@ -7,8 +7,9 @@ import java.awt.event.*;
import java.awt.image.BufferedImage; import java.awt.image.BufferedImage;
import java.io.File; import java.io.File;
import java.io.IOException; import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap; import java.util.HashMap;
import java.util.LinkedList;
import java.util.Queue;
public class FormMapWithSetAirFighters extends JFrame { public class FormMapWithSetAirFighters extends JFrame {
private JLabel panelForDrawing; private JLabel panelForDrawing;
@ -18,6 +19,7 @@ public class FormMapWithSetAirFighters extends JFrame {
private JButton buttonRight; private JButton buttonRight;
private JList<String> listStorage; private JList<String> listStorage;
private DefaultListModel<String> listModel; private DefaultListModel<String> listModel;
private Queue<DrawningObjectAirFighter> queueDeletedObjects = new LinkedList<DrawningObjectAirFighter>();
private final HashMap<String, AbstractMap> _mapDict = new HashMap<String, AbstractMap>() {{ private final HashMap<String, AbstractMap> _mapDict = new HashMap<String, AbstractMap>() {{
put("Простая карта", new SimpleMap()); put("Простая карта", new SimpleMap());
put("Карта шторма", new StormMap()); put("Карта шторма", new StormMap());
@ -92,12 +94,12 @@ public class FormMapWithSetAirFighters extends JFrame {
public void actionPerformed(ActionEvent e) { public void actionPerformed(ActionEvent e) {
if (mapComboBox.getSelectedIndex() == -1 || nameStorage.getText().isEmpty() || nameStorage.getText() == null) if (mapComboBox.getSelectedIndex() == -1 || nameStorage.getText().isEmpty() || nameStorage.getText() == null)
{ {
JOptionPane.showMessageDialog(panelToolsForMap, "Не все данные заполнены"); JOptionPane.showMessageDialog(panelForDrawing, "Не все данные заполнены");
return; return;
} }
if (!_mapDict.keySet().contains(mapComboBox.getSelectedItem().toString())) if (!_mapDict.keySet().contains(mapComboBox.getSelectedItem().toString()))
{ {
JOptionPane.showMessageDialog(panelToolsForMap,"Нет такой карты"); JOptionPane.showMessageDialog(panelForDrawing,"Нет такой карты");
return; return;
} }
_mapsCollection.AddMap(nameStorage.getText(), _mapsCollection.AddMap(nameStorage.getText(),
@ -131,7 +133,7 @@ public class FormMapWithSetAirFighters extends JFrame {
{ {
return; return;
} }
int confirm = JOptionPane.showOptionDialog(panelToolsForMap, int confirm = JOptionPane.showOptionDialog(panelForDrawing,
String.format("Удалить карту %s", listStorage.getSelectedValue()), String.format("Удалить карту %s", listStorage.getSelectedValue()),
"Exit Confirmation", JOptionPane.YES_NO_OPTION, "Exit Confirmation", JOptionPane.YES_NO_OPTION,
JOptionPane.QUESTION_MESSAGE, null, null, null); JOptionPane.QUESTION_MESSAGE, null, null, null);
@ -143,6 +145,29 @@ public class FormMapWithSetAirFighters extends JFrame {
} }
}); });
panelToolsForMap.add(buttonRemoveMap); panelToolsForMap.add(buttonRemoveMap);
// Кнопка вызова формы
JButton buttonOpenForm = new JButton("Открыть форму");
buttonOpenForm.setBounds(0, 250, 160, 30);
buttonOpenForm.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
var passedObject = queueDeletedObjects.poll();
if(passedObject != null) {
FormAirFighter form = new FormAirFighter();
form.setSize(500, 500);
form.setVisible(true);
form.SetAirFighter(passedObject);
form.addWindowListener (new WindowAdapter () {
public void windowClosing (WindowEvent e) {
e.getWindow ().dispose ();
}
});
}else{
JOptionPane.showMessageDialog(panelForDrawing, "Очередь пуста");
}
}
});
panelToolsForMap.add(buttonOpenForm);
// Панель инструментов // Панель инструментов
JPanel panelTools = new JPanel(); JPanel panelTools = new JPanel();
panelTools.setBounds(800, 300, 200, 400); panelTools.setBounds(800, 300, 200, 400);
@ -171,13 +196,13 @@ public class FormMapWithSetAirFighters extends JFrame {
JOptionPane.QUESTION_MESSAGE, null, null, null); JOptionPane.QUESTION_MESSAGE, null, null, null);
if (confirm == JOptionPane.YES_OPTION){ if (confirm == JOptionPane.YES_OPTION){
if(form.GetSelectedAirFighter() == null) { if(form.GetSelectedAirFighter() == null) {
JOptionPane.showMessageDialog(panelTools, "Объект не удалось добавить"); JOptionPane.showMessageDialog(panelForDrawing, "Объект не удалось добавить");
return; return;
} }
DrawningObjectAirFighter airFighter = new DrawningObjectAirFighter(form.GetSelectedAirFighter()); DrawningObjectAirFighter airFighter = new DrawningObjectAirFighter(form.GetSelectedAirFighter());
if (_mapsCollection.get(listStorage.getSelectedValue().toString()).Add(airFighter) == 0) if (_mapsCollection.get(listStorage.getSelectedValue().toString()).Add(airFighter) == 0)
{ {
JOptionPane.showMessageDialog(panelTools, "Объект добавлен"); JOptionPane.showMessageDialog(panelForDrawing, "Объект добавлен");
panelForDrawing.setIcon(new ImageIcon(_mapsCollection.get(listStorage.getSelectedValue().toString()).ShowSet())); panelForDrawing.setIcon(new ImageIcon(_mapsCollection.get(listStorage.getSelectedValue().toString()).ShowSet()));
} }
} }
@ -222,14 +247,16 @@ public class FormMapWithSetAirFighters extends JFrame {
return; return;
} }
int pos = Integer.parseInt(textFieldIndex.getText()); int pos = Integer.parseInt(textFieldIndex.getText());
if (_mapsCollection.get(listStorage.getSelectedValue().toString()).Remove(pos) != null) { var deletedObject = _mapsCollection.get(listStorage.getSelectedValue().toString()).Remove(pos);
JOptionPane.showMessageDialog(panelTools, "Объект удален"); if (deletedObject != null) {
JOptionPane.showMessageDialog(panelForDrawing, "Объект удален");
panelForDrawing.setIcon(new ImageIcon(_mapsCollection.get(listStorage.getSelectedValue().toString()).ShowSet())); panelForDrawing.setIcon(new ImageIcon(_mapsCollection.get(listStorage.getSelectedValue().toString()).ShowSet()));
queueDeletedObjects.add(deletedObject);
} else { } else {
JOptionPane.showMessageDialog(panelTools, "Не удалось удалить объект"); JOptionPane.showMessageDialog(panelForDrawing, "Не удалось удалить объект");
} }
}catch (Exception ex){ }catch (Exception ex){
JOptionPane.showMessageDialog(panelTools, "Неккоректный ввод"); JOptionPane.showMessageDialog(panelForDrawing, "Неккоректный ввод");
} }
} }
}); });

View File

@ -140,4 +140,7 @@ public class MapWithSetAirFightersGeneric <T extends IDrawningObject, U extends
} }
} }
} }
public T GetAirFighterInList(int ind){
return _setAirFighters.Get(ind);
}
} }

View File

@ -40,5 +40,11 @@ public class MapsCollection {
} }
return null; return null;
} }
public DrawningObjectAirFighter get(String name, int index){
if (_mapStorages.containsKey(name))
{
return _mapStorages.get(name).GetAirFighterInList(index);
}
return null;
}
} }