Реализация Интерактивных Диаграмм С Использованием Ооп На Примере Прототипа Редактора Диаграмм Uml. Часть 2

Это конец предыдущая публикация , в котором я рассказал о том, как с нуля создать интерфейс с интерактивной графикой в объектно-ориентированной среде разработки.

В первой части мы рассмотрели ключевые архитектурные идеи этой системы: использование методов композиции, делегирования и шаблонов.

Теперь я перехожу к более рутинным вопросам и рассмотрю создание класса, отвечающего за обработку событий мыши, масштабирование, панорамирование, выбор объектов и перетаскивание.



Класс Диаграммпанель



Визуальные компоненты

Исходный код класса DiagramPanel, в отличие от DiagramObject, не содержит каких-либо нетривиальных структурных решений; он выполняет только рутинные задачи.

Однако его код примерно на 30% длиннее, чем код DiagramObject. В нем собрана вся специфика, связанная со средой разработки: если вы захотите переписать фреймворк с Java на другую среду (как мы в свое время сделали, переведя его с Delphi на Java), основные трудности будут связаны с DiagramObject. При работе с Swing класс DiagramPanel наследуется от класса javax.swing.JPanel и представляет собой компонент визуального интерфейса, который можно разместить в форме приложения.

Наше демонстрационное приложение состоит только из этой панели.

Структурно DiagramPanel состоит из:

  • горизонтальные и вертикальные полосы прокрутки javax.swing.JScrollBar (переменные hsb и vsb),
  • верхняя панель с экранными кнопками,
  • заполнение всего центрального пространства области «рисования», занимаемого объектом DiagramPanel.DiagramCanvas, потомком java.awt.Canvas. Класс java.awt.Canvas должен создать потомка с переопределенным методом Paint(Graphics g), который принимает контекст рисования (Graphics) в качестве аргумента, что мы и делаем в классе DiagramCanvas, вложенном в DiagramPanel. Метод Paint(Graphics g) вызывается автоматически, в частности, при изменении размера окна и изменении перекрытия окон, поэтому диаграмма не «повреждается» этими действиями.



Рендеринг диаграммы с точки зрения DiagramPanel

Давайте подробнее рассмотрим код метода Paint(Graphics g) класса DiagramPanel.DiagramCanvas. Если опустить некоторые детали, то это выглядит так: источник Теги: #ООП #Пользовательский интерфейс #интерактивная графика #шаблоны проектирования #uml #программирование #java #Системный анализ и проектирование #проектирование и рефакторинг #ООП
Вместе с данным постом часто просматривают: