Кажется, что есть две отдельные проблемы:
- Как описать и создать большое количество действий?
- Как представить большое количество действий в GUI?
@ Том отвечает для № 1, а @ Фабио для № 2.
Вы можете использовать любой текстовый формат для № 1XML, CSV, все, что вам нравится.Это действительно хорошая идея отделить это от кода.XML отлично подходит для иерархических данных, поэтому он может быть излишним, если вам просто нужен плоский список:
<doc>
<action name="Action 1" id="ACT1" description="blah blah" icon="icon1.gif"/>
<action name="Action 2" id="ACT2" description="yada yada" icon="icon2.gif"/>
...
</doc>
Но анализ такого простого XML в основном бесплатный, так что вы можете просто использовать его.Вы не , однако вам необходим полнофункциональный инструментарий XML GUI, такой как SwiXML, если только вы не хотите добавлять в приложение много других виджетов GUI со сложным макетом.
Обратите внимание на атрибуты, которые у меня естьв приведенном выше примере.id
будет соответствовать уникальной команде действия.Вы можете отобразить description
и icon
(я полагаю, вы уже используете значок) любым удобным для вас способом.Вы также можете иметь другие свойства, такие как мнемоника, ускоритель и т. Д., Когда использование XML начинает приносить свои плоды: вы можете добавлять произвольные нужные вам атрибуты.
Одним очевидным упущением в XML являются сами фактические действия.,Я не думаю, что вы должны поместить код Java в XML.Это побеждает разделение проблем.Вместо этого вы можете определить свой код действия общим способом (например, extension AbstractAction
) и сопоставить их с идентификаторами действий.Если вы используете AbstractAction
, вы можете легко сопоставить свои атрибуты с ключами свойств действий, такими как Action.NAME
, Action.LONG_DESCRIPTION
и т. Д.
Теперь вы проанализировали XML в список объектов действий.и вот второй вопрос: как вы их отображаете?
JList
(на @Fabio) действительно самый эффективный способ.Он гораздо более компактен, чем целая куча отдельных кнопок, но в отличие от JComboBox
вы можете видеть сразу несколько элементов и легко добавлять сортировку / поиск / фильтр.
Но список не очень гибкий.Вы можете использовать пользовательский ListCellRenderer
для отображения значка и всплывающей подсказки (для описания), но вы начнете растягивать его, когда хотите сгруппировать элементы.
Я думаю, что наиболее гибкий способ - это древовидная таблица, что позволяет иметь многоуровневую иерархию.Вы можете начать с 2 столбцов, первый столбец показывает имена действий иерархически, второй столбец показывает описание.
Вы можете поместить таблицу в складную панель, чтобы ее можно было скрыть, когда пользователь хочет сосредоточиться на результатах..
Теперь по поводу JToolBar
, вы правы в том, что это стандарт, однако, как отмечается в комментарии Фабио, его нельзя использовать, когда у вас слишком много кнопок на панели инструментов (например, M $ Word перед лентой).
Однако было бы полезно использовать панель инструментов, чтобы позволить пользователю размещать действия по своему выбору на панели инструментов, как это делают большинство популярных настольных приложений.Вы можете использовать диалоговое окно «Настройка панели инструментов» или просто позволить пользователю перетаскивать элементы из вашего списка или таблицы.
К сожалению, многие из конструкций GUI, которые я упомянул выше, это , а не * 1055.* доступно в JDK.Вы можете найти их все (древовидную таблицу, поиск / фильтр, складную панель, настраиваемую панель инструментов и т. Д.) В отличных коммерческих JIDE библиотеках (отказ от ответственности: я не работаю на них, хотя иногда мне хочетсяДа, или вы можете найти альтернативы FOSS.