Компонент вида планирования в Swing - PullRequest
2 голосов
/ 23 июня 2009

Мне нужно построить графический интерфейс Swing, как это GUI Mockup http://img199.imageshack.us/img199/7271/mockupl.png где обычно есть 40 колонок тура. В каждом столбце обычно до 20 заказов за тур. Заказы могут быть сгруппированы в рамках тура. Должна быть возможность горизонтального увеличения до столбцов, до заказов D & D в рамках тура и других туров. Позже представление может измениться, включая, например, изображения.

Однажды я сделал нечто подобное, используя JTable, но для этой задачи я думаю, что JTable не является правильным решением. А из-за группировки заказов нет реальных строк.

Мысль № 1: Я подумал об использовании JPanel, LayoutManager (или NullLayout) и JComponents для этого, но я не уверен, что это путь.

Мысль № 2: Другая возможность состоит в том, чтобы использовать JPanel (в панели прокрутки), установить для его размера правильное значение, переопределить paintComponent и нарисовать все самому (возможно, с помощью такого подхода, как TableCellRenderer, чтобы не нужно рисовать все самостоятельно - то есть, используя один рендерер для каждого типа для рендеринга, установите его значения, используйте Graphics.translate и затем component.paint ...)

В обоих подходах мне нужно реализовать код D & D самостоятельно, # 1 позволил бы использовать реализацию D & D JComponents, но это не было бы так сложно в # 2. Вставка и удаление ордеров в # 2 кажется более простым, поскольку в # 1 задействованы некоторые LayoutManager (или в случае NullLayout все элементы ниже), в противном случае требуется только перерисовка. # 1 может быть проблема с памятью, когда создается так много JComponents, и первоначальное добавление (компонент) в моих первых тестах кажется довольно дорогостоящим.

Что вы думаете? Как бы вы это реализовали? Или, может быть, есть какая-нибудь библиотека для свинга для создания такой панели?

Ответы [ 4 ]

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

Подход № 1 должен работать. Я делал это несколько раз.

Но если вы хотите упростить перетаскивание, я бы предложил использовать JLists (без полос прокрутки) для ваших заказов. Вы сможете реализовать D & D в списках, а также между ними, если это необходимо. Чтобы настроить внешний вид заказа, вы можете использовать средства визуализации. В верхней части списков вы можете использовать панели или метки в качестве заголовков тура.

Итак, я бы создал специализированный компонент TourView с заголовком сверху и JList снизу. Затем добавьте множество панелей TourViews на панель, как вы думали в случае № 1.

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

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

, чтобы расширить мысль № 1: Вы могли бы сделать это с последовательностью JPanels. Ваш родительский JPanel будет размещать набор панелей Tour в столбцах фиксированной ширины. классы Tour могут быть панелями, которые содержат панель TourHeader и набор панелей ItineraryItem. Это может быть тяжелее, но другим будет легче следовать.

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

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

Каким-то образом я думаю, что использование библиотеки Infonode (Docking Windows) может помочь, включая D & D, вы можете легко перемещать панели. Единственная проблема с этим состояла бы в том, чтобы "принудить" это, например, используя одно RootWindow (базовый компонент для Тура, я не уверен.

Infonode - это библиотека GPL, для коммерческого использования также есть коммерческая лицензия, в зависимости от ваших потребностей.

Для информации, я не связан с ними, но я использую этот фреймворк, и мне это нравится, и это может быть решением, может быть,

http://www.infonode.net/index.html?idwdemo (проверить демо)

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

оба подхода возможны, хотя я бы, вероятно, исключил # 2 из-за сложности реализации.

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

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