2010-10-12 2 views
0

У меня есть следующее требование для GUI, что у пользователя будет несколько доступных действий.
В настоящее время реализована серия JButtons, которую пользователь нажимает.
Но действий много, и в каждой версии возможно было бы предложить более «действия».
Я не уверен, как это лучше представлено/сделано в графических интерфейсах.
Я читал, что есть способы сформировать gui, описывающий соответствующую информацию в XML-файле.
Я использую Netbeans и качели. Является ли xml хорошей идеей, чтобы описать доступные действия и, например, создать такое же количество кнопок? Если да, то как я начну с этого? Кроме того, будет ли jtoobar хорошей идеей для действий? Я имею в виду добавить столько кнопок, сколько необходимо в Jtoolbar.
Я думаю, это общий вопрос, но я не испытываю в GUI. Любая помощь будет оценена!Подходы создания java-gui через файлы описания?

спасибо.

+0

Что произойдет после того, как пользователь нажмет кнопку? –

+0

@Geoffrey: вызывается метод long-task (обычно удаленный метод), и результат отображается в графическом интерфейсе – Cratylus

+0

OK ... какова природа результата и как он отображается? Таблица? Область текста? Нам нужно знать, что именно делает ваш графический интерфейс, чтобы помочь вам лучше его спроектировать. –

ответ

1

Там, кажется, два отдельных вопроса, связанные:

  1. Как описать и создать большое количество действий?
  2. Как представить большое количество действий в графическом интерфейсе?

@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.

+0

Большое спасибо! Некоторые вопросы: 1) о конструкциях, которые не являются частью JDK, как вы говорите, что вы думаете о swingx? Должен ли я попробовать или избежать этого? Кажется, есть все, что вы предлагаете. 2) Что касается предложения о том, что необходимо: зачем мне нужны 2 столбца? Обычно, если текст (или значок) на кнопке не ясен при использовании, используется всплывающая подсказка. Какая польза от тэстера над jlist в разборный паннель, я этого не добился. Чтобы сделать GUI красивее? 3) Как мне сопоставить идентификатор с моим фактическим классом для вызова во время выполнения? Через второй файл или через код? Я не делал этого раньше, и я не уверен. – Cratylus

+0

Если я использую только разборную панель и таблицу деревьев, стоит ли включать стороннюю библиотеку только для двух компонентов? Является ли это обычным в проектах графического интерфейса или я должен попытаться создать их самостоятельно? У вас есть предложение по альтернатива FOSS? – Cratylus

+0

@OP: 1) Я не использовал SwingX, но не могу себе представить, почему вы хотите этого избежать. 2) Я сказал, что таблица дерева является самой гибкой. Конечно, вы можете использовать список или дерево, но с таблицей дерева вы можете добавить больше столбцов, например. который показывает индикатор выполнения. 3) Вам все еще нужно жестко кодировать доступные действия, поскольку XML не имеет кода действия. Однако, если ваш код действия согласован и может быть абстрагирован, например, он всегда получает некоторые данные из узла дерева, а затем отправляет определенную команду серверу с этими данными, тогда вы также можете поместить это в XML. (Или вы могли бы даже использовать Jython ...) –

1

Я не знаю, хорошо ли я понял ваш вопрос, но мне кажется, что подход JButton не самый эффективный способ сделать такую ​​вещь. Представьте, что количество действий начинает быть действительно большим, слишком много кнопок приводит к неинтуитивному и непривлекательному интерфейсу. Альтернативой будет использование JComboBox или JList, чтобы отобразить все действия, не требующие большого количества места, и одну кнопку «сделать!». для выполнения действия.

Я надеюсь, что это было полезно;)

+0

Это хорошая идея. Но я не видел, чтобы многие GUI использовали этот метод, или я ошибаюсь? Обычно это не панель инструментов? – Cratylus

+0

Это всего лишь способ сделать что-то, я не видел много таких, но это концепция, которую я считаю интересной. Это действительно зависит от количества действий, которые вы будете иметь, если их немного, то подход кнопки/панели инструментов кажется резонным, но для большого количества действий (что означает большое количество кнопок) это не самый лучший способ, в моем потому что интерфейс становится все более запутанным и бессмысленным. С JList или JComboBox (я предпочитаю JList) вы держите вещи намного более компактными и организованными. – Fabio

0

Вопреки распространенному мнению около десяти лет назад, XML, обычно не является хорошей идеей. Соответствующим языком для выражения этого «программирования» является Java.

+0

Почему бы не xml? Также это означает, что для любого нового действия GUI должен быть заново создан и повторно установлен, не так ли? И как бы я справился, добавлено 10 новых действий в следующей версии? Добавить еще 10 JButtons? – Cratylus

+0

Также, когда вы говорите, что подходящий язык для выражения этого программирования в Java, как вы это понимаете? Создание JButtons? – Cratylus

Смежные вопросы