From 7796905b0ec248a1a2177c12e8db2bbd45f95092 Mon Sep 17 00:00:00 2001 From: prodigygirl Date: Sat, 19 Nov 2022 18:10:50 +0400 Subject: [PATCH] =?UTF-8?q?2.=20=D0=94=D0=B5=D0=BB=D0=B5=D0=B3=D0=B0=D1=82?= =?UTF-8?q?=20=D0=B2=D1=80=D0=BE=D0=B4=D0=B5=20=D0=B1=D1=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/Delegator.java | 28 ++++++++++++ src/main/java/FormArmoredCarConfig.java | 26 ++++++----- src/main/java/FormMapWithArmoredCars.java | 53 ++++++++++------------- 3 files changed, 66 insertions(+), 41 deletions(-) create mode 100644 src/main/java/Delegator.java diff --git a/src/main/java/Delegator.java b/src/main/java/Delegator.java new file mode 100644 index 0000000..f9c7673 --- /dev/null +++ b/src/main/java/Delegator.java @@ -0,0 +1,28 @@ +import java.awt.*; +import java.lang.reflect.Method; +import java.util.HashMap; + + +public class Delegator { + private HashMap methods = new HashMap<>(); + + public void add(Method method_ref, Object consumer) { + methods.put(method_ref, consumer); + } + + public void remove(Object method_ref) { + methods.remove(method_ref); + } + + public void invoke(T arg) { + try { + Method method = methods.keySet().stream().toList().get(0); + FormMapWithArmoredCars consumer = (FormMapWithArmoredCars) methods.get(method); + method.setAccessible(true); + method.invoke(consumer, arg); + } + catch (Exception e) { + e.printStackTrace(); + } + } +} diff --git a/src/main/java/FormArmoredCarConfig.java b/src/main/java/FormArmoredCarConfig.java index 3da5305..253d4a9 100644 --- a/src/main/java/FormArmoredCarConfig.java +++ b/src/main/java/FormArmoredCarConfig.java @@ -8,6 +8,7 @@ import java.awt.event.ActionListener; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.io.IOException; +import java.lang.reflect.Method; public class FormArmoredCarConfig extends JDialog{ private JPanel mainPanel; @@ -33,6 +34,7 @@ public class FormArmoredCarConfig extends JDialog{ private JLabel labelCatCounts; private DrawingArmoredCar armoredCar = null; + private Delegator delegator; public FormArmoredCarConfig() { setTitle("Создание объекта"); @@ -70,19 +72,15 @@ public class FormArmoredCarConfig extends JDialog{ colorsPanel.setLayout(new GridLayout(2, 4)); colorsPanel.setBackground(null); setColors(); - buttonCancel.addActionListener((e) -> dispose()); new DrawPanelDropTargetListener(drawPanel); new LabelColorDropTargetListener(labelBaseColor); new LabelColorDropTargetListener(labelDopColor); - buttonOk.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent e) { - // TODO работа с делегатом (вызов метода по созданию объекта из другой формы) - dispose(); - } + buttonOk.addActionListener(e -> { + delegator.invoke(armoredCar); + dispose(); }); } @@ -200,10 +198,6 @@ public class FormArmoredCarConfig extends JDialog{ } } - public static void main(String[] args) { - new FormArmoredCarConfig(); - } - private void createUIComponents() { drawPanel = new JPanel() { @Override @@ -229,7 +223,7 @@ public class FormArmoredCarConfig extends JDialog{ colors[2] = Color.BLUE; colors[3] = Color.YELLOW; colors[4] = Color.WHITE; - colors[5] = Color.DARK_GRAY; + colors[5] = Color.GRAY; colors[6] = Color.BLACK; colors[7] = Color.MAGENTA; @@ -251,4 +245,12 @@ public class FormArmoredCarConfig extends JDialog{ i++; } } + + public void addEvent(Method event, Object consumer) { + if (delegator == null) + { + delegator = new Delegator<>(); + } + delegator.add(event, consumer); + } } diff --git a/src/main/java/FormMapWithArmoredCars.java b/src/main/java/FormMapWithArmoredCars.java index 4527591..b2417c3 100644 --- a/src/main/java/FormMapWithArmoredCars.java +++ b/src/main/java/FormMapWithArmoredCars.java @@ -38,7 +38,6 @@ public class FormMapWithArmoredCars extends JFrame{ public FormMapWithArmoredCars() { super("Карта с набором объектов"); - setBounds(100, 100, 1000, 700); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); @@ -48,34 +47,12 @@ public class FormMapWithArmoredCars extends JFrame{ mapSelectorComboBox.addItem(elem); } - buttonAddArmoredCar.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent e) { - if (listBoxMaps.getSelectedIndex() == -1) - { - return; - } - FormArmoredCar form = new FormArmoredCar(); - form.addWindowListener(new WindowAdapter() { - @Override - public void windowDeactivated(WindowEvent e) { - if (form.getSelectedCar() == null) - return; - DrawingObjectArmoredCar armoredCar = new DrawingObjectArmoredCar(form.getSelectedCar()); - if (_mapsCollection.get((String)listBoxMaps.getSelectedValue()).add(armoredCar) > -1) - { - if (form.DialogResult) { - JOptionPane.showMessageDialog(null, "Объект добавлен"); - img = _mapsCollection.get((String) listBoxMaps.getSelectedValue()).ShowSet(); - repaint(); - } - } - else - { - JOptionPane.showMessageDialog(null, "Не удалось добавить объект"); - } - } - }); + buttonAddArmoredCar.addActionListener(e -> { + var form = new FormArmoredCarConfig(); + try { + form.addEvent(FormMapWithArmoredCars.class.getDeclaredMethod("AddArmoredCar", DrawingArmoredCar.class), this); + } catch (NoSuchMethodException noSuchMethodException) { + noSuchMethodException.printStackTrace(); } }); buttonRemoveArmoredCar.addActionListener(new ActionListener() { @@ -238,4 +215,22 @@ public class FormMapWithArmoredCars extends JFrame{ listBoxMaps.setSelectedIndex(index); } } + + public void AddArmoredCar(DrawingArmoredCar drawingArmoredCar) { + if (listBoxMaps.getSelectedIndex() == -1) + { + return; + } + DrawingObjectArmoredCar armoredCar = new DrawingObjectArmoredCar(drawingArmoredCar); + if (_mapsCollection.get((String)listBoxMaps.getSelectedValue()).add(armoredCar) > -1) + { + JOptionPane.showMessageDialog(null, "Объект добавлен"); + img = _mapsCollection.get((String) listBoxMaps.getSelectedValue()).ShowSet(); + repaint(); + } + else + { + JOptionPane.showMessageDialog(null, "Не удалось добавить объект"); + } + } }