Пользовательский компонент Swing: вопросы на подходе - PullRequest
3 голосов
/ 09 июня 2010

Я пытаюсь создать новый Java-компонент Swing, я понимаю, что, возможно, смогу найти тот, который делает то, что мне нужно, в Интернете, но это отчасти упражнение для меня, чтобы узнать, как это сделать.

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

кажется, что лучший подход для этого - это подкласс JComponent, ипереопределить PaintComponent(), чтобы «нарисовать картину» того, как должна выглядеть диаграмма, вместо того, чтобы делать что-то вроде попытки втиснуть все в пользовательский JTable.

Я прочитал пару книг опредмет, а также рассмотрел несколько примеров (в частности, такие вещи, как JXGraph), но мне любопытно несколько вещей

  • Когда мне нужно переключиться на использование делегатов пользовательского интерфейса,и когда я смогу просто поиграться в paintcomponent (), чтобы отобразить то, что я хочу?

  • , если я хочу, чтобы другие компоненты свинга были подэлементами моего компонента (например, я хотелтекстовое поле на моей диаграмме Ганта)

    • могу ли я больше не использовать paintComponent ()?
    • могу ли я произвольно расположить их в своей диаграмме Ганта, или мне нужно использовать нормальнуюменеджер по разметке свинга

заранее большое спасибо.

-Ace

Ответы [ 2 ]

10 голосов
/ 09 июня 2010

Я думаю, что статья , которую я написал несколько лет назад для java.net, до сих пор верна.Выполнение всего в одном монолитном классе поначалу заставляет вас двигаться быстрее, но довольно быстро превращается в беспорядок.Я настоятельно рекомендую сделать разделение между моделью (в вашем основном классе) и представлением (делегат пользовательского интерфейса).Представление отвечает за:

  • взаимодействие с пользователем - мышью, клавиатурой и т. Д.
  • рисование
  • создание «рабочих» подкомпонентов при необходимости

В среднесрочной и долгосрочной перспективе это подход, который снова и снова проверялся в наборе компонентов Flamingo , который можно использовать в качестве дополнительной контрольной точки (в дополнение к базовому Swingкомпоненты реализованы).

4 голосов
/ 09 июня 2010
  • Использование делегатов пользовательского интерфейса - хорошая идея, если вы считаете, что ваш компонент должен выглядеть по-разному для разных типов внешнего вида. Также, как правило, с точки зрения дизайна хорошая идея отделить презентацию от компонента

  • Даже при переопределении paintComponent вы все равно можете поместить в него любые подкомпоненты.

  • Используя нулевое расположение, вы можете произвольно позиционировать свои компоненты. В качестве альтернативы вы также можете использовать макеты.

Вот очень хорошая отправная точка для вас.

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