Swing: Какой хороший способ реализовать полностью масштабируемые компоненты? - PullRequest
1 голос
/ 23 июня 2009

Я создаю приложение, которое имеет прокручиваемый и масштабируемый (масштабируемый) вид. Внутри этого представления я хочу разместить другие компоненты (большинство из них настроены JPanel s и JInternalFrame s).

Такие вещи, как шрифты и границы, и подэлементы, такие как кнопки не , должны быть масштабируемыми. Только размеры и расположение компонентов контейнера должны быть.

Как вы думаете, Какой хороший способ реализовать масштабируемые компоненты?

РЕДАКТИРОВАНИЕ: Я говорю об изменении размера всего макета , включая все компоненты. Пожалуйста, подумайте о чем-нибудь, например о визуальном редакторе UML с функцией увеличения.

Мои альтернативы:

  • Создание собственного менеджера компоновки;
  • Создание настраиваемых изменяемых размеров подкомпонентов;
  • Создайте пользовательский контейнер, который позаботится об изменении размера его подкомпонентов;
  • Делать что-нибудь еще?

Возможные проблемы:

  • Код Boilerplate;
  • Необходимость предоставления доступа к дополнительным настраиваемым свойствам компонентов;
  • Непростое (противоречивое) представление компонентов в коде.
  • Что-то еще?

Ответы [ 4 ]

1 голос
/ 23 июня 2009

Вот почему существуют менеджеры компоновки: они сообщают содержащимся компонентам, где и насколько они должны быть большими.

Поскольку вы говорите о редакторе UML, используете ли вы компоненты Swing для представления различных объектов на диаграмме (например, компонента для класса)? Если да, то у вас впереди много работы (хотя это не обязательно плохой подход). Я бы порекомендовал создать объект ограничений, который идентифицирует местоположение объекта в «единичном пространстве», а затем умножить на текущий размер.

1 голос
/ 23 июня 2009

Я сделал это, создав собственный менеджер раскладки. Каждый компонент (или, скорее, класс компонента) на фрейме имеет маркер, независимо от того, будет ли он изменен при изменении размера контейнера (например, изменен размер таблиц, нет кнопок). Те, которые не были изменены, перемещаются при изменении размера контейнера.

Это используется для создания изменяемых размеров форм без какой-либо ручной настройки, то есть формы определяются просто указанием x / y / length / width для каждого компонента (без дополнительной информации о выравнивании).

0 голосов
/ 18 июля 2009

Я запустил аналогичное решение, которое отлично работает, не касаясь оригинального макета.

Это так просто, как это:

// Install scalable layout and CTRL+/CTRL- keys for scaling operations
ScalableLayoutUtils.installScalableLayoutAndKeys(new DefaultScalableLayoutRegistry(),  frame, 0.1);

Это все еще в работе, но скоро будет доступно как часть следующей версии "utils4swing".

0 голосов
/ 23 июня 2009

Если я смотрю на эту проблему как на визуальный редактор UML, то мне нужно было подумать об отдельном компоненте «холст», рисующем каждый элемент как графический объект с базовым соотношением сторон и увеличением / уменьшением. Я не вижу причины для списка компонентов, выровненных в родительском контейнере.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...