Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Лаб. 4 ПиАПС

.docx
Скачиваний:
0
Добавлен:
29.05.2025
Размер:
319.73 Кб
Скачать

Л а б о р а т о р н а я р а б о т а № 4

«Реализация одного из структурных паттернов проектирования»

Цель работы: Применение паттерна проектирования Proxy (заместитель, surrogate, суррогат)

package org.example; public interface UploadingImageImpl { public void createImageBox(String image); public void loadImageIntoBox(String imagePath); }

package org.example; import javax.swing.*; import java.awt.*; public class UploadingImage implements UploadingImageImpl{ private JFrame frame; private JPanel imageBox; @Override public void createImageBox(String imagePath) { //ImageIcon imageIcon = new ImageIcon("src/img/TestImage4.jpg"); // Класс для представления изображений в графическом интерфейсе ImageIcon imageIcon = new ImageIcon(imagePath); int width = imageIcon.getIconWidth(); System.out.println("width: " + width); int height = imageIcon.getIconHeight(); System.out.println("height: " + height); // Создание окна (JFrame) frame = new JFrame("Image Box"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // Программа завершится при закрытии окна frame.setSize(width, height); frame.setUndecorated(true); // Отключение главной рамки frame.setLocationRelativeTo(null); // Центрирование окна на экране // Создание пустой панели с размерами изображения imageBox = new JPanel(); imageBox.setPreferredSize(new Dimension(width, height)); imageBox.setBorder(null); // Отключение рамку вокруг панели // Добавление панели в окно frame.add(imageBox, BorderLayout.CENTER); frame.setVisible(true); } @Override public void loadImageIntoBox(String imagePath) { imageBox.removeAll(); // Очистка содержимого бокса // Создание JLabel с изображением JLabel label = new JLabel(new ImageIcon(imagePath)); imageBox.add(label); // Добавление изображение в бокс imageBox.revalidate(); // Обновление макета панели imageBox.repaint(); // Перерисовывание панели } public JFrame getFrame() { return frame; } public JPanel getImageBox() { return imageBox; } }

package org.example; import javax.swing.*; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; public class ProxyUploadingImage implements UploadingImageImpl{ private UploadingImage realUploadingImage; private String imagePath; private JFrame frame; private JPanel imageBox; private int mouseX, mouseY; public ProxyUploadingImage() { this.realUploadingImage = new UploadingImage(); } @Override public void createImageBox(String imagePath) { this.imagePath = imagePath; realUploadingImage.createImageBox(imagePath); this.frame = realUploadingImage.getFrame(); this.imageBox = realUploadingImage.getImageBox(); if (frame != null && imageBox != null) { addMouseListener(); addDragListener(); } } private void addMouseListener() { imageBox.addMouseListener(new MouseAdapter() { @Override public void mouseClicked(MouseEvent e) { if (SwingUtilities.isRightMouseButton(e) && e.getClickCount() == 2) { System.out.println("Двойной правый клик! Загрузка изображения..."); loadImageIntoBox(imagePath); } } }); } @Override public void loadImageIntoBox(String imagePath) { realUploadingImage.loadImageIntoBox(imagePath); } private void addDragListener() { imageBox.addMouseListener(new MouseAdapter() { @Override public void mousePressed(MouseEvent e) { mouseX = e.getX(); mouseY = e.getY(); } }); imageBox.addMouseMotionListener(new MouseAdapter() { @Override public void mouseDragged(MouseEvent e) { int x = frame.getLocation().x + e.getX() - mouseX; int y = frame.getLocation().y + e.getY() - mouseY; frame.setLocation(x, y); } }); } }

package org.example; public class Main { public static void main(String[] args) { String imagePath = "src/img/TestImage5.jpg"; UploadingImageImpl p = new ProxyUploadingImage(); p.createImageBox(imagePath); } }

Соседние файлы в предмете Проектирование и архитектура программных систем