Можно ли динамически генерировать прилично выглядящие диалоги свойств? - PullRequest
2 голосов
/ 09 февраля 2010

У меня есть приложение, которое отображает диалоговые окна свойств для различных объектов с графическим интерфейсом. Поскольку существует огромное количество объектов различного типа, существует также огромное количество диалоговых окон различных свойств. Поскольку мы ленивы, мы не хотели создавать вручную каждый диалог свойств; Кроме того, плагины могут вводить новые виды объектов, которые также нуждаются в диалоговых окнах свойств, и было бы неплохо, если бы разработчикам плагинов не требовалось также вручную вводить диалоговые окна свойств (как для сохранения их работы, так и для обеспечения однородности результата). ). Вместо этого мы создали структуру, которая отображает свойства этих объектов на компоненты GUI (например, флажки, текстовые поля, поля со списком), а затем упаковывает их все в диалог. Это дает преимущество в том, что с нашей стороны не требуется никакой работы по созданию диалогов, но диалоги также выглядят так, как будто мы не вкладывали усилий в их раскладку: они выглядят как стеки блоков Jenga. На эти диалоги стыдно смотреть.

Итак, мой вопрос: есть ли способ автоматически размещать диалоги свойств, чтобы они не выглядели так ужасно? (Я понимаю, что ответом на это может быть «Нет», но также может быть и так, что мы просто недостаточно креативны, чтобы думать о лучших путях.) NB: Мы работаем с Java Swing, но на самом деле Сама проблема не зависит от языка.

Ответы [ 5 ]

2 голосов
/ 28 февраля 2010

Я бы поставил свой голос как «нет», по крайней мере, за достаточно различающие определения «автоматически» и «не выглядят так ужасно».

Это определенно распространенная проблема: я думаю, что по крайней мере трое из моих коллег просили что-то подобное только в прошлом году. К сожалению, я не знаю ни одного решения для автоматической верстки, которое не требует значительных указаний (например, указание макетов в XUI) для работы.

Очевидно, что вы можете сделать простые вещи, чтобы сделать ваши автоматически сгенерированные компоненты более легко компонуемыми, такие как стандартизация ширины и высоты надписей и содержимого. Вы также можете применить некоторые эвристические методы, такие как сортировка свойств по типу элемента управления, чтобы все поля со списками объединялись, все текстовые поля были вместе и т. Д.

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

2 голосов
/ 09 февраля 2010

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

Вот PDF для JIDE, который также показывает NetBeans и JBuilder.

0 голосов
/ 28 февраля 2010

Я бы предложил подход, использующий аннотации для управления вашей структурой GUI. Таким образом, ваши внутренние объекты могут объявлять, например, какие свойства являются наиболее важными и должны отображаться в верхней части пользовательского интерфейса (или в «простом» пользовательском интерфейсе, или на первой вкладке диалога с вкладками, или чего-либо еще) , Вы также можете использовать это, чтобы переопределить автоматически обнаруженный виджет, предоставляемый по умолчанию в платформе, или объявить валидатор и т. Д. И т. Д.

Вооружившись этой информацией, ваша структура может применять все виды эвристики для создания более удобных диалогов на лету. И ваши авторы плагинов могут по сути создавать свои собственные диалоги, по крайней мере, широкими штрихами, без необходимости написания кода пользовательского интерфейса.

0 голосов
/ 09 февраля 2010

Я думаю, что вы можете использовать XUI для упоминания ваших виджетов в XML, хорошая часть в том, что он также позволяет определять макеты в XML. Это именно то место, где я рекомендую использовать XUI, хотя они утверждают, что его можно использовать для создания целых приложений, я отрицаю. Кроме того, это обычный стандарт xui для Swing, что также делает ваш проект более стандартизированным.

0 голосов
/ 09 февраля 2010

Одно предложение: если ваши свойства названы в иерархическом формате, разделенном точками, вы можете динамически построить JTree для представления различных групп свойств. Когда пользователь нажимает на заданный узел в дереве, вы можете отобразить свойства в этой категории в пределах JTable в отдельном JPanel (например, в виде пар имя-значение). Вы также можете обогатить графический интерфейс, добавив JTextField, где пользователь может искать свойство.

Таким образом, по крайней мере, вы не представляете массу информации на одном экране ... хотя недостатком является то, что ваш GUI будет выглядеть как Regedit: -)

При редактировании свойств вы можете использовать отражение, чтобы определить тип свойства и, следовательно, применимый редактор ячеек; например,

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