2. Делегат вроде бы
This commit is contained in:
parent
dfab5596fc
commit
7796905b0e
28
src/main/java/Delegator.java
Normal file
28
src/main/java/Delegator.java
Normal 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();
|
||||
}
|
||||
}
|
||||
}
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
@ -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, "Не удалось добавить объект");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user