GUI-библиотека для обработки примитивов и массивов/коллекций примитивов

Я построил много графических интерфейсов: и мне не нравятся зависимости от библиотек, поэтому я в конечном итоге делаю большую часть основ. Одна вещь, которую я в конечном итоге делаю снова и снова, - это сопоставление примитивов с компонентами графического интерфейса.

Например, если это boolean, я часто использую JCombobox с двумя параметрами ("true", "false"), и если это int, я использую JTextField. Большая часть работы состоит в том, чтобы перейти от и к тексту...

Некоторые примеры сопоставлений:

  • int или Integer = > JTextField или JSpinner
  • boolean = > JTextField, JCombobox или JCheckBox
  • int[] = > JList (с полем "добавить" и "удалить" )
  • Set<Byte> = > вероятно, тот же, что и массивы

Итак, на вопросы:

  • Существует ли уже библиотека, которая имеет такие сопоставления или мне нужно "изобрести" ее снова?
  • Я видел jfg, который использует refection и SWT как интерфейс (вы можете реализовать новый интерфейс с помощью swing, но это именно то, что я стараюсь избегать). Есть ли библиотека, которая использует swing и refection?

Ответ 1

есть 2 библиотеки связывания, с которыми я имел опыт:

  • застекленные списки - эта библиотека абсолютно светится, когда вы хотите сопоставить коллекцию с jtable (по одному элементу в строке, столбцы - это атрибуты объект).
  • привязка jgoodies - более универсальная библиотека для сопоставления атрибутов bean для элементов gui. его немного сложнее и труднее подобрать.

и почему примитивы? im assumming, что вы храните свою модель (набор всех значений, отображаемых/отредактированных gui) в одном или нескольких объектах нет? Если это так, вы можете положиться на автобоксинг и работать с обертками объектов в gui.

Ответ 2

Следует упомянуть JavaFX, который по-прежнему не является моим пивом.

Ответ 3

Вам может показаться интересным взглянуть на seesaw, который является графической библиотекой для Clojure, основанной на Swing.

Это довольно хорошая работа по упаковке функций Swing в довольно простых функциях - некоторые хорошие дизайнерские идеи, даже если вы не используете их напрямую. Например, он может напрямую связывать элементы управления с изменяемыми объектами данных:

; Bind a the value of a slider to an atom, with a transform
; that forces the value to [0, 1]
(let [s (slider :min 0 :max 1)
      a (atom 0.0)]
  (bind s (transform / 100.0) a))