2. Делегат вроде бы

This commit is contained in:
prodigygirl 2022-11-19 18:10:50 +04:00
parent dfab5596fc
commit 7796905b0e
3 changed files with 66 additions and 41 deletions

View File

@ -0,0 +1,28 @@
import java.awt.*;
import java.lang.reflect.Method;
import java.util.HashMap;
public class Delegator<T extends DrawingArmoredCar> {
private HashMap<Method, Object> 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();
}
}
}

View File

@ -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<DrawingArmoredCar> 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);
}
}

View File

@ -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, "Не удалось добавить объект");
}
}
}