Там, кажется, два отдельных вопроса, связанные:
- Как описать и создать большое количество действий?
- Как представить большое количество действий в графическом интерфейсе?
@Tom's answer предназначено для # 1 и @Fabio's для # 2.
Вы можете использовать любой текстовый формат для # 1, xml, 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, такой как SwiXML, если вы не хотите добавить в приложение еще много других виджетов GUI со сложной компоновкой.
Обратите внимание на атрибуты, которые у меня есть в приведенном выше образце. id
будет отображать уникальную команду действий. Вы можете отображать description
и icon
(я полагаю, вы уже используете значок) любым способом. Вы также можете использовать другие свойства, такие как мнемоника, ускоритель и т. Д., После чего использование XML начнет окупаться: вы можете добавить произвольные атрибуты, которые вам нужны.
Одно очевидное упущение в XML - это сами действительные действия. Я делаю не думаю, что вы должны поместить Java-код в XML. Он побеждает разделение беспокойства. Вместо этого вы можете определить свой код действия общим способом (например,простирайтесь AbstractAction
) и сопоставьте их с идентификаторами действий. Если вы используете AbstractAction
, вы можете тривиальным сопоставить атрибуты ключей свойств действий как Action.NAME
, Action.LONG_DESCRIPTION
и т.д.
Теперь вы разобрали XML в список объектов действия, и здесь возникает второй вопрос: как вы их показываете?
JList
(per @Fabio) действительно самый эффективный способ. Он намного компактнее, чем целая куча отдельных кнопок, но в отличие от JComboBox
вы можете увидеть сразу несколько элементов, и вы можете легко добавить сортировку/поиск/фильтр.
Но список не очень гибкий. Вы можете использовать пользовательский ListCellRenderer
для отображения значка и всплывающей подсказки (для описания), но вы начнете растягивать его, когда хотите группировать элементы.
Я думаю, что наиболее гибким способом будет таблица деревьев, которая позволит вам иметь многоуровневую иерархию. Вы можете начать с 2 столбцов, первый столбец показывает имена действий иерархически, второй столбец показывает описание.
Вы можете поместить таблицу в складную панель, чтобы ее можно было скрыть, когда пользователь хочет сосредоточиться на результатах.
Сейчас w.r.t. JToolBar
, вы правы, что это стандарт, однако, как заметил комментарий Фабио, это плохое использование, когда у вас слишком много кнопок на панели инструментов (например, M $ Word перед лентой).
Однако было бы полезно использовать панель инструментов, чтобы разрешить пользователям размещать на их панели действия по своему выбору, как это делают большинство популярных настольных приложений. Вы можете использовать диалоговое окно «Настроить панель инструментов» или просто позволить пользователям перетаскивать элементы из списка или таблицы.
К сожалению, многие из графических конструкций, о которых я упоминал выше, являются не доступны в JDK. Вы можете найти все из них (таблица деревьев, поиск/фильтр, сворачиваемая панель, настраиваемая панель инструментов и т. Д.) Из отличных коммерческих библиотек JIDE (отказ от ответственности: я не работаю для них, хотя иногда мне это нравится), или вы могут найти альтернативы FOSS.
Что произойдет после того, как пользователь нажмет кнопку? –
@Geoffrey: вызывается метод long-task (обычно удаленный метод), и результат отображается в графическом интерфейсе – Cratylus
OK ... какова природа результата и как он отображается? Таблица? Область текста? Нам нужно знать, что именно делает ваш графический интерфейс, чтобы помочь вам лучше его спроектировать. –