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))